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

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


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

Пример пропатчивания программы, запакованной ASPack 2.12

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

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

Автор: Alexey <alvolturbo@yandex.ru>

Пример пропатчивания программы, запакованной ASPack 2.12 -> Alexey Solodovnikov

Цель: pdf stamp v1.1 (можно взять на www.globalpdf.com, как и остальные подобные программы)
Инструмент: Olly 1.1 с плагинами.
PEiD v0.92

Привет всем! Это опять же небольшая статья для новичков (уже вторая). Собственно, это логическое продолжение статьи "Пример пропатчивания программы, запакованной UPX" Хочется поделиться опытом. Повторюсь, что мне не всегда нравится,когда после распаковки программы и взлома ее патчем остается большой распакованный экзешник,который неудобно распространять и нет возможности написать к нему компактный автономный патч.
Теперь я могу рассказать о пропатчивании программы, запакованной ASPack 2.12 -> Alexey Solodovnikov (как нам говорит PEiD v0.92). Программка, в принципе, симпатичная, работает с документом Формата PDF, а точнее позволяет вставлять небольшие добавления (текст, картинки, линии) на каждой странице документа. Маленькая проблема--воюет с русским текстом после вставки во все тот же документ (это, наверное, моя оплошность). Как обычно, гадкие ограничения. Но это не суть статьи.
Наша цель взломать программу, как мне подсказал dMNt для правильности речи, с помощью инлайн патча. Для этого наметим последовательность действий: найдем то место, в котором программа уже распаковала сама себя, найдем место, которое нужно вправить для предупреждения вопросов о регистрации, найдем свободное место в программе и допишем туда свой код, будем радоваться как слоны по весне, после успешного взлома:)

Итак! Загружаем программу в Олли. Перед нами образовывается код на ассемблере и этот код--код программы, запакованной ASPack 2.12. Теперь подумаем (надеюсь, логически): при переходе на ОЕР программа должна быть уже распакованной.
Тогда найдем переход на ОЕП: делаем это сразу по отработанному методу(изучается в статьях по ручной распаковке).
Выбираем окно дампа(левый нижний угол с надписью Hex Dump), жмем CTRL+G (переход),набираем "esp-4" без кавычек, выделяем четыре байта по этому адресу и просим у Олли через левый клик мыши поставить Breakpoint->Hardware, on access (на доступ)->Dword(4 байта, которые мы выделили).После запуска (F9) мы остановимся на таком вот месте:

006013A7   0BC9             OR ECX,ECX
 006013A9   8985 A8030000    MOV DWORD PTR SS:[EBP+3A8],EAX
 006013AF   61               POPAD
 006013B0   75 08            JNZ SHORT stampPdf.006013BA           <-------- здесь
 006013B2   B8 01000000      MOV EAX,1
 006013B7   C2 0C00          RETN 0C                               <-------- переход на ОЕР
 006013BA   68 B8144000      PUSH stampPdf.004014B8 

Это почти переход на ОЕР (сам переход происходит на

006013B7   C2 0C00          RETN 0C 
), основной признак--это команда
POPAD. Здесь программа уже распакована и готова к употреблению:). Запомним это место! Жмем трассировку дальше. Появляется неоригинальное по смыслу окошко и требует серийный номер. Ставим в ответ bp MessageBoxA, поскольку программа заведомо ругнется на наш неправильный серийник. Мы выпадаем в User32:

77D5ADD7 > 833D C4D3D877 00 CMP DWORD PTR DS:[77D8D3C4],0
 77D5ADDE   0F85 377E0100    JNZ USER32.77D72C1B
 77D5ADE4   6A 00            PUSH 0
 77D5ADE6   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
 77D5ADEA   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
 77D5ADEE   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
 77D5ADF2   FF7424 14        PUSH DWORD PTR SS:[ESP+14]
 77D5ADF6   E8 03000000      CALL USER32.MessageBoxExA
 77D5ADFB   C2 1000          RETN 10 

