用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. 清理资源。
版权声明
本文仅代表作者观点,不代表米安网络立场。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。