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 ``` 工具将扫描内存并立即将异常情况显示在屏幕上。
标签:可视化界面