gpt4 book ai didi

c++ - 远程进程不启动

转载 作者:行者123 更新时间:2023-11-28 06:39:06 25 4
gpt4 key购买 nike

我正在尝试从另一个程序调用一个进程,这个进程是我通过 DLL 注入(inject)的。第一个,我们加载库“Client.dll”的地方工作得很好,这是由 DllMain (DLL_PROCESS_ATTACH) 中的 MessageBox Debug 播种的。

将 DLL 加载到程序中后,我尝试从 Client.dll 调用函数 MainThread,但是使用相同的方法(复制、粘贴、编辑)不起作用。两者都贴在下面,谁能告诉我为什么?我已经从 MainThread 中删除了所有代码,但出于调试原因。

这是主线程:

void MainThread(void * Arguments)
{
MessageBoxA(NULL, "MainThread Started!", "bla", MB_OK); //Not Shown
for (;;)
{
//This loop is here for the main program loop.
}
_endthread();
}

这是我加载 Client.dll 并尝试调用主线程的方式,请记住实际的注入(inject)工作但不是主线程的启动。

bool InjectDLL(DWORD ProcessID, const char* Path)
{
HANDLE Handle = OpenProcess(PROCESS_ALL_ACCESS, false, ProcessID);
if (!Handle)
{
std::cout << "Could not access process! Inject Failed!";
return false;
}

LPVOID LoadLibraryAddress = (LPVOID)GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
LPVOID Allocate = VirtualAllocEx(Handle, NULL, strlen(Path), MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(Handle, Allocate, Path, strlen(Path), NULL);

HANDLE Thread = CreateRemoteThread(Handle, NULL, NULL, (LPTHREAD_START_ROUTINE)LoadLibraryAddress, Allocate, 0, NULL);
WaitForSingleObject(Thread, INFINITE); // WAIT FOREVER!
VirtualFreeEx(Handle, Thread, strlen(Path), MEM_RELEASE);

//Start DLL Main Thread
LPVOID MainThreadAddress = (LPVOID)GetProcAddress(GetModuleHandleA("Client.dll"), "MainThread");
Allocate = VirtualAllocEx(Handle, NULL, 0, MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(Handle, Allocate, Path, strlen(Path), NULL);

HANDLE MainThread = CreateRemoteThread(Handle, NULL, NULL, (LPTHREAD_START_ROUTINE)MainThreadAddress, Allocate, 0, NULL);
WaitForSingleObject(MainThread, INFINITE); // Wait for Main Thread to start
VirtualFreeEx(Handle, MainThread, strlen(Path), MEM_RELEASE);

CloseHandle(MainThread);
CloseHandle(Thread);
CloseHandle(Handle);
return true;
}

感谢任何能提供帮助的人。

最佳答案

我没有看到任何错误检查 - 特别是对于您获取“MainThread”地址的情况。这是成功了吗?

为了让它工作,您将需要通过 .DEF 文件或使用 __declspec(dllexport) 从您的 DLL 中显式导出“MainThread”。参见 this SO lin k 了解详情。

关于c++ - 远程进程不启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26283714/

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