用WriteProcessMemory做进程注入 (非DLL注入)
使用 `WriteProcessMemory` 进行进程注入是一种常见的非 DLL 注入技术。
以下是一个示例代码,演示了如何使用 `WriteProcessMemory` 注入代码到目标进程:
```cpp
#include
#include
intmain()
{
//目标进程名称
constchar*targetProcessName="target.exe";
//注入的代码
constchar*codeToInject="Yourcodetoinject";
//获取目标进程ID
DWORDtargetProcessId=0;
PROCESSENTRY32entry;
entry.dwSize=sizeof(PROCESSENTRY32);
HANDLEsnapshot=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,NULL);
if(Process32First(snapshot,&entry))
{
while(Process32Next(snapshot,&entry))
{
if(_stricmp(entry.szExeFile,targetProcessName)==0)
{
targetProcessId=entry.th32ProcessID;
break;
}
}
}
CloseHandle(snapshot);
//打开目标进程
HANDLEhProcess=OpenProcess(PROCESS_ALL_ACCESS,FALSE,targetProcessId);
if(hProcess==NULL)
{
printf("Failedtoopentargetprocess.\n");
return1;
}
//在目标进程中分配内存
LPVOIDremoteMemory=VirtualAllocEx(hProcess,NULL,strlen(codeToInject),MEM_COMMIT,
PAGE_EXECUTE_READWRITE);
if(remoteMemory==NULL)
{
printf("Failedtoallocatememoryinthetargetprocess.\n");
CloseHandle(hProcess);
return1;
}
//将代码写入目标进程内存
if(!WriteProcessMemory(hProcess,remoteMemory,codeToInject,strlen(codeToInject),NULL))
{
printf("Failedtowritecodetotargetprocessmemory.\n");
VirtualFreeEx(hProcess,remoteMemory,0,MEM_RELEASE);
CloseHandle(hProcess);
return1;
}
//在目标进程中创建远程线程来执行注入的代码
HANDLEhRemoteThread=CreateRemoteThread(hProcess,NULL,0,(LPTHREAD_START_ROUTINE)remoteMemory,
NULL,0,NULL);
if(hRemoteThread==NULL)
{
printf("Failedtocreateremotethreadinthetargetprocess.\n");
VirtualFreeEx(hProcess,remoteMemory,0,MEM_RELEASE);
CloseHandle(hProcess);
return1;
}
printf("Codeinjectedsuccessfully.\n");
//清理资源
WaitForSingleObject(hRemoteThread,INFINITE);
VirtualFreeEx(hProcess,remoteMemory,0,MEM_RELEASE);
CloseHandle(hRemoteThread);
CloseHandle(hProcess);
return0;
}在这个示例中,你需要将 `target.exe` 替换为目标进程的名称,并将 `Your code to inject` 替换为要注入的代码。代码通
过以下步骤进行注入:
1. 获取目标进程的 ID。
2. 打开目标进程并分配内存。
3. 使用 `WriteProcessMemory` 将代码写入目标进程内存。
4. 创建一个远程线程来执行注入的代码。
5. 清理资源。
版权声明
本文仅代表作者观点,不代表米安网络立场。
博豪信息




发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。