Метод, который вы предлагаете, будет работать нормально.
Кажется, что вы ввели dll в целевой процесс и хотите получить адрес функции в этой DLL в целевом процессе из процесса, который ввел dll.
Я предполагаю, что у вас также есть DLL, загруженная в процесс, который ввел DLL в целевой процесс и что вы хотите создать удаленный поток в целевом процессе и заставить его выполнить целевую функцию в целевом процессе.
Поскольку DLL, которую вы ввели, не может быть загружена по тому же адресу в целевом процессе, что и в процессе инъекции, вы не можете просто использовать адрес, который вы получили бы от вызова GetProcAddress, от функции в процессе инъекции ,
HMODULE - это только базовый адрес библиотеки DLL (см. this answer). Таким образом, вы можете взять HMODULE из dll в процессе инъекции и вычесть его из адреса, возвращаемого GetProcAddress, в вашу функцию. Затем вы можете добавить HMODULE вложенной DLL в целевом процессе к этому смещению, чтобы получить адрес целевой функции в инклинированной DLL в целевом процессе. Предполагая, что эта функция имеет правильную подпись, передайте ее как функцию потока для вашего вызова, чтобы создать удаленный поток, и теперь вы запускаете целевую функцию в целевом процессе.
Я объясняю это более подробно в this answer.
Спасибо. У меня другая проблема. Когда я делаю это -> http://wklej.org/id/700802/, я получаю неправильную сумму. Должен ли я сделать это так -> http://wklej.org/id/700803/ ?? – Blood
@Blood: Ни одна из этих вещей не имеет никакого смысла. Вы добавили смещение (чтобы перейти от базы к функции), но забыл вычесть его (чтобы получить базу в первую очередь). См. Мой ответ. Поскольку вы должны делать то и другое, и они отменяются, вы можете просто не беспокоиться. –
Дэвид, единственный раз, когда он отменяется, - это если DLL загружается с одним базовым адресом в обоих процессах. В противном случае мой ответ будет работать, а ваш не будет :). –