Я изменяю minesweeper.exe, чтобы понять, как работает внедрение кода.Я просто хочу, чтобы тральщик показывал окно сообщения перед запуском.Итак, я нахожу «пещеру» в исполняемом файле, а затем определяю строку для отображения в окне сообщений и вызываю окно сообщений.Кроме того, конечно, я должен изменить значение в точке входа модуля исполняемого файла и сначала направить его в мой дополнительный код, а затем продолжить свой собственный код.Итак, в пещере, что я делаю;
"hello starbuck",0
push 0 //arg4 of MessageBoxW function
push the address of my string //arg3, must be title
push the address of my string //arg2, must be the message
push 0 //arg1
call MessageBoxW
...
Теперь, так как адреса памяти кодов в исполняемом файле меняются каждый раз, когда он загружается в память, для вызова функции MessageBoxW я даю смещение адреса, гдеMessageBoxW определяется в таблице адресов импорта.Например, если MessageBoxW
определено в address1 в IAT, а инструкция сразу после call MessageBoxW
находится в address2 вместо записи call MessageBoxW
, я пишу call address2 - address1
.
Итак, мой вопрос, как мне сделать это для отправки адреса строки в стек?Например, если я делаю эти изменения через ollydbg, я даю немедленный адрес «привет старбак» для нажатия, и это работает.Но после перезагрузки исполняемого файла или его запуска вне ollydbg он, естественно, завершается сбоем, поскольку немедленные адреса меняются.
Заранее спасибо, Yigit.
Редактировать: Теперь эта проблема возникает из-заСлово о точке входа модуля изменяется каждый раз, когда исполняемый файл открывается.Итак, чтобы увидеть, как другие строки помещаются в стеки, я сделал это:
Я нашел строку «Destroy Canvas» в коде.Это по адресу: 00403E44.А по адресу 0042878E есть инструкция PUSH 00403E44
(68 44 3E 40 00), которая означает, что указатель на строку помещается в стек.Затем я открыл exe в UltraEdit, нашел соответствующий адрес, который является 00027D8E.Там вместо «68 44 3E 40 00» написано «68 44 3E 00 01».Теперь это означает, что когда OllyDbg загружает исполняемый файл, он обновляет эти коды;00 01 до 40 00. Я посмотрел на другие строки, и их инструкции толчка также.Поэтому я подумал, может быть, если я напишу «68 DA 9A 00 01» вместо «68 DA 9A 40 00» в UltraEdit, чтобы подтолкнуть строку, она тоже будет обновлена.Но это не так.Когда после этого я открываю exe в OllyDbg, адрес, который нужно отправить, остается «01009ADA».
Так что я думаю, что должно быть что-то, что организует эти процедуры «обновления кода».Может быть, это как-то связано с таблицами перестановок, я не знаю.
Не могли бы вы подумать, что, может быть, мне следует задать этот вопрос как еще один вопрос?