Внедрение кода DLL с помощью удаленного потока. Где хранить имя файла / местоположение DLL в адресном пространстве целевого процесса? - PullRequest
0 голосов
/ 26 июня 2018

на эти вопросы не может быть (полезных) ответов, но что угодно. Я хочу внедрить код в приложение с помощью внедрения кода DLL. План:

  1. Найти адрес функции LoadLibrary в целевом процессе.

  2. Напишите строку с именем / путем к файлу DLL, которую я хочу загрузить, используя WriteProcessMemory () где-нибудь в адресном пространстве целевого процесса.

  3. Запуск удаленного потока с использованием CreateRemoteThread () с адресом LoadLibrary () в качестве точки входа и указателем на строку, содержащую имя / путь к файлу DLL, которая будет загружена в качестве аргумента для функции LoadLibrary () .

Проблема в том, нет. 2. Где в адресном пространстве целевого процесса я храню строку (не повреждая что-либо)?

Если этот вопрос был задан ранее, не стесняйтесь указывать мне там.

Большое спасибо за любую помощь.

1 Ответ

0 голосов
/ 26 июня 2018

VirtualAllocEx позволяет указать процесс, в котором выделяется память. Вы бы использовали это, чтобы выделить блок памяти. Обратите внимание, что вы не можете писать напрямую на возвращенный адрес - он находится в другом процессе. Вы бы написали имя DLL через WriteProcessMemory.

Если вы намеревались разместить свой код в DllMain, вы не должны. Windows удерживает внутреннюю блокировку при выполнении DllMain, и это добавляет риск тупика, в зависимости от того, что вы намерены делать в своем коде ловушки. Вы можете получить адрес функции в вашей DLL и снова использовать CreateRemoteThread, чтобы запустить ее в отдельном потоке после загрузки DLL.

Вместо того, чтобы реализовывать все это самостоятельно, я бы порекомендовал вам использовать библиотеку, которую кто-то уже написал, например EasyHook , которая поддерживает как управляемые, так и неуправляемые инъекции.

...