Потихоньку трассируем (F8) до возврата с RETN 10 обратно в программу. Жмем CTRL+A для получения нормального кода (повторный анализ). Наблюдаем процедуру вызова окошка с обломом:

00410690  |. 50             PUSH EAX                                 ; |hOwner
 00410691  |. E8 AE501500    CALL stampPdf.00565744                   ; \MessageBoxA
 00410696  |. FF4F 1C        DEC DWORD PTR DS:[EDI+1C]                ;<-------здесь

Полистав чуток выше, находим процедуру проверки серийника (по опыту первой статьи):

00410645  |. E8 FE070000    CALL stampPdf.00410E48
 0041064A  |. 84C0           TEST AL,AL
 0041064C  |. 75 76          JNZ SHORT stampPdf.004106C4

На следующем круге зайдем в функцию проверки 00410645 CALL stampPdf.00410E48 и проверим нашу догадку, заменив (пробел) несколько инструкций:

00410E48  /$ 56             PUSH ESI                                 ;  stampPdf.0056C253
 00410E49  |. 8BF2           MOV ESI,EDX
 00410E4B  |. 85F6           TEST ESI,ESI

на

00410E48     B8 01000000    MOV EAX,1
 00410E4D     C3             RETN
 00410E4E     90             NOP

Запустим, и о чудо, мы купили программу!

Так теперь сделаем, чтоб программа была купленной постоянно: найдем место в коде, которое всегда покрыто нулями до и после распаковки. Такое место я нашел здесь:

006015D0   C705 480E4100 B8>MOV DWORD PTR DS:[410E48],1B8
 006015DA   C705 4B0E4100 00>MOV DWORD PTR DS:[410E4B],90C30000
 006015E4  ^0F85 D0FDFFFF    JNZ StampPdf.006013BA

И заменил его на код (из первой статьи) подмены нашей процедуры полезными инструкциями, с соответствующими адресами.
Изменим переход

006013B0   75 08            JNZ SHORT stampPdf.006013BA 

на

006013B0   0F85 1A020000    JNZ StampPdf.006015D0 

, переход на нашу вставку.
Такие изменения становятся постоянными с помощью сохранения их в Олли.
Все не так уж и сложно. Мы опять же отсрочиваем переход на ОЕП с добавлением автопропатчиваемых байт.
Я надеюсь, что мой опыт окажется кому-то полезным. Спасибо за внимание. Удачи!

P.S. Если кому что-то непонятно или есть острая критика, то пишите alvolturbo#yandex.ru


Обсуждение статьи: Пример пропатчивания программы, запакованной ASPack 2.12 >>>


Комментарии к статье: Пример пропатчивания программы, запакованной ASPack 2.12

HyPeR 20.03.2005 17:40:29
Набольшой совет.
1. Чтобы поставить аппаратный бряк можно просто в плагине \"Command bar\" набрать hr esp-4.
2. Также, можно не трассировать потихоньку, а просто нажать Alt+F9 и выйти во всей красе в код твоей проги.

Ну а так, статья, новичкам не особо искушенным в инлайн патчах, пригодится.
8-)

---
Alexey 19.03.2005 22:14:31
Ок, учтем, спасибо!
---
Some 23.04.2005 21:59:25
Что самое странное: AsProtect 2.0 проходится весь без проблем на single step под user mode - отладчиком (самописным)
---
Some 23.04.2005 22:01:51
А как восстанавливать украденные вызовы типа:
...
CALL 00D20000
db Код
...

---
turist 18.05.2005 01:43:50
2HуPeR ты не совсем прав
hr esp-4 - cтавит бряк на байт
а он ставил на дворд. в принципе это не критично но разница все же есть.
2some и какое интересно знать отношение твой вопрос имеет к статье про аспак?
---
DrFits 29.06.2005 14:19:43
Чтоб не трассировать потихоньку, ставиш бряк tc EIP<900000
---
Alexey 29.06.2005 19:42:32
А в Олли можно такие вот вещи ставить? (tc EIP<900000)
---

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



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


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