0xs4 :: Patching :: Создание патча
Введение
Патч – программа, которая может взломать другую программу путем преобразования определенных байтов внутри программы. Мы будем отлаживать программу, делать определенные изменения в ней и потом сохранять эти изменения в отдельной программе. Для корпоративних программистов/крекеров она является основной методикой, которая позволяет быстро принять решения, для крекеров-взломщиков – это основное решение.
Target Information
Filename… boonscrackme.exe [ download ]
Developer… Boon
Toolz… OllyDbg, dup2 [ download ], Visual Basic
Adficio
Картинка 1. Програма для иследования
Картинка 2. Сообщение с ошибкой
Целью данного крякми – сделать патч для программы таким образом, что бы заместь сообщения с ошибкой показувалось сообщение о успешной регистрации.
Картинка 3. Сообщение с ошибкой в OllyDbg
Следующая техника имеет название “трассировка прыжков(tracing jump)”, которая означает, что мы будем использовать OllyDbg для того, что бы найти функцию ( подобную MessageBoxA с сообщением об ошибке ) и найдем место откуда программа прыгнула ( сделала переход ) к этой функции. Для небольших программ данная техника не является сильно необходимой, но для больших программ ( особенно игр ) – наиболее общий подход для взлома J
Картинка 4. Ссылка на сообщение с ошибкой
На данной картинке мы можем видеть всего лишь 1 ссылку на MessageBox. Помните, что первый параметр API функции всегда Remember that the first flag parameter of an API function is always the start of that functio .
Картинка 5. Сслыка на сообщение с ошибкой и на “хорошее” сообщение
Мы видим функцию GetDlgItemText ( которая очевидно получается текст с TextBox’a), но 2 инструкции после нее не вызывают функции проверки или сравнения. Инструкция по адресу 0x401096 делает прыжок к неиспользуемой текстовой строки и далее прыгает на адрес 0x40109B . Инструкция по адресу 0x40109B совершает прыжок на сообщение с ошибкой. Так как мы видим, что “хорошее” сообщение находится по адресу 0x40109D, то прыжок по адресу 0x40109B необходимо просто удалить и преобразовать инструкцию по адресу 0x40120D, чтобы она перешла к “хорошему” сообщению :).
Картинка 6. Заменяем инструкция JMP на NOP
7 – а. Правый клик по адресу 0x40120D и затем нажимаем Assemble
b. Assemble “JMP 0040109D”
Картинка 7. Меняем адрес куда прыгнуть инструкции JMP
8 – а. Сохраняем взломанную программу
Картинка 8. Сохранение взломанной программы
Мы успешно взломали данный крякми, теперь перейдем к написанию патча к ней.
Я хочу объяснить вам почему я пиши мои патчи именно так. Ответ прост: для того, что бы написать патч вам необходимо прежде всего взломать программу, внести изменение ( вы можете сделать это вручную, вписав новые КОПы (код операции) , которые вы находите через инструкции, используемые инструкции) и затем перенести эти новые КОПы в язык программирования. Ранее и сегодня у меня бывали ситуации при взломе, когда я вписывал неправильные КОПы, поскольку использовал инструкцию отличную от той, которую намеревался, что заставляло меня создавать неправильный патч. Но если сегодня я делаю это таким образом, как будет объяснено ниже, я больше не делаю ошибок, мне просто более удобно делать это так.
Картинка 9. Поиск всех изменение между взломанной и не взломанной программой
Dup2 показывает нам все различия между взломанной и не взломанной программой, после чего мы имеем представление того, что нам необходимо для патча. Если вы хотите что бы dup2 создал патч, вы можете использовать его, что бы это сделать, но я советую использовать dup2 для того, что бы иметь представление какие байты должны быть в патче.
Для данной программы вы можете найти архив с исходным кодом моего патча. Я хорошо прокомментировал исходный код, так что если вы никогда не программировали патчи на VB , вы можете немножко подучить как это делать J.
+Neffarion
http://www.0xNeff.eu
© Translated by coldfire from r0 Crew