Длл впрыск. Выполнить CreateRemoteThread с параметром

Я написал программу инъекции 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 ответ

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

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

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