GetModuleHandle (), для DLL в другом процессе

Название объясняет все это действительно, у меня есть процесс, подключающийся к другому процессу. Мне нужно иметь возможность получить GetModuleHandle в этой программе для определенной библиотеки DLL, которая не является стандартом Windows, и у меня нет исходного кода для основной программы.

Мне нужно использовать его для вызова экспортированной функции с GetProcAddress и, в конце концов, использовать его в CreateRemoteThread для удаленного запуска задачи в этой программе.

В любом случае я могу получить ModuleHandle из другой программы, вместо локальной программы, с которой он создает удаленный поток?

Благодарю.

2

Решение

Я вижу три возможных решения этого. Насколько я знаю, нет Windows API, который позволяет вам получить адрес функции для модуля в другом процессе.


Решение 1:

Самым простым решением, IMO, является внедрение DLL в целевой процесс и получение всей необходимой информации из самого целевого процесса. Есть много разных способов получить вашу DLL в целевой процесс, мой любимый Отражающая DLL инъекция.


Решение 2:

Решение 2 использует EnumProcessModules ( использование ) выбрать HMODULE ссылки из другого процесса. Вы не можете использовать их в звонках GetProcAddress непосредственно. Способ обойти это — загрузить DLL в ваш процесс, используя LoadLibraryEx( "MODULE_NAME", NULL, DONT_RESOLVE_DLL_REFERENCES ), Это при успешной загрузке модуля предоставит вам HMODULE экземпляр, который вы можете передать GetProcAddress,

Адрес вернулся с GetProcAddress допустимо только для вашего адресного пространства, но, к счастью, это также относительно базы модуля. Вычитая HMODULE ссылка с адреса, а затем добавить его в HMODULE Ссылка в целевом процессе, вы получите адрес функции в целевом процессе.

Пример: targetProc = myProc - myModule + targetModule; где myProc является char * и myModule и targetModule являются HMODULE,


Решение 3:

Решение 3 — самое сложное для реализации ИМО. Это решение требует, чтобы вы прочитали память процесса цели, чтобы найти требуемые модули, а затем проанализировали модули, чтобы найти адреса функций.

Ресурсы для этого решения можно найти Вот а также Вот.


Я лично не тестировал ни решение 2, ни 3, но теоретически они должны работать. Я использовал решение 1 лично, и рекомендовал бы это как способ достигнуть этого. Два других решения требуют много стандартного кода для эмуляции существующих методов Windows API.

2

Другие решения