gpt4 book ai didi

c++ - 从通过 CreateRemoteThread 创建的线程调用函数

转载 作者:行者123 更新时间:2023-11-30 17:08:49 24 4
gpt4 key购买 nike

我正在研究 dll 注入(inject),到目前为止,我设法在进程中注入(inject) dll,导致消息框显示。

即使经过大量阅读和研究,我仍然不太理解的部分是如何将参数传递给 dll,或调用其中的特定函数。

DLL:

extern "C" __declspec(dllexport) bool WINAPI
DllMain(HINSTANCE hInstDll, DWORD fdwReason, LPVOID lpvReserved)
{

switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
{
MessageBoxA(NULL, "Hello World!", "Dll says:", MB_OK);

break;
}

case DLL_PROCESS_DETACH:
break;

case DLL_THREAD_ATTACH:
break;

case DLL_THREAD_DETACH:
break;
}

return true;
}

注入(inject):

char dllPath[] = "sampleDll.dll";

// For dll path injection.
int memAmountToAllocate = strlen(dllPath);

LPVOID dllPathAddress = VirtualAllocEx(procHandle, 0, memAmountToAllocated, MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);

FARPROC loadLibraryAddr = GetProcAddress(GetModuleHandle("kernel32.dll"), "LoadLibraryA");

WriteProcessMemory(procHandle, dllPathAddress, dllPath, memAmountToAllocated, 0);

// creating a thread that will call LoadLibraryA with allocMemAddress as argument
CreateRemoteThread(procHandle, 0, 0, loadLibraryAddr, dllPathAddress, 0, 0);

正如我所说,注入(inject)工作正常,即出现消息框。但是假设我在 dll foo(LPVOID ptrToData) 中有一个方法。如何调用 foo 函数?我有我想要在目标进程上执行的函数的地址,它是一个添加函数,所以我需要传递 x 和 y。

我可以这样调用该函数

          _asm
{
push 0;
push 0x7;
mov ecx, esi;
mov eax, 0x41367C;
call eax;
}

但是,push 的值必须来自注入(inject)过程。

我怎样才能做到这一点?

最佳答案

我的问题的解决方案是使用 IPC 机制来允许我的主应用程序和 dll 进行通信。我使用了命名管道。

我在 C# 中创建了管道,然后当我注入(inject) dll 时,我连接到管道。

关于c++ - 从通过 CreateRemoteThread 创建的线程调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33513729/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com