首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++ DLL注入"CreateRemoteThread“返回0

C++ DLL注入"CreateRemoteThread“返回0
EN

Stack Overflow用户
提问于 2022-08-19 03:17:53
回答 1查看 79关注 0票数 0

所以我正在编写一个DLL注入程序,使用OpenProcess、VirtualAllocEx、WriteProcessMemory等等。

在我打电话给CreateRemoteThread之前,一切看起来都很顺利。我三次检查了Microsoft文档并查看了几个示例,因此我确信我已经正确地使用了该函数,但是它正在返回0。

这是我的密码:

代码语言:javascript
复制
// 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);

下面是控制台的输出:

代码语言:javascript
复制
Successfully injected.

0x110
0x3a9c0000
0x75dd0bd0
0 <-- this is the return value of CreateRemoteThread

我尝试过在参数中设置null/0并删除WaitForSingleObject调用,但都没有给出结果。

任何帮助都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2022-08-19 03:46:39

发现了问题。我使用MingGW 32位进行编译,而不是使用64位,所以我创建了VS解决方案,并将其修复。谢谢你的帮助“退休忍者”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73411516

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档