Кейген своими руками GL#0M (gl00m-crk@yandex.ru) Спецвыпуск: Хакер, номер #057, стр. 057-044-1 Исследование программы MooGear DV Capture v1.0 Ни для кого не секрет, что статей (на русском языке) на тему создания ключегенераторов к программам, защита которых основана на криптоалгоритмах, ничтожно мало... Собственно, этот факт и побудил меня написать эту статью. А в качестве жертвы был выбран MooGear DV Capture v1.0. Сразу предупрежу, что я не собираюсь вдаваться в подробности каждого этапа работы криптоалгоритма, так как об этом написано немало отличных книг (например "Прикладная криптография" Брюса Шнайера). С их прочтения советую начинать. Плюс без опыта исследования программных защит и создания ключегенераторов (к простым защитам) тоже будет трудно осмыслить все нижесказанное. Для полноценной работы понадобятся PEiD, OllyDbg, IDA и MASM32. Теперь приступим к делу. Цель нашего исследования, как показал PEiD, написана на Microsoft Visual C++ 6.0. Это хорошо, потому что компилятор данного языка генерирует более компактный и легче распознаваемый код, в отличие от того же Delphi, код которого переполнен тоннами ненужных проверок и процедурами, при виде вложенности которых меня охватывает ужас. Не помешает также применить к нашей жертве какой-нибудь поисковик криптосигнатур. Лучшим, на мой взгляд, является KANAL (PEid plugin), поэтому воспользуемся именно им... Хех, найдено две сигнатуры, и обе относятся к алгоритму Blowfish. В таких случаях, то есть если обнаруживается какой-либо криптоалгоритм, я обычно сразу же загружаю файл в IDA и от адреса, указанного анализатором, выхожу на процедуру регистрации, попутно распознавая и называя элементы (процедуры, их параметры и переменные) криптоалгоритма более понятными именами. Но такой подход не всегда уместен... Например, этот криптоалгоритм может вообще не использоваться при проверке ключа, а быть лишь для нашего устрашения или использоваться какой-нибудь процедурой программы, совершенно не относящейся к регистрации. Поэтому поступим иначе, а точнее "дедовским" способом =). Запустим программу и откроем форму регистрации. Вводим любую чушь в поля регистрации и нажимаем OK. Как и следовало ожидать, мы ввели неверный серийный номер, на что и получили соответствующее сообщение. Как все уже заметили, это обычное сообщение об ошибке и, вернее всего, оно вызывается посредством стандартной функции, а именно - MessageBoxA. Поэтому загрузим нашу цель в OllyDbg и поставим точку останова на эту API. Когда OllyDbg остановится, нажимаем <Ctrl>+<F9>... Мы тут: 0041AD13|> FF7424 10pushdword ptr [esp+10h] ; /Style 0041AD17|. 50 pusheax ; |Title 0041AD18|. FF7424 10pushdword ptr [esp+10h] ; |Text 0041AD1C|. 51 pushecx ; |hOwner 0041AD1D|. FF15 30334200calldword ptr [<&USER32.MessageBoxA>] ; \MessageBoxA 0041AD23|. 5E pop esi 0041AD24\. C2 0C00retn0Ch Это лишь процедура показа сообщения... Проходим ret: 00409DFF > 6A 30push30h 00409E01 . 68 34B34200push0042B334h; "DV Capture" 00409E06 . 68 A0BA4200push0042BAA0h; "You have entered an Invalid License Code." 00409E0B . 8BCD mov ecx, ebp 00409E0D . E8 E30E0100call_MessageBoxA |