所以我正在编写一个DLL注入程序,使用OpenProcess、VirtualAllocEx、WriteProcessMemory等等。
在我打电话给CreateRemoteThread之前,一切看起来都很顺利。我三次检查了Microsoft文档并查看了几个示例,因此我确信我已经正确地使用了该函数,但是它正在返回0。
这是我的密码:
// path to DLL
LPCSTR dllPath = "C:\\Users\\user\\OneDrive\\Desktop\\dllname.dll";
// process handle
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 9440);
// dll base address
LPVOID baseAddress = VirtualAllocEx(hProcess, NULL, strlen(dllPath) + 1, MEM_COMMIT, PAGE_READWRITE);
// write to process memory
WriteProcessMemory(hProcess, baseAddress, (LPCVOID) dllPath, strlen(dllPath) + 1, NULL);
// kernel32's LoadLibraryA function
LPVOID loadLibrary = (LPVOID) GetProcAddress(GetModuleHandleA("kernel32.dll"), "LoadLibraryA");
// create remote thread -- This is what returns 0 (not sure why)
HANDLE hLoadThread = CreateRemoteThread(hProcess, NULL, 0, (LPTHREAD_START_ROUTINE) loadLibrary, baseAddress, 0, 0);
// wait to inject
WaitForSingleObject(hLoadThread, INFINITE);
// print debugs
std::cout << "Successfully injected." << std::endl << std::endl;
std::cout << hProcess << std::endl;
std::cout << baseAddress << std::endl;
std::cout << loadLibrary << std::endl;
std::cout << hLoadThread << std::endl;
std::cin.get();
// free memory
VirtualFreeEx(hProcess, baseAddress, strlen(dllPath) + 1, MEM_RELEASE);下面是控制台的输出:
Successfully injected.
0x110
0x3a9c0000
0x75dd0bd0
0 <-- this is the return value of CreateRemoteThread我尝试过在参数中设置null/0并删除WaitForSingleObject调用,但都没有给出结果。
任何帮助都将不胜感激。
发布于 2022-08-19 03:46:39
发现了问题。我使用MingGW 32位进行编译,而不是使用64位,所以我创建了VS解决方案,并将其修复。谢谢你的帮助“退休忍者”。
https://stackoverflow.com/questions/73411516
复制相似问题