如何将dll注入另一个进程
How to inject a dll to a another process?
过去几天我一直在尝试创建一个DLL注入器
我发现DLL注入最简单的方法是使用CreateRemoteThread
这就是我到目前为止所写的内容,这段代码不起作用,无法找出原因。
我很确定我的问题在于我用来调用WinAPI函数的变量类型,但我找不到哪里。
bool Injector::Inject( HANDLE hProcess )
{
//hProcess is a process with writing and reading access
HANDLE hThread;
void* pLibRemote = 0;
string dllPath = "Some dll path";
HMODULE hKernel32 = GetModuleHandle(__TEXT("Kernel32"));
pLibRemote = VirtualAllocEx(hProcess, NULL, sizeof(dllPath.c_str()), MEM_COMMIT, PAGE_READWRITE);
WriteProcessMemory(hProcess, pLibRemote, dllPath.c_str(), sizeof(dllPath.c_str()), NULL);
hThread = CreateRemoteThread( hProcess, NULL, 0,
(LPTHREAD_START_ROUTINE) ::GetProcAddress(hKernel32,"LoadLibraryA"),
pLibRemote, 0, NULL );
.
.
.
CloseHandle(hThread);
}
.
.
.
至少有2个问题:
pLibRemote = VirtualAllocEx(hProcess, NULL, sizeof(dllPath.c_str()), MEM_COMMIT, PAGE_READWRITE);
1) sizeof(dllPath.c_str())
:您正在对指针执行sizeof操作(c_str()返回指针),因此可能会得到4或8。使用dllPath.size() + sizeof(char)
(如果使用std::wstring
,则使用wchar_t
而不是char
)。
2) 使用MEM_RESERVE | MEM_COMMIT
而不是仅使用MEM_COMMIT
:您希望同时保留和提交保留的内存。
还要确保两个程序使用相同的ISA(x86/x86;x64/x64,但不是不匹配的ISA)。
相关文章:
- 如何在C++中将函数发送到另一个进程
- 如何从另一个进程解开全局钩子?
- 如何使用带有矢量的 winapi 读取进程内存从另一个进程读取缓冲区?
- 如何在MPI中将矩阵从一个进程转移到另一个进程
- 将vector<vector<double>>从x86平台中创建的一个进程发送到x64中构建的另一个进程的最快方法是什么
- 通过 c++ 中的 udp 套接字将派生类对象从一个进程发送到另一个进程
- 如何:监视Windows中另一个进程的文件访问?
- 是否可以注入一个进程并获取给定的句柄,然后使用它们注入另一个进程
- 尝试启动另一个进程并通过 MPI 加入它,但获得访问冲突
- 将窗口句柄从一个进程使用到另一个进程(插件 vst 音频)
- 启动另一个进程的最佳方式C++?
- Win32/Gdigrab - 如何将另一个进程窗口设置为无边框
- 为什么我不能用这个函数在Qt框架中打开另一个进程?
- 如何使用 C# 在 Windows 中获取另一个进程库地址
- 如何在没有窗口类的情况下编写QT系统托盘应用程序,并将其与另一个进程集成
- GetWindowText 返回另一个进程的空字符串
- 如何获取另一个进程的基址?(美国法律评论)
- 如何在C++中将字节数组发送到另一个进程
- 从另一个进程设置 HWND 的 lpfnWndProc
- 如何将记忆映射的文件与另一个进程写入文件同步