Издательский дом ООО "Гейм Лэнд"СПЕЦВЫПУСК ЖУРНАЛА ХАКЕР #57, АВГУСТ 2005 г.

Кейген своими руками

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

Содержание  Вперед на стр. 057-044-2