|
|
| Посл.отвђт | Сообщен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 |
|
|
Дата: Апр 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) есть очень много интересного . Но ничего осюда уже не качаеться . Никто не в курсе , может он где поновее сайт открыл ? |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.079 |