不传之秘:Windows 下的 7 种 DLL 注入技术
在本文中,我将列出 七种可以在 Windows 用户模式进程中使用的 DLL 注入技术。也许还存在更多方式,但我将分享我亲自实践并掌握的一手技术。
1. AppInit_DLLs
过去,很多人依赖于注册表中的 AppInit_DLLs 项。操作系统加载程序会在创建进程时读取该值并加载指定的 DLL。
- 适用于早期系统(如 Windows XP)
- 由于恶意软件的广泛使用,该技术已被限制或弃用
- 新版 Windows 默认不再支持,需手动启用特定策略
2. SetWindowsHookEx API
通过 SetWindowsHookEx() 可以将自定义钩子函数安装到钩子链表中。
- 适用于键盘、鼠标、窗口消息等事件的钩子
- 可以使操作系统将你的 DLL 注入到相关进程中
- 需要配合
USER32.dll 的相关调用才能触发注入
注意:系统将钩子 DLL 注入到其他需要接收钩子的进程中,这使其成为一种经典的用户态注入技术。
3. IFEO(Image File Execution Options)键
IFEO 注册表项可用于:
- 指定调试器
- 加载 AppVerifier 插件
- 更改进程行为(堆选项等)
你可以通过创建一个自定义 AppVerifier 插件,实现 DLL 注入。
示例路径:
HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\YourTargetApp.exe
4. Remote Threads(远程线程注入)
该技术通过创建远程线程的方式向目标进程注入 DLL。
- 本质是在目标进程中调用
LoadLibrary()
- 简单高效
- 但容易被杀软检测,因其属于典型的恶意行为
5. 进程跟踪与批量注入(Implicit Tracking)
原理是 hook 进程创建 API,比如:
kernel32!CreateProcessInternalW
ntdll!NtCreateProcess*
基本步骤:
- 枚举并注入当前所有运行进程
- hook 所有进程中的进程创建 API
- 在子进程创建时暂停 -> 注入 DLL -> 恢复运行
- 子进程将继续 hook 后续新进程,实现“链式注入”
常用于安全产品或持久化后门。通过注入 explorer.exe 可实现对“开始菜单”中所有应用的跟踪注入。
6. AppCompat Shimming(应用兼容层)
这种方式源于微软的 AppCompat 技术和 EMET 项目。
- 基于
AppPatch.dll 和 .sdb 数据库
-
支持:
- 内存搜索与替换
- DLL 加载与注入(支持通配符)
- 模拟 API 返回值等
注入方式:
- 生成自定义
.sdb 兼容性数据库
- 注册到系统并通过兼容层自动加载指定 DLL
这种方式是“加载过程”的一部分,不是真正意义上的“运行时注入”。
7. Kernel Drivers(内核驱动)
虽然不属于纯用户态方式,但它是最强大的注入技术之一。
- 驱动可以拦截进程创建事件
- 注入 DLL 或执行 APC(异步过程调用)
- 常用于杀毒软件、EDR 等安全产品
注:使用驱动程序需有管理员权限和签名支持,在现代 Windows 系统上受限较多。
结语
DLL 注入是一个引人入胜的技术领域,不同的技术在隐蔽性、兼容性、安全性和持久性方面各具优劣。
技术 |
兼容性 |
易用性 |
检测难度 |
AppInit_DLLs |
低 |
中 |
中 |
SetWindowsHookEx |
高 |
高 |
低 |
IFEO 键 |
中 |
中 |
中 |
Remote Threads |
高 |
高 |
高 |
进程跟踪注入 |
高 |
低 |
高 |
AppCompat Shimming |
中 |
中 |
低 |
Kernel Driver |
高 |
低 |
中 |
原文参考:7 DLL injection techniques in Microsoft Windows – lallous' lab
|