Длл впрыска. Выполнить CreateRemoteThread с параметром - PullRequest
2 голосов
/ 05 июля 2011

Я написал программу для инъекций dll, которая работает просто отлично. Он загружает dll в удаленный процесс и вызывает некоторую функцию. Теперь я хочу передать аргумент этой функции. CreateRemoteThread имеет lpParameter для этого, но как получить этот переданный аргумент внутри dll, чтобы использовать его в функции?

Обновление : Точка входа dll является общей:

BOOL APIENTRY DllMain( HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)

Dll содержит только одну функцию со следующим прототипом:

void TestFunction(const char* ua);

Код, который вызывает эту функцию:

CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE)((void*)codecaveExecAddr), (LPVOID)argumentAddress, 0, NULL);

Как видите, я пытаюсь передать строку "test" внутри TestFunction. Но затем я проверяю аргумент ua внутри TestFunction, в которой содержится мусор.

Вот все файлы проекта:
http://pastebin.com/gh4SnhmV
http://pastebin.com/Sq7hpSVx
http://pastebin.com/dvgXpUYz

ОБНОВЛЕНИЕ 2
Должен ли TestFunction иметь какой-либо конкретный пропотип или я могу использовать любой, если в нем только один параметр типа LPVOID? Я не совсем понимаю. Может кто-нибудь дать мне пример того, как вызвать функцию введенной DLL с некоторым аргументом?

1 Ответ

6 голосов
/ 05 июля 2011

Вам необходимо разместить данные в памяти другого процесса. Для этого используйте функцию VirtualAllocEx, которая будет возвращать адрес в другой памяти процесса, который вы передаете CreateRemoteThread.

CreateRemoteThread работает точно так же, как CreateThread, за исключением того, что он создает поток в удаленном процессе. Следует иметь в виду, что при передаче указателя на объект в lpParameter удаленный поток, работающий в другом виртуальном адресном пространстве, попытается получить доступ к этому адресу в этом адресном пространстве.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...