KingKDot/Exorcism

GitHub: KingKDot/Exorcism

Exorcism 是一款开源的运行时 Windows 批处理反混淆器,通过挂钩 cmd.exe 实现对混淆批处理命令的实时拦截、调试与记录。

Stars: 44 | Forks: 5

# Exorcism - 运行时 Windows 批处理反混淆器 “当有小恶魔拿着 .bat 加密器到处乱跑时,你需要一场驱魔。” ![许可证](https://img.shields.io/badge/license-Apache%202.0-blue.svg) ![平台](https://img.shields.io/badge/platform-Windows-lightgreen.svg) ![语言](https://img.shields.io/badge/language-Rust%2FPython-orange.svg) **Exorcism** 是一个运行时 Windows 批处理反混淆器/调试器,它使用 DLL 注入和函数挂钩(hooking)技术,在 `cmd.exe` 处理批处理命令时,对其进行暂停、编辑、跳过和记录。 ## 🎯 什么是 Exorcism? Exorcism 在运行时挂钩到 Windows 命令处理器(`cmd.exe`),以便在批处理命令执行之前拦截并记录它们。与那些容易被混淆技术欺骗的静态分析工具不同,Exorcism 能够捕获 Windows 命令解释器在处理过程中的实际命令。 ### 主要特性 - **运行时分析**:在实际处理命令时对其进行捕获,绕过大多数混淆技术 - **交互式调试**:在执行前暂停、继续、跳过、编辑或自动处理重复的命令 - **DLL 注入**:使用 Rust 的 `detour` crate 实现可靠的函数挂钩 - **实时监控**:以 JSON 输出格式实时记录命令 - **安全的内存访问**:稳健的指针验证和内存安全检查 - **跨架构**:同时支持 x86 和 x64 进程 ## 🏗️ 架构 该工具由两个主要组件组成: 1. **Hook DLL(`cmdtest.dll`)**:一个 Rust 编写的 DLL,用于挂钩 `cmd.exe` 中的 `FindFixAndRun` 函数 2. **Python 控制器(`main.py`)**:一个 Python 脚本,负责处理 DLL 注入和日志监控 ### 工作原理 1. Python 控制器启动一个新的 `cmd.exe` 进程 2. 使用 DLL 注入技术将 Hook DLL 注入到 `cmd.exe` 进程中 3. 该 DLL 使用 Rust 的 `detour` crate 挂钩内部的 `FindFixAndRun` 函数 4. 每条命令在执行前都会到达由 Python 控制的断点 5. Python 监控器允许你继续、跳过、编辑或自动处理重复的命令 6. 决策和命令活动将被记录到 `cmd_hook.json` 中 ## 📋 前置条件 - Windows 10/11 (x64) - Rust 稳定版工具链 - Python 3.7 或更高版本 - 管理员权限(DLL 注入所需) ## 🚀 安装说明 ### 1. 克隆仓库 ``` git clone https://github.com/YourUsername/Exorcism.git cd Exorcism ``` ### 2. 构建 Hook DLL 1. 构建并暂存 Rust Hook DLL: build_cmdtest.bat 2. 暂存的 DLL 将位于 `bin\cmdtest.dll`,这是 `main.py` 使用的默认 Hook DLL 路径。 ### 3. 安装 Python 依赖 ``` pip install -r requirements.txt ``` ## 📖 用法 ### 基本用法 1. **以管理员身份运行**(DLL 注入所需): # 以管理员身份打开命令提示符 python main.py 2. **出现提示时,输入 DLL 路径**: 输入 Hook DLL 的完整路径 [C:\path\to\Exorcism\bin\cmdtest.dll]: 3. **在弹出的受监控 cmd.exe 窗口中执行你的批处理文件** 4. **当每条命令触发断点时,选择调试器操作**: - `c`:继续一次 - `s`:跳过一次 - `e`:在命令行运行前对其进行编辑 - `a`:永远继续执行该特定命令 - `k`:永远跳过该特定命令 - `i`:现在继续,并在未来出现重复时静默继续 ### 输入示例 ``` echo Hello World set VAR=secret_value if exist file.txt del file.txt cls ``` ### 输出示例 该工具以 JSON 格式将命令记录到 `cmd_hook.json`: ``` [ { "event_type": "hook_status", "message": "FindFixAndRun hook initialized successfully" }, { "arguments": " Hello World", "break_id": 1, "command": "echo", "command_type": 0, "event_type": "debug_break", "message": "Paused before command execution" }, { "arguments": " Hello World", "break_id": 1, "command": "echo", "event_type": "debug_decision", "message": "continue" }, { "arguments": " Hello World", "command": "echo", "command_type": 0, "event_type": "command_execution" }, { "arguments": " VAR=secret_value", "command": "set", "command_type": 0, "event_type": "command_execution" }, { "command": "cls", "command_type": 0, "event_type": "command_execution" }, { "event_type": "hook_status", "message": "FindFixAndRun hook being removed" } ] ``` ## 🔧 配置 ### Hook DLL 配置 `main.py` 会在启动受监控的 shell 之前,从匹配的 `cmd.exe` 公共符号中解析出 `FindFixAndRun` 的 RVA,然后通过 `EXORCISM_FIND_FIX_AND_RUN_RVA` 将其传递给 Hook DLL。匹配的 PDB 缓存在本地的 `.symbols/` 目录下。 该 Hook DLL 还保留了一个备用 RVA: ``` const DEFAULT_FIND_FIX_AND_RUN_RVA: usize = 0x116B0; ``` **注意**:此 RVA 特定于某些版本的 `cmd.exe`。如果挂钩失败,你可能需要: 1. 检查在 `main.py` 启动时,符号解析是否记录了最新的 `FindFixAndRun` RVA。 2. 如果符号不可用,请使用调试器(x64dbg、IDA Pro)查找 `FindFixAndRun` 的当前 RVA。 3. 在运行 `main.py` 之前设置 `EXORCISM_FIND_FIX_AND_RUN_RVA=0x...`,或者更新 `cmdtest/src/lib.rs` 中的备用 RVA 并使用 `build_cmdtest.bat` 重新构建。 ### Python 监控器配置 Python 脚本会自动执行以下操作: - 清理之前的日志文件 - 清理 `.exorcism_debug/` 中之前的调试器响应文件 - 通过 DLL 注入启动 `cmd.exe` - 实时监控 JSON 日志文件 - 将调试器的决策写回 Hook DLL - 提供丰富的终端界面 ## 🛡️ 安全注意事项 ### 对于分析师 - **在分析恶意样本时,请务必在隔离环境中使用** - 考虑使用易于还原的专用分析虚拟机 - 除了记录命令外,还应监控网络连接和文件系统更改 - 请注意,某些高级恶意软件可能会检测到 Hook 并改变其行为 ### 对于开发者 - 目前的实现使用了硬编码的 RVA,这可能会随着 Windows 更新而失效 - 考虑实现 IAT(Import Address Table,导入地址表)挂钩以获得更好的兼容性 - 为命令参数和重定向添加额外的验证 - 实现对批处理文件生成的子进程的进程监控 ## 📝 许可证 本项目基于 Apache License 2.0 授权 - 有关详细信息,请参阅 [LICENSE](LICENSE) 文件。 ## 🙏 致谢 - Rust 的 `detour` crate 提供的函数挂钩功能 - Windows XP 源代码泄露,为 cmd.exe 内部结构提供了深刻的见解 - 安全研究社区的启发与指导 ## ⚖️ 免责声明 本工具旨在用于: - 安全研究 - 在受控环境中进行恶意软件分析 - 教育目的 - 合法的批处理文件调试 **用户需自行确保符合适用的法律法规。对于滥用本软件所造成的后果,作者不承担任何责任。** **切记:批处理文件将会真实执行!请采取适当的安全措施!**
标签:DAST, DNS 反向解析, Python, Rust, 代码反混淆, 可视化界面, 恶意软件分析, 无后门, 端点可见性, 网络流量审计, 逆向工具