ufukulaserdem/HijackHunter
GitHub: ufukulaserdem/HijackHunter
HijackHunter是一款用于检测隐蔽进程注入技术的内存扫描工具。
Stars: 0 | Forks: 0
# HijackHunter - 控制流劫持检测PoC
本项目是一个技术性的**Proof of Concept (PoC**),旨在分析并检测高级(隐蔽)进程注入方法,如**ThreadlessInject**和**Data Pointer Hijacking(通过数据指针的控制流劫持)**。
## 1. 分析方法
### A. ThreadlessInject(内联挂钩)
传统的注入方法会在目标进程上创建一个新的线程(`CreateRemoteThread`),这个操作很容易被安全解决方案(EDR、Sysmon事件ID 8等)捕获。**ThreadlessInject**方法则不同,它会找到目标内存中已经频繁运行的函数,使用`VirtualProtect`将这块内存从`RX`改为`RWX`,并在函数的起始位置写入一个`JMP`(跳转)指令(内联挂钩)。当当前运行的线程调用这个函数时,会执行恶意代码(shellcode)。由于没有创建新的线程,因此可以绕过传统的检测机制。
### B. 通过数据指针的控制流劫持(Legacyy)
ThreadlessInject的弱点在于它在代码段(`.text`)中进行的内存保护更改(`VirtualProtect`)。EDR可以捕获这个API调用。**Data Pointers**方法通过利用`.data`或`.rdata`区域(已经是可读/写`RW`)来克服这个问题。例如,可以将像`combase.dll!__guard_check_icall_fptr`这样的已知函数指针直接指向shellcode区域(`WriteProcessMemory`)。由于不需要更改内存保护权限,因此这是一个更加隐蔽的方法。
## 2. 检测方法(PoC)
本项目中的检测机制分为静态和动态(运行时)两种。
### 静态检测(YARA)
`static_rules/detections.yar`目录下的规则:
- 搜索ThreadlessInject工具留下的字符串和IAT(导入地址表)模式。
- 静态检测执行数据指针劫持的BOF(信标对象文件)结构和特定的API序列(例如:`WriteProcessMemory`与`__guard_check_icall_fptr`的关系)。
### 运行时/内存检测(Rust扫描器)
`src/main.rs`中编写的内存扫描器,通过Windows API(`VirtualQueryEx`、`ReadProcessMemory`)扫描目标进程。
**工作原理**
1. **未绑定内存检测:** 查找系统中的文件未绑定的(私有)和可执行(`RX` / `RWX`)内存区域,标记潜在的shellcode地址。
2. **数据指针劫持检测:** 搜索目标进程已加载模块的写可读(`.data`)数据区域。检查这些指针是否指向上面标记的**未绑定shellcode区域**。如果指针指向DLL边界之外(shellcode),则发出警报。
3. **Threadless Hook检测:** 搜索目标进程的可执行(`RX`)区域。计算`JMP`(跳转)或`CALL`(调用)指令的目标地址。如果跳转到的地址是一个**未绑定shellcode区域**,则检测到ThreadlessInject的使用。
## 3. 安装和用法
### 编译
由于该工具使用Windows API,因此需要在Windows上或通过交叉编译在Linux上编译。
```
# 通过 Linux 编译 Windows
rustup target add x86_64-pc-windows-gnu
cargo build --release --target x86_64-pc-windows-gnu
```
### 使用
```
# 在 Windows 环境中通过 CMD 或 PowerShell 运行
.\hijackhunter.exe
```
工具将扫描内存并立即将异常情况显示在屏幕上。
标签:可视化界面