我在c ++中编写DLL注入器,但它根本不起作用。所以我想做的只是注入我自己的DLL,它应该打开一个消息框,上面写着:" Hello"进入虚拟程序,但没有任何事情发生。我认为它可能是句柄,但读写内存效果很好。我还尝试了以下显示的代码之外的其他变量,但没有任何对我有用,所以我希望有足够的信息开始,如果不是只是告诉我,这里的代码已经感谢:
BOOL Inject(LPCSTR DllPath, HANDLE hProc) {
LPVOID pDllPath = VirtualAllocEx(hProc, 0, strlen(DllPath) + 1,
MEM_COMMIT, PAGE_READWRITE);
bool written = WriteProcessMemory(hProc, pDllPath, DllPath,
strlen(DllPath) + 1, 0);
HANDLE hLoadThread = CreateRemoteThread(hProc, 0, 0,
(LPTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandleA("kernel32.dll"),
"LoadLibraryA"), pDllPath, 0, 0);
std::cout << pDllPath << std::endl;
WaitForSingleObject(hLoadThread, INFINITE);
VirtualFreeEx(hProc, pDllPath, strlen(DllPath) + 1, MEM_RELEASE);
return written;
}
答案 0 :(得分:0)
实际上很抱歉,我会关闭这个问题,但是从正常的std :: string到LPCSTR的转换导致了问题,而不是实际的注入器。所以是的,但如果有人遇到同样的问题。在我的情况下,当我使用myString.c_str();调用函数时例如:Inject(dllPath.c_str(),hProcess);当我试图&#34;保存&#34; LPCSTR更早,而不是称之为:
LPCSTR dllPath;
dllPath = sDllPath.c_str();
Inject(dllPath, hProcess);
它没有用,但是我找到了对这篇文章感到遗憾的方法。