一、远程线程注入(CreateRemoteThread)
实现流程
- 打开目标进程,获取PROCESS_ALL_ACCESS权限
- 在目标进程VirtualAllocEx申请可写可执行内存
- WriteProcessMemory写入 DLL 路径
- 获取LoadLibraryA/W地址
- CreateRemoteThread创建远程线程,回调为 LoadLibrary
- 线程执行后加载 DLL,完成注入
优缺点
- 优点:实现最简单、兼容性最好、稳定通用
- 缺点:易被检测、无法注入系统进程、不支持跨会话
触发条件
- 目标进程有足够权限
- 未被保护、未开启强反注入
对抗手段
- Hook NtCreateThreadEx
- 监控远程线程创建
- 校验新线程起始地址是否为 LoadLibrary
- 阻止非信任进程打开句柄
二、APC 注入(异步过程调用)
实现流程
- 打开目标进程,分配内存并写入 DLL 路径
- 枚举目标线程OpenThread
- QueueUserAPC将 APC 插入线程队列
- 回调函数设为 LoadLibrary
- 线程进入alertable wait状态时自动执行 APC
优缺点
- 优点:无新线程、隐蔽性更高,可绕过部分远程线程检测
- 缺点:依赖线程进入可等待状态,不一定立即执行,不稳定
触发条件
- 线程必须进入 alertable 状态(Sleep、WaitForSingleObjectEx 等)
- 不能被内核强制阻断 APC
对抗手段
- 监控NtQueueApcThread
- 过滤 APC 回调是否为 LoadLibrary
- 禁用用户 APC 或清空 APC 队列
- 检测内存中突然出现的 DLL 路径
三、钩子注入(SetWindowsHookEx)
实现流程
- 编写带Hook 回调的 DLL
- SetWindowsHookEx设置全局钩子(WH_KEYBOARD、WH_MOUSE、WH_CALLWNDPROC 等)
- 系统会自动把 DLL 映射到所有接收消息的 GUI 进程
- 目标进程触发消息时执行注入逻辑
优缺点
- 优点:全局注入、GUI 场景天然稳定,适合桌面软件
- 缺点:只支持有消息循环的 GUI 进程,无法注入控制台/无窗口进程
触发条件
- 目标进程是 GUI 进程、有消息循环
- 未取消钩子、未屏蔽窗口消息
对抗手段
- Hook SetWindowsHookEx
- 卸载不明钩子、枚举钩子列表
- 禁止加载未知 DLL
- GUI 进程强化模块白名单
面试速记版(一句话总结)
- 远程线程:最简单最稳,但最容易被查。
- APC:更隐蔽,但靠运气执行,不稳定。
- 钩子:只适合 GUI,全局生效但局限大。