7 мая 2012 г.

Введение в реверс инженеринг используя IDA - Глава 2

И снова начало тяжелой рабочей недели и чтобы немного скрасить рабочий понедельник, займемся исследованием очередного crackme при помощи IDA.  Сегодня рассмотрим главу Рикардо Нарвахо под номером 13. Почитать ее на русском можно здесь.

Глава повествует как найти жестко прописанный серийник в программе. Для начала необходимо скачать файлы для испледования, например тут.

Открываем IDA и в нем делаем File->Open и выбираем фаил под названием Leccion 13 HARDCODED 1 .exe
Для начала необходимо посмотреть что у нас есть в строках. Выбираем View-> Open SubView->Strings. Появиться панель, наподобие этой:

Тут можно увидеть все строки которые нашлись в exe файле. Есть подозрение, что серийник это FIACA, в этом файле строк достаточно мало и по этому можно перебрать по одному, но это не наш метод, так как строк может быть несколько десятков, а то и сотен и гарантированный результат это не даст так как могут быть например фейковые серийники для отвлечения внимания, только потратишь время. Так что неплохо бы всетаки зацепиться за процедуру которая отвечает за получение серийного номера. В левом окне с функциями можно увидеть функцию под названием GetDllItemTextA очень часто ее используют для получения некоторых данных.

Ставим на эту функцию брякпоинт, для этого щелкаем ПКМ и в выпадающем меню Add breakpoint. Нажимаем F9 и смотрим что получилось.
Вводим какойнить фейковый серийник типа 1234567890 и нажимаем Verificar, после чего видим, что отладчик остановился на джампе на процедуру GetDllItemTextA. Нажимаем CTRL+F7 и выходим в основное тело программы из системных библиотек.
И сразу видим, что сравнивается FIACA с введеным фейковым серийником, както так:

 
Внизу видно, сравнение 4х байт слова FIAC и 1234 и уход если неправильный на "Mal Muy MAL".
Вот в общем и все, очень просто, снимаем брякпоинты, запускаем программу снова и вводим FIAC, так как сравнивается 4 байта, можно обрезать серийник, ну для эстетов, можно и целиком  FIACA.

Открываем второй файл, под названием Leccion 13 HARDCODED 2.exe.
Также как в первый раз смотрим какие строки есть и ничего интересного не находим, FIACA пропала. Н чтож, также как в первом случае ставим брякопинт на  GetDllItemTextA.
Запускаем по F9, вводим опять фейковый серийник и смотрим где теперь сработал брякпоинт, выходим из системной библиотеке также по CTRL+F7, теперь можно осмотреться.
Код похож на первый, но не видно чтобы была какаято строчка похожая на серийник:


Но всетаки обратим внимание на слово String и на dword_40204B, если навести мышкой, то можно увидеть, 34333231, переведем эти строки в более человеческий вид. Два раза кликаем на название String и видим следующее:
Если знакомы с записью чисел шеснадцатеричном виде, то можно увидеть, что это введенные цифры 4321, но опять же не наш метод, переведем числа в более человеческий вид. Для этого нажимаем ПКМ на String и выбираем значек 'x' или жмем хоткей R. Теперь строка выглядит нармально и читабельно.

Жмем ESC и возвращаемся в код, также заходим в dword_40204B и также переводим в человечкский вид 38393839 и получается 8989, ага сказали суровые сибирские мужики, вот с чем сравнивается введеные мной цифры 1234, тоесть это скорей всего и есть серийник.
Пробуем ввести и.... неправильно, неужели ошиблись и это не серийник, да нет, это серийник, просто совсем забыли, что в x86 компах необходимо использовать зеркальную запись и правильный серийник будет 9898, вводим и ура, он подходит, видим запись "Muy BIENáááá"

На этом урок окончен, он был достаточно короткий и простой.

Комментариев нет:

Отправить комментарий