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

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

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

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

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам