R0 CREW

Neffarion :: 0xs4 :: Patching :: Создание патча (Перевод: coldfire)

0xs4 :: Patching :: Создание патча

Введение

Патч – программа, которая может взломать другую программу путем преобразования определенных байтов внутри программы. Мы будем отлаживать программу, делать определенные изменения в ней и потом сохранять эти изменения в отдельной программе. Для корпоративних программистов/крекеров она является основной методикой, которая позволяет быстро принять решения, для крекеров-взломщиков – это основное решение.

Target Information

Filename… boonscrackme.exe [ download ]
Developer… Boon
Toolz… OllyDbg, dup2 [ download ], Visual Basic

Adficio

1 – а. Загрузите программу и нажмите Check

Картинка 1. Програма для иследования

Картинка 2. Сообщение с ошибкой

Целью данного крякми – сделать патч для программы таким образом, что бы заместь сообщения с ошибкой показувалось сообщение о успешной регистрации.

3 – а. Загрузите программу в OlyyDbg b. Search for > all referenced strings c. Найдите сообщение с ошибкой и дважды нажмите на нем

Картинка 3. Сообщение с ошибкой в OllyDbg

Следующая техника имеет название “трассировка прыжков(tracing jump)”, которая означает, что мы будем использовать OllyDbg для того, что бы найти функцию ( подобную MessageBoxA с сообщением об ошибке ) и найдем место откуда программа прыгнула ( сделала переход ) к этой функции. Для небольших программ данная техника не является сильно необходимой, но для больших программ ( особенно игр ) – наиболее общий подход для взлома J

4 – а. Правый клик на адресе 0x4010B3 и затем выберите Find references to > Select command

Картинка 4. Ссылка на сообщение с ошибкой

На данной картинке мы можем видеть всего лишь 1 ссылку на MessageBox. Помните, что первый параметр API функции всегда Remember that the first flag parameter of an API function is always the start of that functio .

5 – а. Двойной клик по ссылке на сообщение с ошибкой

Картинка 5. Сслыка на сообщение с ошибкой и на “хорошее” сообщение

Мы видим функцию GetDlgItemText ( которая очевидно получается текст с TextBox’a), но 2 инструкции после нее не вызывают функции проверки или сравнения. Инструкция по адресу 0x401096 делает прыжок к неиспользуемой текстовой строки и далее прыгает на адрес 0x40109B . Инструкция по адресу 0x40109B совершает прыжок на сообщение с ошибкой. Так как мы видим, что “хорошее” сообщение находится по адресу 0x40109D, то прыжок по адресу 0x40109B необходимо просто удалить и преобразовать инструкцию по адресу 0x40120D, чтобы она перешла к “хорошему” сообщению :).

6 – а. Правый клик на адресу 0x40109B и затем нажимаем Binary > Fill with NOPs

Картинка 6. Заменяем инструкция JMP на NOP

7 – а. Правый клик по адресу 0x40120D и затем нажимаем Assemble
b. Assemble “JMP 0040109D”

Картинка 7. Меняем адрес куда прыгнуть инструкции JMP

8 – а. Сохраняем взломанную программу

Картинка 8. Сохранение взломанной программы

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

Я хочу объяснить вам почему я пиши мои патчи именно так. Ответ прост: для того, что бы написать патч вам необходимо прежде всего взломать программу, внести изменение ( вы можете сделать это вручную, вписав новые КОПы (код операции) , которые вы находите через инструкции, используемые инструкции) и затем перенести эти новые КОПы в язык программирования. Ранее и сегодня у меня бывали ситуации при взломе, когда я вписывал неправильные КОПы, поскольку использовал инструкцию отличную от той, которую намеревался, что заставляло меня создавать неправильный патч. Но если сегодня я делаю это таким образом, как будет объяснено ниже, я больше не делаю ошибок, мне просто более удобно делать это так.

9 – a. Откроем dup2 b. Нажмите New Project с. Нажмите Save d. Нажмите Add e. Выберите [Offset Path] f. Нажмите OK g. Двойной клик на [Offset Path] в списке h. Нажмите Press ... далее "Original File" и выберите "boonscrackme.exe" (не взломанная версия ) i. Нажмите Press ... далее "Patched File" и выберите "+boonscrackme.exe" (взломанная версия) j. Нажмите Compare

Картинка 9. Поиск всех изменение между взломанной и не взломанной программой

Dup2 показывает нам все различия между взломанной и не взломанной программой, после чего мы имеем представление того, что нам необходимо для патча. Если вы хотите что бы dup2 создал патч, вы можете использовать его, что бы это сделать, но я советую использовать dup2 для того, что бы иметь представление какие байты должны быть в патче.

Для данной программы вы можете найти архив с исходным кодом моего патча. Я хорошо прокомментировал исходный код, так что если вы никогда не программировали патчи на VB , вы можете немножко подучить как это делать J.

+Neffarion
http://www.0xNeff.eu

© Translated by coldfire from r0 Crew

Классная статья! Спасибо огромное!
P.S. Напишите пожалуйста урок инлайн-патчинга на примере хелловорлда:)