Внедрение кода DLL с помощью удаленного потока. Где хранить имя файла / местоположение DLL в адресном пространстве целевого процесса?
Не может быть (полезных) ответов на эти вопросы, но что угодно. Я хочу внедрить код в приложение с помощью внедрения кода DLL. План такой:
Найдите адрес функции LoadLibrary в целевом процессе.
Напишите строку с именем /filepath библиотеки DLL, которую я хочу загрузить, используя WriteProcessMemory() где-нибудь в адресном пространстве целевого процесса.
Запустите удаленный поток, используя CreateRemoteThread() с адресом LoadLibrary() в качестве точки входа и указателем на строку, содержащую имя / путь к файлу DLL, которая будет загружена в качестве аргумента для функции LoadLibrary().
Проблема в нет. 2. Где в адресном пространстве целевого процесса я храню строку (не повреждая что-либо)?
Если этот вопрос был задан ранее, не стесняйтесь указывать мне там.
Большое спасибо за любую помощь.
1 ответ
VirtualAllocEx
позволяет указать процесс, в котором выделяется память. Вы бы использовали это, чтобы выделить блок памяти. Обратите внимание, что вы не можете писать напрямую на возвращенный адрес - он находится в другом процессе. Вы бы написали имя DLL через WriteProcessMemory
,
Если вы намеревались разместить свой код в DllMain
, Вы не должны. Windows выполняет внутреннюю блокировку во время выполнения DllMain
и это добавляет риск тупика, в зависимости от того, что вы намерены делать в своем коде хука. Вы можете получить адрес функции в вашей DLL и использовать CreateRemoteThread
еще раз, чтобы запустить это в отдельном потоке после загрузки DLL.
Вместо того, чтобы реализовывать все это самостоятельно, я бы порекомендовал вам использовать уже написанную библиотеку, такую как EasyHook, которая поддерживает как управляемое, так и неуправляемое внедрение.