//返回值 > 0 为错误代码,自己方便预览,参数1为进程PID,参数2为dll模块全路径
int 远程线程注入(int pid, const char* _fullPath)
{
//打开进程获取操作句柄
HANDLE hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
if (hProc == NULL)
return 1;
//获取dll路径长度 +1是因为strlen函数 返回长度是不带终止符的 \0
size_t dllSize = strlen(_fullPath) + 1;
//远程申请内存空间,用于存放dll路径字符串
LPVOID adr = VirtualAllocEx(hProc, NULL, dllSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
if (adr == NULL)
return 2;
//写入路径字符串
if (!WriteProcessMemory(hProc, adr, _fullPath, dllSize, NULL))
return 3;
//创建远程线程,直接启动LoadLibraryA的地址,传入我们申请的字符串地址
HANDLE tProc = CreateRemoteThread(hProc, NULL, 0, (LPTHREAD_START_ROUTINE)&LoadLibraryA, adr, 0, NULL);
if (tProc)
{
// 等待远线程结束。
WaitForSingleObject(tProc, INFINITE);
//关闭线程句柄
CloseHandle(tProc);
//注入成功
MessageBoxA(NULL, "注入成功", "提示", MB_ICONASTERISK);
}
else
return 4;
//释放远程字符串内存
VirtualFreeEx(hProc, adr, 0, MEM_RELEASE);
//关闭操作句柄
CloseHandle(hProc);
return 0;
}
int main(){
//直接注入即可,x86 64 通用,根据自身项目变动
int error = 远程线程注入(进程PID, dll模块全路径)
if(error > 0)
//注入失败
}
C++远程线程注入Dll模块代码,全系统通用,超简单。
最新推荐文章于 2024-10-24 10:07:53 发布