1. Поиск жертвы
2. Анализ
3. Распаковка
4. Непосредственно взлом
5. Отмазки автора и прочее
1. Поиск жертвы
Я думал какую бы из уже сломаных мной программ описать в нашем первом уроке, но
потом решил не морочить голову. Зашел на download.ru и скачал первую
попавшуюся платную программу, ей оказалась Magic Photo Recovery 2.0 от
East Imperial Soft. Размер жертвы всего-лишь 914 кб и думаю она идеально
нам подойдет. Для того, чтобы вы не мучились с поисками, скачать ее можно тут:
http://www.file-post.org/fpost/files/t0 ... ery_Ru.exe
2. Анализ
Итак мы уже скачали все нужные инструменты, жертву и установили ее. Переходим в
каталог с программой и видим: что программа состоит всего из 6 файлов. Нас
интересует Magic Photo Recovery.exe. Щелкаем на нем правой
кнопкой->Scan with PEiD. Как мы видим, программа упакована комерческим
пакером ASPack 2.12.
Значит преступить непосредственно к взлому у нас не получится, сначала придется
распаковать программу, а потом уже ломать.
3. Распаковка
Открываем 0llyDbg.exe(Spirit!.exe - это немного пропатченый и
исправленый вариант, поэтому именно через него мы и будем работать).
File->Open->Выбираем Magic Photo Recovery.exe. Ждем немного, пока отладчик
проведет анализ. Теперь внизу окна пишем: hr esp-4,
Debug->Run(F9) и останавливаемся тут:
Далее нажимаем 3 раза кнопку F8 (Debug->Step over) и
оказываемся в таком месте:
Это означает, что теперь программа полностью распаковалась и можно снимать дамп.
Запускаем PETools, в списке процессов выбираем наш, и дампим:
сохраняем файл, как dumped.exe, закрываем PETools, открываем
ImpREC.
В ImpREC'e, в поле Attach an active process выбираем наш процесс, в
поле OEP вписываем адрес того места, где мы остановились в отладчике
(00529E48-00400000=129E48) и нажимаем IAT AutoSearch, в появившемся
окне наживаем ОК, далее жмем Get Imports. И последний шаг - кнопка Fix
Dump, в открывшемся диалоге выбираем дамп (dumped.exe).
Готово! Теперь файл распакован и готов для взлома. Переходим к следующему шагу.
4. Непосредственно взлом
Загружаем распакованный файл(dumped_.exe) в OllyDbg. Немного ждем,
пока идет анализ. Затем запускаем жертву под отладчиком (F9 или
Debug->Run). Запустилась программа, в заголовке написанно
"Незарегистрированная версия", снизу окна есть кнопка "Регистрация". Чтож, будем
исправлять. Жмем регистрацию, и вводим любое имя и серийный номер. Нам говорят
что серийный номер неверен. Не закрывая окна с сообщением переходим в отладчик и
приостанавливаем процесс (F12 или Debug->Pause), затем выбираем
Debug->Execute till user code (Alt+F9), переходим в окно программы и жмем
кнопку OK в окне сообщения. Нас выбрасывает в отладчик в это место:
Это код, который выполняет программа, сразу после вывода сообщения о неверном
номере. Нас он не интересует и поэтому выходим из этой функции (2 раза Ctrl+F9
и один раз F8). А вот здесь код уже интересней. Промотав листинг вверх мы
видем такое:
Код: Выделить всё
0052482A . 8B80 60030000 MOV EAX,DWORD PTR DS:[EAX+360]
00524830 . E8 03D6F2FF CALL Magic_Ph.00451E38
00524835 . 8B45 CC MOV EAX,DWORD PTR SS:[EBP-34]
00524838 . 8D55 D0 LEA EDX,DWORD PTR SS:[EBP-30]
0052483B . E8 A03EFFFF CALL Magic_Ph.005186E0
00524840 . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30]
00524843 . 58 POP EAX
00524844 . E8 C70CEEFF CALL Magic_Ph.00405510
00524849 . 0F85 AA010000 JNZ Magic_Ph.005249F9
0052484F . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
00524852 . C680 84030000 >MOV BYTE PTR DS:[EAX+384],1
00524859 . 8D55 C8 LEA EDX,DWORD PTR SS:[EBP-38]
0052485C . 8B45 FC MOV EAX,DWORD PTR SS:[EBP-4]
0052485F . 8B80 60030000 MOV EAX,DWORD PTR DS:[EAX+360]
00524865 . E8 CED5F2FF CALL Magic_Ph.00451E38
0052486A . 8B55 C8 MOV EDX,DWORD PTR SS:[EBP-38]
Функция, которая вызывается по адресу 00524844 проверяет правильность
серийного номера вот в нее то мы и зайдем. Выделяем строку и жмем Enter.
оказываемся тут:
Код: Выделить всё
00405510 /$ 53 PUSH EBX
00405511 |. 56 PUSH ESI
00405512 |. 57 PUSH EDI
00405513 |. 89C6 MOV ESI,EAX
00405515 |. 89D7 MOV EDI,EDX
00405517 |. 39D0 CMP EAX,EDX
00405519 |. 0F84 8F000000 JE 004055AE
0040551F |. 85F6 TEST ESI,ESI
00405521 |. 74 68 JE SHORT 0040558B
00405523 |. 85FF TEST EDI,EDI
00405525 |. 74 6B JE SHORT 00405592
00405527 |. 8B46 FC MOV EAX,DWORD PTR DS:[ESI-4]
0040552A |. 8B57 FC MOV EDX,DWORD PTR DS:[EDI-4]
0040552D |. 29D0 SUB EAX,EDX
0040552F |. 77 02 JA SHORT 00405533
00405531 |. 01C2 ADD EDX,EAX
00405533 |> 52 PUSH EDX
00405534 |. C1EA 02 SHR EDX,2
00405537 |. 74 26 JE SHORT 0040555F
Устанавливаем Breakpoint на начало функции(F2 на адрес 00405510) и
перезапускаем программу(Ctrl+F2, затем F9). Программа еще полностью не
запустилась, но мы остановились на своем breakpoint'e. Понажимаем
несколько раз F9, убедившись, что проверка на зарегистрированность и
запуск прораммы проходят через эту функцию. Тогда попробуем по трассировать
вручную, клавишей F8. После нескольких попыток можно понять, что пока
программа загружается мы прыгаем тут(00405521):
Код: Выделить всё
00405521 |. /74 68 JE SHORT 0040558B
00405523 |. |85FF TEST EDI,EDI
00405525 |. |74 6B JE SHORT 00405592
00405527 |. |8B46 FC MOV EAX,DWORD PTR DS:[ESI-4]
0040552A |. |8B57 FC MOV EDX,DWORD PTR DS:[EDI-4]
0040552D |. |29D0 SUB EAX,EDX
Значит снимем breakpoint с начала функции(F2 на адресе 00405510).
Теперь нажимаем F9 и программа запускается без проблем. Снова вернемся в
окно отладчика и снова поставим breakpoint под прыжком (00405523).
Затем опять попробуем зарегистрироваться под любым именем и серийным номером.
После нажатия регистрации, мы останавливаемся тут:
Код: Выделить всё
00405523 |. 85FF TEST EDI,EDI
00405525 |. 74 6B JE SHORT 00405592
Смотрим на значения регистров и видим, что производятся некие операции с именем:
Нажмем один раз F9, снова мы остановились, только теперь в регистрах уже не имя,
а тот серийный номер, который мы вводили. Снова жмем F9 и угадайте, что в
регистрах EDI и EDX?
Регистрационный номер для меня получился такой:
Name: Spirit [iNC0DE]
Serial: 7002-9552-3810-0102
5. Отмазки автора и прочее
Ну вот и закончился еще один урок. На нем мы научились распаковывать пакер ASPack
2.12 и находить серийник для платной программы, стоимостью 30 баксов.
Данный урок писался непосредственно во вермя взлома и в немотражены мои действия.
Возможно кому-то этот метод не понравится, но это его проблемы. В этом уроке
также я провел распаковку без каких либо объяснений. Если вы хотите подруобней
почитать про распаковку и структуру программ, то советую прочитать статью "Об
упаковщиках в последний раз", часть первая и вторая.
Все маты и ругать, просба отправлять на bill@microsoft.com, а все пожелания и
прочий позитив на spirit@globus-k.kz.
GreetZ y 0ut t0^ HandMill, kaiZer, Sleeky, OKOB, tihiy_grom, g-l-u-k, Bad_Guy,
RSI, mak, pavka, all iNC0DE Crew, CrackL@b & UnPaCk.Cn community...
Copyright (c) by Spirit [iNC0DE] in 2k8