首先,创建一个项目写远程注入程序:
#include<Windows.h>
int main()
{
DWORD buffsize = strlen("d://test_dll.dll") + 1;
SIZE_T realwrite;
//OpenProcess函数的第二个参数是进程ID,使用的时候要修改为要注入的进程的ID
HANDLE hprocess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 14492);
//给目标进程申请空间,目的是为了写入字符串,我们不能把当前进程的地址传过去,因为两个不同的进程虚拟内存地址不一样
char* str = (char*)VirtualAllocEx(hprocess, 0, buffsize, MEM_COMMIT, PAGE_READWRITE);
//给空间写入字符串,这个字符串的意义是被注入的进程,要从哪里打开dll文件
bool success = WriteProcessMemory(hprocess, str, "d://test_dll.dll", buffsize, &realwrite);
HANDLE hthread = CreateRemoteThread(hprocess, 0, 0, (LPTHREAD_START_ROUTINE)LoadLibraryA, str, 0, 0);
WaitForSingleObject(hthread, -1);
VirtualFreeEx(hprocess, str, 0, MEM_RELEASE);
CloseHandle(hthread);
CloseHandle(hprocess);
}
然后,再创建一个项目,用于生成注入的DLL。
#include<Windows.h>
BOOL DllMain(HINSTANCE hInstance, DWORD reason, LPVOID lp)
{
if (reason == DLL_THREAD_ATTACH)
{
MessageBoxA(0, "dll inject success!", "提示", MB_OK);
}
return TRUE;
}
生成完毕后,把dll文件放到指定位置(也就是远程注入程序中,被注入的程序要从哪里找的那个路径)。
然后打开要被注入的进程,填上进程ID,运行远程注入程序,即可完成注入。