· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.RESEARCH —› Crypto API

. 1 . 2 . >>

Посл.отвђт Сообщенiе


Дата: Апр 10, 2004 16:02:15 · Поправил: bogrus

Я тут впервые пытаюсь закейгенить ...

Значит есть прога требующая примерно такие регистрационные данные :
========= Begin =========
Name: Hacker
Company: Hacker Corp.
Key: 75906AE38B20EC2A6B352ADC6ED4E585143E6B6BA98DCE3D8833DC4FC67301D1173CEB 170FC8075FA55927CAE6414A7215A9E789085BDEF65744EB4561936040
========== End ==========
Длина ключа 128 символов , имя и компания может быть пустым !

Проверка осуществляеться , как мне удалось понять , примерно такой последовательностью :
CryptAcquireContext,ADDR hProv,0,MS_DEF_PROV,PROV_RSA_FULL,CRYPT_VERIFYCONTEXT ; инициализация криптопровайдера
CryptImportKey,	hProv,offset ключ_зашит_впроге,54h,0,0,ADDR hKey ; в хранилище импортируеться ключ
CryptCreateHash,hProv,CALG_MD5,0,0,ADDR hHash ; создаёться MD5 хеш
CryptHashData,	hHash,offset Name,sizeof Name,0 ; хешируеться имя
CryptHashData,	hHash,offset Company,sizeof Company,0 ; хешируеться компания
CryptVerifySignature,hHash,offset Key,sizeof Key,hKey,0,0 ; Проверяеться ключ как подпись хеша

В ключе_зашитом_впроге (их там несколько) просматриваються символа "RSA1" .
Я выдрал эти ключи и пытаюсь их использовать (в кейгене)при создании подписи (CryptSignHash) .
Не получаеться , и меня вообще грызут сомнения , что-то не так ...

Внимание вопрос !
Какой последовательностью функций Crypto API может быть сгенерирован ключ автором ?


Дата: Апр 10, 2004 16:24:58

Если это стандартный алгоритм цифровой подписи, подпись формируется по формуле h^d mod n, где h - хэш, ^ - возведение в степень по модулю n, d - модулярная инверсия функции Эйлера "Фи". Если это так, здесь присутствует проблема дискретного логарифма. Для получения секретного ключа d тебе надо факторизовать(разложить на множители) модуль n. Если модуль - 128 бит в длину, разложить его - 15 мин. с помощью алгоритма квадратичного решета или эллиптических кривых. Могу разложить, если надо.


Дата: Апр 10, 2004 16:39:33

Немного ошибся - если 128 символов, значит, 64 байта или 512 бит - факторизация такого числа тоже возможна, но это займет несколько больше времени. А в ключах, которые имеются (если это стандартный алгоритм цифровой подписи RSA), должны быть два значения - экспонента и модуль. Для проверки подписи вводимое тобой значение возводится в степень экспоненты по модулю n и сравнивается со значением хэша, то есть выполняется тождество: x^(d*e)= x mod n. (d - модулярная инверсия, секретный ключ, e - экспонента, n - модуль)


Дата: Апр 10, 2004 17:25:44

без секретного ключа вряд ли что получится

самое реальное - стащить ключ у девелоперов :)


Дата: Апр 10, 2004 18:19:06 · Поправил: bogrus

"Name" и "Company" может быть пустым (так говорит автор проги).
Не может ли тот секретный ключ быть зашитым в проге ?

Там в проге есть ещё одна процедура проверки подписи (последовательность аналогична) , но она (я так думаю) служит просто для определения корректности работы СryptoAPI .
Входные данные в неё никакие не передаються (внешние) , только те , что зашиты в проге .
Я эту процедуру полностью восстановил и CryptVerifySignature возвращает TRUE .
Исходник (там же и все ключи из проги) в аттаче .

Так что , может мне не стоит заморачиваться с кейгеном ?
А пропатчить , чтобы CryptVerifySignature всегда "возвращала" TRUE :)


