Windows 环境下 DLL 劫持的七大实战技法
# 不传之秘: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*`
基本步骤:
1. 枚举并注入当前所有运行进程
2. hook 所有进程中的进程创建 API
3. 在子进程创建时暂停 -> 注入 DLL -> 恢复运行
4. 子进程将继续 hook 后续新进程,实现“链式注入”
> 常用于安全产品或持久化后门。通过注入 `explorer.exe` 可实现对“开始菜单”中所有应用的跟踪注入。
---
## 6. AppCompat Shimming(应用兼容层)
这种方式源于微软的 AppCompat 技术和 EMET 项目。
* 基于 `AppPatch.dll` 和 `.sdb` 数据库
* 支持:
1. 内存搜索与替换
2. DLL 加载与注入(支持通配符)
3. 模拟 API 返回值等
注入方式:
* 生成自定义 `.sdb` 兼容性数据库
* 注册到系统并通过兼容层自动加载指定 DLL
> 这种方式是“加载过程”的一部分,不是真正意义上的“运行时注入”。
---
## 7. Kernel Drivers(内核驱动)
虽然不属于纯用户态方式,但它是最强大的注入技术之一。
* 驱动可以拦截进程创建事件
* 注入 DLL 或执行 APC(异步过程调用)
* 常用于杀毒软件、EDR 等安全产品
> 注:使用驱动程序需有管理员权限和签名支持,在现代 Windows 系统上受限较多。
---
## 结语
DLL 注入是一个引人入胜的技术领域,不同的技术在隐蔽性、兼容性、安全性和持久性方面各具优劣。
| 技术 | 兼容性 | 易用性 | 检测难度 |
| ------------------ | --- | --- | ---- |
| AppInit\_DLLs | 低 | 中 | 中 |
| SetWindowsHookEx | 高 | 高 | 低 |
| IFEO 键 | 中 | 中 | 中 |
| Remote Threads | 高 | 高 | 高 |
| 进程跟踪注入 | 高 | 低 | 高 |
| AppCompat Shimming | 中 | 中 | 低 |
| Kernel Driver | 高 | 低 | 中 |
---
> 原文参考:(http://lallouslab.net/2017/05/15/7-dll-injection-techniques-in-the-microsoft-windows/) 内核驱动比较有效 可以防检测
页:
[1]