Как определить адрес памяти неэкспортируемой функции в исполняемом процессе Windows?

Я экспериментирую с внедрением кода, чтобы попытаться понять, как его следует использовать.

В настоящее время у меня есть исполняемый файл, который я разработал как цель для внедрения кода. У меня также есть dll, содержащая код, который я хочу внедрить, и процесс инжектора, который обрабатывает вставку dll в процесс целевого исполняемого файла.

Что я конкретно пытаюсь сделать, так это перехватить функцию (которая не была экспортирована) в процессе целевого исполняемого файла, используя структуру mhook.

Мой процесс инжектора работает очень хорошо, и я могу убедиться, что моя dll правильно вставляется в целевой исполняемый процесс.

Проблема, с которой я сейчас сталкиваюсь, заключается в попытке определить, какой адрес передать в mhook в качестве целевого местоположения функции, которую я пытаюсь перехватить. Поскольку это не экспортируемая функция, я не могу использовать типичный подход вызова GetProcAddress() и не могу понять, как ее найти.

Я декомпилировал целевой исполняемый файл в IDA и знаю, где находится функция в исполняемом файле (смещение 0x1770), но когда я передаю это в mhook, он не вызывает мою функцию батута, т.е. мой хук не работает. Я попытался найти начальную ячейку памяти модуля во время его работы и добавить к нему это смещение, но это тоже не работает.

Кажется, мне не хватает чего-то базового в моем понимании внедрения кода, но я не могу понять, что это такое. Google мне тоже не помог, хотя я изучаю это уже более недели.

Пожалуйста, помогите мне понять, какое значение я должен передать в mhook.

Спасибо, и, пожалуйста, дайте мне знать, болван


person blargfoot    schedule 01.02.2014    source источник
comment
Если приведенное выше является ответом на ваш вопрос, вы должны ответить на свой вопрос (не забудьте принять его!). Таким образом, он на самом деле отображается как ответ при просмотре вопросов :). Если нет порога репутации, прежде чем вы сможете это сделать, в этом случае игнорируйте меня.   -  person kornman00    schedule 03.02.2014


Ответы (1)


Понятно. Найдите адрес функции в IDA и вычтите значение начального адреса, указанное в IDA. Или с помощью OllyDbg найти в памяти начало функции и вычесть из него сегмент кода .textbss..text. Это даст мне смещение функции в пространстве процесса. Передайте это в mhook, и все будет готово.

person blargfoot    schedule 04.02.2014
comment
Должен ли ASLR быть проблемой в этом случае? - person Dev.K.; 28.01.2015