|
Участник форума
Регистрация: 14.01.2006
Сообщений: 242
Провел на форуме: 2630617
Репутация:
245
|
|
Далее необходимо запустить программу из
отладчика для этого нажми клавишу F9 или выбери в меню Debug->Run.Программа сразу же
остановилась на команде с адресом 004010DE:
004010DE CALL <JMP.USER32.MessageBoxA> ; MessageBoxA
Мы получили то, что хотели - программа остановилась до вызова функции MessageBoxA. Если ты
выполняеш действия параллельно сомной то, наверняка приятно удивлен, что OllyDBG приводит
разшифровкупараметров, которыепередаются этой процедуре. Очень наглядно и удобно.
###Нет операции.###
Тепрь рзберемося, как этот вызов можно убрать. В этом нам поможет специальная инструкция
ассемблера - нет операции (NOP). Для того, чтобы убрать вызов процедуры (или любой
другой код), достаточто забыить его машинный код командами NOP. В результате в программе
образуется своеобразная дырка, но на работоспособность она ни коем образом не повлияет.
Правда , здесь есть один нюанс. машинный эквивалент команды NOP (в шестнадцатеричном
представлении - 90) занимает один байт,в то же время машинная командя, вызывающая функцию
MessageBoxA (E8 C5010000) - целых 5. Несоответствия быть не должно, и чтобы полностью
перекпытьисходною комануду нужно исползоватьуоманду NOP 5 раз. К счастю, OllyDBG полностью
избавляет нас от лишнего неорроя.Кликни правой кнопкой мыши на строке, где произашла точка
останова, и выбери в меню Binary->Fill with NOPs. Отладчик самостоятелно заполнит комануду
Nopаминужно число раз. Теперь можно продолжыть выполнения программы - нажымаем F9. Сразу
выясняется две новости: одна хорошая, другая - нет((. Начну с хорошей: первый наг-скрин мы
убрали. Плохая новостьзаключается в том, что другой наш остался на месте. Почему? Видимо,
он отображатся с помощю другой АРІ-функцей,на которою брейкпоинт не установле. Не беда.
Открываетм окно Referencer (view-> Referencer): после установки первого брейкпоинта сюда
записалася список всех вызываемых програмой функций. С базовымизначениями АРІ (или мануалом
под рукой) можно предложыть, что наг выводится с помощю функции DialogBoxParamA. Предлагаю
проверить проверить тебе самому. Все изменения можно вручнуювнести через НЕХ-ркдактор, с
помощю которого байты по нужным адресам перезаписать числом 90.Или же автоматически записать
все изменения с помощью самого OllyDBG: первый клик по исправленниму ассемблерному коду, меню
Copy to Executable-> All modifications.
Всё..)..
Последний раз редактировалось HakNet; 06.08.2006 в 14:50..
Причина: /// убрал...
|