Показать сообщение отдельно

  #16  
Старый 01.08.2006, 18:42
Micr0b
Участник форума
Регистрация: 14.01.2006
Сообщений: 242
Провел на форуме:
2630617

Репутация: 245
Отправить сообщение для Micr0b с помощью ICQ
По умолчанию

Далее необходимо запустить программу из
отладчика для этого нажми клавишу 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.. Причина: /// убрал...