S12cybersecurity/NtUnhook
GitHub: S12cybersecurity/NtUnhook
通过从挂起子进程内存中提取干净的 ntdll.dll,选择性恢复被 EDR/AV hook 的系统调用 stub,实现无文件、高隐蔽性的用户态 hook 绕过。
Stars: 41 | Forks: 5
# 内存中的选择性 NTDLL Unhooking
**内存中的选择性系统调用 Unhooking** 是一种隐蔽的方法,通过从挂起的子进程中加载的 `ntdll.dll` 干净副本中,选择性地恢复真实的系统调用 stub,来绕过 `ntdll.dll` 中的用户态 hook。这种方法避免了磁盘 I/O,保持了进程的稳定性,并增强了对抗 EDR/AV hook 的隐蔽性。
## 项目
- **UnhookDetectedHooks**:此项目用于解除 AV 在 NTDLL 中检测到的 hook
- **UnhookDesiredHooks**:此项目用于解除 AV 在 NTDLL 中指定的 hook
## 概述
现代的终端检测与响应(EDR)和杀毒软件(AV)解决方案通常会在 `ntdll.dll` 中 hook 原生 API 函数,以监控系统调用。常见的绕过技术要么依赖于硬编码的系统调用号(因操作系统版本而异),要么从磁盘加载干净的 DLL(这会触发文件访问警报)。
此工具使用了一种无文件技术,该技术:
- 创建一个挂起的子进程(例如 `cmd.exe`),以便在内存中加载未被 hook 的 `ntdll.dll`。
- 从挂起的进程内存中读取干净的 `ntdll.dll` 镜像。
- 解析以 "Nt" 开头的导出函数,以定位系统调用 stub。
- 选择性地用干净的 stub 覆盖当前进程 `ntdll.dll` 中被 hook 的系统调用 stub。
- 避免触及磁盘或覆盖整个 DLL,从而保持稳定性并逃避检测。
## 功能
- **无文件 unhooking**:不涉及磁盘 I/O;所有操作均在内存中进行。
- **选择性恢复**:仅恢复被 hook 的系统调用 stub,最大程度地减少内存更改。
- **进程稳定性**:避免覆盖整个 DLL,降低崩溃或不兼容的风险。
- **隐蔽性**:绕过 EDR/AV 解决方案常用的用户态 hook 技术。
- **跨版本兼容**:通过动态读取干净的系统调用 stub,可在不同 Windows 版本上运行。
## 工作原理
1. **创建挂起进程**
以挂起模式启动子进程(例如 `cmd.exe`)。此进程会加载干净、未被 hook 的 `ntdll.dll`。
2. **读取干净的 NTDLL 镜像**
在挂起的子进程中定位 `ntdll.dll` 的基地址,并使用 `ReadProcessMemory` 将其完整镜像读取到本地缓冲区中。
3. **解析导出表**
从干净的缓冲区和当前进程的 `ntdll.dll` 中提取导出的函数名和地址。重点关注以 `"Nt"` 开头的原生 API 函数。
4. **识别系统调用 stub**
在干净的镜像中查找 23 字节的系统调用序言模式(例如 `mov r10, rcx; mov eax, imm; syscall; ret`)。
5. **重新映射被 hook 的函数**
使用匹配的相对虚拟地址(RVA),用干净的字节覆盖当前进程中被 hook 的系统调用 stub。动态调整内存保护属性以进行写入。
6. **清理**
终止挂起的进程。当前进程现已恢复真实的系统调用 stub。
## 与其他技术的比较
| 技术 | 磁盘 I/O | 稳定性 | 隐蔽性 | 环境依赖性 |
|--------------------|----------|---------------|---------------|-----------------------|
| 从磁盘加载干净的 DLL | 是 | 中等 | 低(文件操作) | 无 |
| Hell’s Gate | 否 | 中等 | 中等 | 假定 stub 完整 |
| Heaven’s Gate | 否 | 中等 | 中等 | 需要 WoW64(32 位主机) |
| Perun’s Fart | 否 | 中高 | 高 | 需要挂起的进程 |
| **内存中的选择性 NTDLL Unhooking** | 否 | 高 | 非常高 | 需要挂起的进程 |
## 用法
- 编译提供的 C++ 示例。
- 该工具会自动创建一个挂起的进程,提取干净的 stub,并修补当前的 `ntdll.dll`。
## 要求
- 带有 `ntdll.dll` 的 Windows 操作系统。
- 具备创建挂起进程和读取进程内存的访问权限。
- 兼容 x64 Windows 进程。
## 许可
此工具和代码示例仅用于教育和符合道德的红队目的。
## 作者
由 0x12 Dark Development 开发
红队 / 恶意软件开发者
欢迎提交 issue 或贡献改进。
标签:EDR绕过, 免杀技术, 内存解钩, 暴力破解检测, 端点可见性, 高交互蜜罐