Автор: | Bokiv [AHTeam] |
Уровень: | Для начинающих |
Программа: | WinTools.net 4.0 |
Размер: | 736 кб |
Язык: | русский |
Тип защиты: | ASPack 2.12 |
Инструменты: | OllyDBG v1.10 |
Инструмент: ollydbg110xp.zip Исследуемая программа: wintools_net_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.
ещё одно нажатие 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/
Предупреждения и ограничения: Данная статья написана только в целях самообразования. Автор за использование данной статьи ответственности не несет!
|
|