Funbit
самое реальное - стащить ключ у девелоперов :)

Самое реальное купить :))) , $20

ECk

Не хотел я учить математику , видимо пора :)


Дата: Апр 10, 2004 18:21:29

забыл аттач :)

_794981541__checkapi.Asm


Дата: Апр 10, 2004 19:12:23

процесс регистрации выглядит примерно так:

девелоперы получают NAME и COMPANY юзера
считают хеш от них и шифруют его секретным ключем
и отсылают зашифрованные данные в качестве KEY поля

проверка на валидность идет обратным путем,
достается введенный тобой KEY (т.е. который и нужно найти)
расшифровывается открытым ключем и полученное значение
сравнивается с хешем, посчитанным от NAME и COMPANY...

по-моему так (с)

т.е. без секретного ключа вряд ли что можно сделать...

p.s> на счет пустых полей - понятия не имею, что будет, если в CryptHashData пихать буфер нулевого размера, что она возвращает?


Дата: Апр 10, 2004 19:42:51

Funbit
что будет, если в CryptHashData пихать буфер нулевого размера, что она возвращает?

Кажеться очищает хеш :)


Дата: Апр 10, 2004 20:00:08

Гм, ребята, у вас же сорс есть. Crypto API - это же фри-библиотека. Чего бы в сорсах не покопаться?


Дата: Апр 10, 2004 23:11:28

а что в них копаться то ?


Дата: Апр 11, 2004 02:43:59 · Поправил: bogrus

О П У П Е Т Ь ! Вот это да !

Короче автор проги сам лоханулся .
Как я выше говорил , он сделал две процедуры проверки подписи (алгоритм у них одинаковый) :

- одна реально проверяет ключ регистрации
- вторая просто проверяет корректность работы Crypto API

И зашил в прогу соответственно два разных RSA ключа для них !
Так вот для этой второй проверки он зашил заведомо правильные Name,Company,Key в прогу . Иначе прога будет сообщать об ошибке криптопровайдера .

Мне осталось только подменить RSA ключ от второй проверки на место первой (два клика в HEX Workshop) и использовать теже Name,Company,Key .

З.Ы. А прога эта (драйвер прямого доступа к hardware под NT для дос-программ) разработки немецкого инженербюро . Проверки происходили в .cpl файле .


Дата: Апр 11, 2004 14:02:26

дык, а что лоханулся то? все равно ведь патч сделал

тогда уж можно со своим секретным ключем все это дело
шифровать, а открытый запихать в прогу на место старого..


Дата: Апр 12, 2004 11:11:26

дык, а что лоханулся то?

То , что зашил заведомо правильные рег. данные в прогу

все равно ведь патч сделал

А что мне оставалось ...
Ты же сам говорил , что без секретного ключа вряд ли что получиться .

тогда уж можно со своим секретным ключем все это дело

Можно , вот только определюсь какой последовательностью функций Crypto API это можна провернуть .


Дата: Апр 12, 2004 14:39:27

Можно , вот только определюсь какой последовательностью функций Crypto API это можна провернуть .
почитай тут, неплохо и доступно описаны основы
http://bcw.narod.ru/cryptoapi.html

То , что зашил заведомо правильные рег. данные в прогу
т.е. "серийник" прямо пашет ? :)

А что мне оставалось ...
Ты же сам говорил , что без секретного ключа вряд ли что получиться .

ага, шансов не много :]


Дата: Апр 12, 2004 15:05:44

т.е. "серийник" прямо пашет ?

как часики !
Зашитые в проге Name,Company,Key абсолютно валидные (под второй RSA ключ) .

почитай тут

Да , я читал . Ещё на RSDN есть парочка неплохих статей .
А у BlackWolf'а (http://home.od.ua/~blackw/Crypt/crypt.html) есть очень много интересного . Но ничего осюда уже не качаеться .
Никто не в курсе , может он где поновее сайт открыл ?

. 1 . 2 . >>


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.079