Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Исследование CRACKL@B CrackMe #2 by -= ALEX =-

Обсудить статью на форуме

Массу крэкерских инструментов, видеоуроков и статей вы сможете найти на видеокурсе от нашего сайта. Подробнее здесь.

Автор: -= ALEX =- [DiZER TEAM] <alex-xakep@mail.ru>

Вот и второй крэкми от Bad_guy'я.... Читаем readme.txt :

"Скажу сразу, что крэкми нацелен на среднего крэкера, поэтому гордиться его взломом вряд ли нужно. Тем не менее, всё не так просто - код в данном случае в программе подразумевался мной единственный и он у меня есть - его даже можно подобрать брутфорсом - длина кода 6 символов, но ! код может содержать любые печатаемые символы, поэтому это не совсем рациональный способ взлома. Алгоритм вычисления кода я постарался максимально напутать, поэтому не знаю возможен ли "обратный" разбор."

"Задание:
Сломать любым способом, за исключением loader'a. То есть: 1.подобрать код или 2.распаковать и пропатчить. 2 способ - приветствуется !"

В данной статье я расскажу как применить патч на пакованном файле, т.е. как применить метод in-line патча.  Для начала запускаем crackme, вводим левый текст в поле рег. ключа, нажимает на кнопку "Register" и видим, что заголовок у окна изменился и появилась надпись "[-= UNREGISTERED =-]". Долго не думаем, и ставим бряк в SICE: bpx setwindowtexta. Опять регистируемся, и попадаем в SICE. Жмем F12 и видим такой кусок кода:

00404059 891554654000 MOV [00406554],EDX 
0040405F 813D5465400084136ED4CMP DWORD PTR [00406554],D46E1384 
00404069 7512 JNZ 0040407D 
0040406B 681C414000 PUSH 0040411C 
00404070 A1F8644000 MOV EAX,[004064F8] 
00404075 50 PUSH EAX 
00404076 E8C9FBFFFF CALL USER32!SetWindowTextA 
0040407B EB10 JMP 0040408D 
0040407D 682C414000 PUSH 0040412C 
00404082 A1F8644000 MOV EAX,[004064F8] 
00404087 50 PUSH EAX 
00404088 E8B7FBFFFF CALL USER32!SetWindowTextA 
0040408D 90 NOP <- мы здесь.

Сразу же обращаем внимание на адрес 00404069. Там стоит условный переход. Меняем его на противоположный и мы зарегистрировали crackme. Но есть одно но.... если вы сейчас откроете файл в HIEW например и посмотрите на адрес 00404069, то вы не увидите заветный "7512" байт, из чего следует вывод, что программы расшифровывает/распаковывает эти байты. Поэтому crackme можно распаковать и затем подправить байты, а можно применить in-line патч, как мы и собираемся делать. Первым делом надо определиться, где будем размещать наш патч. Можно попробывать на границе секций, где полно свободного места, а можно, как сделал это я, использовать адрес 40h (как раз PE заголовок). Для начала открываем файл в WinHEX'е. И смотрим по адресу 40h:

Offset    0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
00000040 BA 10 00 0E 1F B4 09 CD 21 B8 01 4C CD 21 90 90 є....ґ.Н!ё.LН!ђђ
00000050 54 68 69 73 20 70 72 6F 67 72 61 6D 20 6D 75 73 This program mus
00000060 74 20 62 65 20 72 75 6E 20 75 6E 64 65 72 20 57 t be run under W
00000070 69 6E 33 32 0D 0A 24 37 00 00 00 00 00 00 00 00 in32..$7........

Первым делом надо "почистить" это место нулевым байтом. И поставить по адресу 40h опкод nop'a, т.е. "90". Зачем - расскажу попозже. В итоге у нас получилось так:

Offset    0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F 
00000040 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ђ...............
00000050 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000060 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................

Теперь приступим к главному - будем писать патч прямо в отладчике (т.к. все адреса он за нас подсчитает). Для начала грузим файл под Symbol loader'ом и ставим такой бряк: bpm 404069 rwx. Т.е. мы определим в каком месте расшифровывается код по этому адресу. Жмем F5 и попадаем в такое место :

0040C025 3308 XOR ECX,[EAX] 
0040C027 8708 XCHG ECX,[EAX]  
0040C029 42 INC EDX 
0040C02A 75EA JNZ 0040C016 
0040C02C E95382FFFF JMP 00404284 
0040C031 B801C04000 MOV EAX,0040C001 
0040C036 C700FFFD0000 MOV DWORD PTR [EAX],0000FDFF 
0040C03C E94882FFFF JMP 00404289 
0040C041 0000 ADD [EAX],AL

Трассируем до адреса 0040С02A, смотрим, что по адресу 404069 командой d 404069 и видим как раз "7512".  Вообще можно заметить, что как раз здесь идет цикл распаковки кода и в конце распаковки мы будем по адресу 0040С02С. Теперь когда мы стоим на этом адресе делаем так: a [enter] jmp 40040 [enter] при этом код по адресу изменится и станет таким:

0040C02C E90F40FFFF JMP 00400040

Главное запомнить байты E90F40FFFF , которые потом мы будем писать в HIEW. Теперь нажимает F10 и видим такую картину:

00400040 FFFF INVALID
00400042 FFFF INVALID 
00400044 FFFF INVALID 
00400046 FFFF INVALID 
00400048 FFFF INVALID 

Если бы мы не записали по адресу 0040040 байт 90, то если бы мы нажали F10, то появилась бы ошибка, да и если бы мы стали изменять байты по адресу, то ничего бы не получилось... А так жмем F10 и при этом встанем по адресу 0040041. Далее нам необходимо, чтобы произошло изменение по адресу 00404069, т.е. нам надо условный переход "занопить" и программа будет всегда зарегистрированная. Для этого служит команда mov word ptr [адрес],байтбайт. Итак делаем: a [enter] mov word ptr [404069],9090 [enter]. Видим:

00400041 66C705694040009090 MOV WORD PTR [00404069],9090

Опять запоминаем последовательность байт, указанных красным цветом. Жмем F10. Теперь нам надо восстановить инструкции по адресу 0040C02C. Там если вы помните там стоит jmp на адрес 00404284, поэтому нам надо восстановить этот jmp. Становимся по адресу 0040004A, жмем: a [enter] jmp 404284 [enter] вот мы получили собственно патч:

00400040 90 NOP 
00400041
66C705694040009090 MOV WORD PTR [00404069],9090
0040004A
E935420000 JMP 00404284

Теперь жмем F5, вводим данные и программа зарегистрирована. Теперь надо это дело запихнуть в exe'шник. Пользуемся HIEW'ом. По адресу 0040С02С пишим E90F40FFFF, по адресу 00400041 - 66C705694040009090, 0040004A - E935420000. Все, патч готов ! Желаю удачи.

Автор: -= ALEX =- [DiZER TEAM]
            alex-xakep@mail.ru



Обсуждение статьи: Исследование CRACKL@B CrackMe #2 by -= ALEX =- >>>


Материалы находятся на сайте https://exelab.ru



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS