【逆向】Windows 三大注入:远程线程 、APC 、 钩子注入

一、远程线程注入(CreateRemoteThread)

实现流程

  1. 打开目标进程,获取PROCESS_ALL_ACCESS权限
  2. 在目标进程VirtualAllocEx申请可写可执行内存
  3. WriteProcessMemory写入 DLL 路径
  4. 获取LoadLibraryA/W地址
  5. CreateRemoteThread创建远程线程,回调为 LoadLibrary
  6. 线程执行后加载 DLL,完成注入

优缺点

  • 优点:实现最简单、兼容性最好、稳定通用
  • 缺点:易被检测、无法注入系统进程、不支持跨会话

触发条件

  • 目标进程有足够权限
  • 未被保护、未开启强反注入

对抗手段

  • Hook NtCreateThreadEx
  • 监控远程线程创建
  • 校验新线程起始地址是否为 LoadLibrary
  • 阻止非信任进程打开句柄

二、APC 注入(异步过程调用)

实现流程

  1. 打开目标进程,分配内存并写入 DLL 路径
  2. 枚举目标线程OpenThread
  3. QueueUserAPC将 APC 插入线程队列
  4. 回调函数设为 LoadLibrary
  5. 线程进入alertable wait状态时自动执行 APC

优缺点

  • 优点:无新线程、隐蔽性更高,可绕过部分远程线程检测
  • 缺点:依赖线程进入可等待状态,不一定立即执行,不稳定

触发条件

  • 线程必须进入 alertable 状态(Sleep、WaitForSingleObjectEx 等)
  • 不能被内核强制阻断 APC

对抗手段

  • 监控NtQueueApcThread
  • 过滤 APC 回调是否为 LoadLibrary
  • 禁用用户 APC 或清空 APC 队列
  • 检测内存中突然出现的 DLL 路径

三、钩子注入(SetWindowsHookEx)

实现流程

  1. 编写带Hook 回调的 DLL
  2. SetWindowsHookEx设置全局钩子(WH_KEYBOARD、WH_MOUSE、WH_CALLWNDPROC 等)
  3. 系统会自动把 DLL 映射到所有接收消息的 GUI 进程
  4. 目标进程触发消息时执行注入逻辑

优缺点

  • 优点:全局注入、GUI 场景天然稳定,适合桌面软件
  • 缺点:只支持有消息循环的 GUI 进程,无法注入控制台/无窗口进程

触发条件

  • 目标进程是 GUI 进程、有消息循环
  • 未取消钩子、未屏蔽窗口消息

对抗手段

  • Hook SetWindowsHookEx
  • 卸载不明钩子、枚举钩子列表
  • 禁止加载未知 DLL
  • GUI 进程强化模块白名单

面试速记版(一句话总结)

  1. 远程线程:最简单最稳,但最容易被查。
  2. APC:更隐蔽,但靠运气执行,不稳定。
  3. 钩子:只适合 GUI,全局生效但局限大。
相关推荐
码农爱学习2 小时前
ClaudeCode搭配DeepSeek在Windows和Linux中的安装教程
linux·运维·windows
WA内核拾荒者21 小时前
WhatsApp账号运营SOP的可视化编排与流水线监控
大数据·数据库·windows
Java小白笔记1 天前
Windows系统免软件命令激活
java·网络·人工智能·windows·ai·ai编程
IT小盘1 天前
17-AI应用防止越权访问知识库
服务器·网络·windows
rust&python1 天前
通达信量化tdxquant快速开始第一个策略
windows·量化·通达信·tdxquant
Albart5751 天前
Windows快速访问幽灵文件夹彻底解决|清除tmp残留_无效固定项_侧边栏残留(Win10_Win11通用)
windows·powershell脚本·快速访问修复·幽灵文件夹清理·tmp垃圾清除·电脑系统优化
clorinda1 天前
把 DeepSeek Harness 打包成类似 Codex 的 Windows 桌面应用:Electron、一键启动、插件管理和动态壁纸
前端·javascript·windows·electron
zhonyu鱼1 天前
Pot 翻译:开源免费的跨平台划词翻译与 OCR 工具
windows·macos·开源·ocr·开源软件
Mr.亮先生2 天前
# 把 DeepSeek 官方 Agent 工作台,直接装进 Windows 启动器里
windows·deepseek·harness
曹牧2 天前
C#:List<string>特定格式输出
windows·c#