Ломаем перья Исупов Леонид aka Cr@wler Хакер, номер #086, стр. 086-056-2 [отучаем программу прыгать, куда не надо] Для того чтобы программа не переходила туда, куда ее не просят, надо как-то убрать этот злосчастный переход. Для этого заменяем команду прыжка на серию операторов. Оператор "NOP" не выполняет ничего (Not OPerand). Для замены мы щелкнем 2 раза по строчке кода с условным оператором. Появится окошко, где можно "пропатчить" код программы. Отметим флажок "Fill with NOP-s " и введем вместо строки кода с условным переходом оператор "NOP". Нажмем "Assemble" и закроем окошко. Нажмем F9 и посмотрим, что теперь скажет наша исследуемая программа. Ура, она говорит, что необходимо перезапуститься для принятия серийного номера. Жмем "OK" и закрываем программу. Запустим ее еще раз. Конечно, появится сообщение "Invalid registration code". Все, что нам надо, — убрать это сообщение, ведь оно будет надоедать при каждом запуске! Запустим снова OllyDbg и выберем "File -> Attach", после этого выберем нужный нам процесс (редактор "EditPlus") из списка. Ткнем Run, после этого — паузу. Зачем? Для того чтобы узнать, по какому адресу происходит вызов сообщения о неверном регистрационном коде. Адрес этот — 004C8097 (функция вывода "окошка" называется "MesssageBoxA"). Чтобы убрать вызов сообщения, мы снова будем пользоваться "пустым" NOP-ом. Как нам узнать, сколько NOP-ов нужно для замены вызова? Отнимаем от адреса инструкции, следующей сразу за вызовом MessageBoxA(004C809D), адрес самого вызова (004C8097). Получаем 6. Так как команда NOP занимает в памяти 1 байт, нам нужно заменить 6 байт, начиная с адреса 004C8097, на шестнадцатеричное значение команды NOP. Это значение, о чем легко узнать, заглянув в любой учебник по языку Ассемблер, равно 90 в шестнадцатеричной системе счисления. [делаем замену] Приступим, собственно, к замене. Мне лично не очень нравится редактировать двоичные файлы отладчиком, хотя он и на это способен, поэтому первое, что приходит на ум, — редактировать файл EditPlus.exe редактором WinHex. Он очень удобен. Запускаем его и открываем на редактирование EditPlus.exe. Посчитаем, откуда надо начинать заменять байты. OllyDbg считала смещения, начиная c адреса 00401000h. Отнимем от 004С8097h значение 00401000h. Получим С7097. Это нужно для того, чтобы знать смещение относительно начала в "абсолютном" виде, ведь в WinHex адресация начинается с «нуля» (за ноль берется ImageBase, разница из-за того, что отладчик работает в области памяти с загруженной программой а HEX-редактора с набором байт на носителе). Нажмем в программе WinHex сочетание клавиш "ALT"+"G" для перехода к смещению. Вводить адреса нужно в десятичном виде, с помощью виндовского калькулятора можно посчитать, что нужное нам смещение (C7097h) в десятичном виде будет равным 815255. Ах да, OllyDbg не отображает первые 1024 байта заголовка файла. Учтем это и прибавим к нашему смещению это значение. Получим 816279. Введем это число и нажмем Enter. Операция проведена, и мы перешли по нужному смещению. Заменяем все 6 байтов, начиная с этого места, на 90h. Сохраняем файл и запускаем его. Ура, ничего не выскакивает :). Почти все хорошо, но странно одно: когда мы выбираем в нашей хакнутой проге "Help->About", там написано, что она "Unregistered". Это уже не соответствует действительности. Откроем нашу программу в WinHex-е и найдем там строку "Unregistered Copy". Заменим ее на "Cracked By", например, оставшиеся буквы затрем пробелами. Дальше найдем строку "For Evalution" и заменим ее на свой ник (оставшееся место тоже затрем пробелами). Все, готово! Желающие могут еще и удалить из программы каким-нибудь ResourceHacker'ом пункты меню "Enter Registration code" и "Order Now". |