Перейти к содержимому

Фотография

Инлайн Aspack 2.12 или взлом Wintools.net

- - - - -

  • Авторизуйтесь для ответа в теме

#1
DJ FOTON

Отправлено 26 ���� 2008 - 04:28

DJ FOTON

    Начинающий

  • Пользователи
  • 69 сообщений
Инструмент:
http://samlab.info/b...llydbg110xp.zip
Исследуемая программа:
http://samlab.info/b...4_0_Classic.zip
Дата написания: 21.11.2006

Вместо предисловия:
Наконец-то пришли морозы и выпал снег, и появилось соответственно много свободного
времени для подобных дел, как написание этого мануала. Инлайн ASPack – это очень
просто, но я решил написать серию подобных статей и начать с самого неизощрённого.
В качестве объекта для инлайна я выбрал WinTools.net 4.0 – это самая старая версия этой
программы, которая у меня есть (не охота причинять ущерб, её автору, тренируясь на
новой версии).

Предварительный анализ и поиск цели:
Запускаем файл wintools.exe, появляется окно с просьбой зарегистрироваться (далее наг).
Более, нам ничего и не надо, осталось отловить его появление через отладчик и
разобраться, почему всё происходит именно так.

Взлом:
Грузим файл wintools.exe в OllyDBG v1.10 (далее Оля). Ставим бряк bp DialogBoxParamA
и нажимаем F9. Далее нажимаем F8 и держим, пока не появится наг, далее кликнем в нём
кнопку Next >>, и в Оле по F8 дойдём до ближайшей команды RETN.

77D48945 C2 1400 RETN 14

ещё одно нажатие F8 и мы попадём, из кода библиотеки windows, в код нашей программы.

00411816 CALL wintools.0043F194
0041181B CMP EAX,0
0041181E JNZ SHORT wintools.0041187A
00411820 PUSH 0
00411822 PUSH wintools.0043EB97
00411827 PUSH DWORD PTR DS:[4687FC]
0041182D PUSH wintools.0048995E
00411832 PUSH DWORD PTR DS:[452ECC]
00411838 CALL wintools.00451740 -> DialogBoxParamA
0041183D CMP EAX,0

По адресу 00411816 процедура проверяет регистрацию, и если её нет, то обнуляет регистр
EAX. А по адресу 0041181E условный переход кидает нас на код нага. Тут править ничего
не надо ищём в процедуре по адресу 00411816. Поставим на неё курсор и нажмём ENTER.
Установим Hardware бряк на 0043F194 для дальнейшего исследования этого кода.
(F10->Breakpoint->Hardware, on execution) Перезапустим программу (Ctrl+F2).
Hardware Breakpoint мы поставили потому что исследуем упакованную программу и
обычный Breakpoint (F2) просто сотрется при перезапуске.

0043F194 55 PUSH EBP
*** обрезано ***
0043F1CF CMP EAX,0
0043F1D2 JNZ SHORT 0043F1DE
0043F1D4 MOV EAX,0
0043F1D9 JMP 0043F3B1
*** обрезано ***
0043F371 JNZ 0043F3AC
0043F373 MOV DWORD PTR DS:[46BDCC],175
0043F37D MOV DWORD PTR DS:[46BDD0],2CE
0043F387 MOV DWORD PTR DS:[46BDD4],13A
0043F391 MOV DWORD PTR DS:[46BDD8],0B2
0043F39B MOV DWORD PTR DS:[46BDDC],247
0043F3A5 MOV EAX,1
0043F3AA JMP 0043F3B1
0043F3AC MOV EAX,0
0043F3B1 POP EDI

По адресу (0043F1D4) регистр EAX обнуляется и на выход из процедуры, а далее
мы знаем что появляется.

Изменим безусловный переход по адресу 0043F1D9:
JMP 0043F3B1
на:
JMP 0043F373

Для изменения ставим курсор по нужному адресу и жмём пробел, в появившемся
окне пишем JMP 0043F373, далее кнопка Assemble.

оригинал:
0043F1D9 E9 D3010000 JMP 0043F3B1
наш патч:
0043F1D9 E9 95010000 JMP 0043F373

Итак, чтобы защита программы рухнула нам нужно всего лишь изменить один
байт. Т.е. по адресу 0043F1DA прописать 95.
Это делается с помощью команды MOV.

MOV BYTE PTR DS:[0043F1DA],95 (код для Инлайн патча)

Инлайн:

Теперь нам нужно исследовать сам упаковщик, и найти такое место в его коде, где программа распакована в памяти, но упаковщик ещё выполняет свой код.
Ставим бряк (hr esp-4) далее F9.

0057339A MOV EAX,1219 (в этом месте сделаем прыжок на наш код)
0057339F PUSH EAX
005733A0 ADD EAX,DWORD PTR SS:[EBP+422]
005733A6 POP ECX
005733A7 OR ECX,ECX
005733A9 MOV DWORD PTR SS:[EBP+3A8],EAX
005733AF POPAD
005733B0 JNZ 005733BA (мы тут)

Итак, нам нужно прописать JMP в свободное место программы (где куча нулей)
выполнить код, который мы затрём прыжком, выполнить наш код, и вернутся на место.

Покрутим мышкой ассемблерный листинг Оли вниз:

005735D0 0000 ADD BYTE PTR DS:[EAX],AL
005735D2 0000 ADD BYTE PTR DS:[EAX],AL

запомним этот адрес 005735D0 и вернёмся обратно на 0057339A

Данное место нам подходит, пишем:
CALL 005735D0, можно написать JMP 005735D0, но после выполнения нашего кода
придется прописывать адрес возврата.
У меня так:
0057339A CALL 005735D0

Для сохранения первого изменения ставим курсор на 0057339A далее F10->Copy to executable->Selection.
Появится небольшое окошко с кодом его не закрывать! Просто
сверните его.

Теперь крутимся на наше свободное место (005735D0) для написания своего кода.
Пишем:
MOV EAX,1219 (так как мы её затерли, написав CALL 005735D0)
MOV BYTE PTR DS:[0043F1DA],95 (это наш код Инлайн патча)
RETN (возвращаемся на место)

Получилось:

005735D0 MOV EAX,1219
005735D5 MOV BYTE PTR DS:[43F1DA],95
005735DC RETN

Теперь выделяем курсором эти три строчки и опять F10->Copy to executable->Selection
В появившемся окошке жмём F10->SaveFile и сохраняем с именем wintools1.exe
Проверяем, всё ли получилось, запуская wintools1.exe.
Окно с напоминанием пропало, программа взломана без распаковки и изменения размера!
Хочу уточнить, что программа взломана полностью, т.е. мы убрали не только окно с
напоминанием о регистрации, но и триал период, и все ограничения в программе.
А значит покупать или искать серийник для неё не нужно, у нас и так теперь есть
полнофункциональная версия программы.

Благодарности:
Хочется сказать спасибо авторам за столь увлекательный материал для исследования.
Ну и спасибо всем кто разместит в Интернете эту статью.

Ссылки:
Форум нашей команды:
http://ahteam.org/forum/
Программы и русификаторы:
http://samlab.ws/
Моя страничка:
http://www.bokiv.astalavista.ms/

Предупреждения и ограничения:
Данная статья написана только в целях самообразования.