harryc295/Binary-slammer
GitHub: harryc295/Binary-slammer
BinaryHammer 是一款 Windows 平台上的轻量级 PE 逆向分析工具,集成了反汇编、伪代码生成、威胁评分和 YARA 扫描等一站式恶意软件分析功能。
Stars: 0 | Forks: 0
# BinaryHammer
一款适用于 Windows 的快速、轻量级 PE 逆向工程工具——专为从初学者到资深分析师等所有希望了解二进制文件功能的人士而打造。



## 功能简介
加载一个 PE 二进制文件(`.exe`、`.dll`、`.sys`),即可立即获得完整的分析结果——无需配置、无需编写脚本、无需借助外部工具。
首次启动时,一份 3 页的入门指南将向您介绍每个面板及其使用方法。您可以随时通过 **Help → About / Help** 重新打开该指南。
### 分析与概览
- **Threat Overview** — 0–100 的威胁评分,并附带颜色标识的评估结果(Likely Clean / Suspicious / Likely Malicious / Highly Suspicious)。提供关于二进制文件功能的通俗语言摘要、关键发现列表,以及一个“这是否正常?”表格,用于将各项属性与预期范围进行比较。导入行为类别徽章可直观展示存在的功能组。
- **Security Analysis** — 基于特征码检测加壳器、保护器、反调试技巧及可疑模式,并为每项发现提供描述。
- **YARA** — 对加载的二进制文件运行自定义 YARA 规则。在 `vcpkg.json` 中添加 `yara` 即可启用(CMake 会通过 `HAVE_YARA` 自动检测)。
### 代码分析
- **Disassembly** — 通过 Zydis 支持 x86/x64 反汇编,呈现为 4 列表格(地址 / 字节 / 助记符 / 操作数)。点击任意调用或跳转即可导航至目标地址。切换 **Explain mode** 以获取每条指令的通俗语言注释(例如 `xor eax, eax` → "Zero out eax")。支持添加逐指令注释,并在不同会话间保留。
- **Pseudo Code** — 进程内 lifter 将反汇编代码转换为带有语法高亮、可读性强的类 C 代码。无需外部反编译器。
- **LLVM IR** — 可选的 LLVM IR 提取面板。如果通过 vcpkg 找到了 LLVM,则会自动启用。
- **Call Graph** — 所选函数的可视化调用图。
- **Function Explorer** — 入口点 + 所有命名的导出函数 + 通过序言发现的函数。点击即可反汇编。
### PE 结构
- **Imports** — 提供两种视图:**By DLL**(树状结构)和 **By Category**(彩色标签页,将 API 分组为 Networking / File I/O / Process Injection / Anti-Analysis / Persistence / Crypto / Process Mgmt / Memory / System Info / UI)。鼠标悬停可查看各个 API 的描述及恶意软件上下文。
- **Exports** — 序号、RVA、名称及转发器检测。
- **Sections** — 带熵值颜色标识的表格。点击任意行可展开描述卡片,说明该节的用途、熵值解释及哈希值。高亮显示 W+X(可写 + 可执行)节。
- **PE Headers** — 可折叠的 DOS / File / Optional header 字段分解,带有工具提示解释每个字段及其与恶意软件的相关性。
- **Resources** — 带有类型名称和计数的资源目录树。
### 实用工具
- **Strings** — 支持 ASCII 和 UTF-16LE 提取及实时过滤。双击可跳转至 Hex View 中的偏移量。
- **Hex View** — 全文件十六进制转储,按节着色,支持延迟渲染(可处理任意大小的文件)。可从字符串或反汇编结果直接导航。
- **Search** — 跨字符串、导入表和函数名进行搜索。
- **Bookmarks** — 保存并命名任意 RVA,一键快速跳回。
- **Console** — 内置命令行,支持 `.info`、`.strings`、`.goto ` 和 `.help`。
## 威胁评分
BinaryHammer 的威胁评分采用了上下文感知启发式算法——当指标具有共同根本原因时,不会被独立计算。
| 检测内容 | 分值 |
|---|---|
| 极高熵值节 (>7.0) | +20(仅计一次,不按节累加) |
| 检测到加壳器 / 安装程序 | +20(设有限额,不按特征码累加) |
| W+X 节(可执行 + 可写) | +18 |
| 完整注入三要素 (VirtualAllocEx + WriteProcessMemory + CreateRemoteThread) | +45 |
| 进程镂空模式 | +38 |
| 键盘记录器模式 (SetWindowsHookEx + GetAsyncKeyState) | +35 |
| C2/投放器模式 (网络 + 持久化,仅适用于未加壳) | +25 |
| 反调试集群(2种及以上技术) | +20 |
| 反调试 API(在加壳环境下分值降低) | 最高 +30 |
| 高置信度 IOC 字符串 (shellcode、meterpreter、mimikatz…) | 最高 +30 |
| 跨进程注入 API | 最高 +25 |
| TLS 回调 | +10 |
| PE 覆盖数据(仅适用于未加壳) | +10 |
| RT_VERSION 资源 | −8 |
| RT_MANIFEST 资源 | −5 |
| 5个及以上不同的导入 DLL | −5 |
**相关联的指标会被抑制**:当检测到加壳器时,“极少导入”、“PE 覆盖数据”、网络+持久化集群以及反调试惩罚将被减少或跳过——因为这些都是加壳带来的预期结果,而非独立的危险信号。
**评估结果**:Likely Clean (<25) · Suspicious (25–49) · Likely Malicious (50–74) · Highly Suspicious (75+)
## 构建说明
### 前置条件
- Windows 10/11
- Visual Studio 2022 (C++ Desktop workload)
- CMake 3.28+
- vcpkg(VS 2022 自带)
### 步骤
打开 VS 2022 Developer Command Prompt:
```
git clone https://github.com/harryc295/Binary-slammer.git
cd Binary-slammer
cmake -S . -B build
cmake --build build --config Release
.\build\Release\app.exe
```
vcpkg 会通过 `vcpkg.json` 自动处理所有依赖项。
### 依赖项
| 包 | 用途 | 是否必需 |
|---------|---------|----------|
| `glfw3` | 窗口 + 输入 | 是 |
| `opengl` | 渲染后端 | 是 |
| `zydis` | x86/x64 反汇编 | 是 |
| `yara` | YARA 规则扫描 | 可选 — 在 vcpkg.json 中添加即可启用 |
| `llvm` | IR 提取面板 | 可选 — 自动检测 |
ImGui (docking 分支) 已打包在 `incl/` 目录中。
## 使用说明
1. 启动 `app.exe` — 窗口将以最大化方式打开,并带有自定义应用程序图标。
2. 首次运行时会弹出一个 **3 页的入门指南**,涵盖所有面板和工作流。关闭后不会再显示;随时可通过 **Help → About / Help** 重新打开。
3. 通过 **File → Open**(或 `Ctrl+O`)加载 PE 文件。
4. **Overview** 面板会提供即时的威胁评估。
5. 使用 **Function Explorer** 导航函数——**Disassembly** 和 **Pseudo Code** 会即时更新。
6. 在 Disassembly 工具栏中切换 **Explain**,以获取通俗语言的指令注释。
7. 在 **Sections** 中点击任意节行,展开其描述卡片。
8. 切换至 **Imports → By Category**,查看按行为分组的二进制文件功能视图。
### 控制台命令
```
.info — binary summary (arch, entry point, counts)
.goto — scroll hex view to offset
.strings [min_len] — dump strings to console
.help — list all commands
```
## 面板
| 面板 | 显示内容 |
|-------|--------------|
| Overview | 威胁评分、评估结果、叙述描述、发现列表、统计表、类别徽章 |
| Function Explorer | 所有发现的函数 — 点击即可反汇编 |
| Disassembly | 地址 / 字节 / 助记符 / 操作数,带有 Explain 模式和注释 |
| Pseudo Code | 所选函数提取出的类 C 代码 |
| LLVM IR | LLVM IR 输出(需通过 vcpkg 安装 LLVM) |
| Call Graph | 所选函数的可视化调用图 |
| Imports | DLL 树状结构 + 带 API 描述的类别标签页 |
| Exports | 序号、RVA、名称、转发器信息 |
| Sections | 熵值表 + 各节描述卡片 |
| PE Headers | DOS / File / Optional header 字段分解 |
| Resources | 资源目录树 |
| Strings | 可过滤的 ASCII/UTF-16LE 表格 |
| Hex View | 全文件十六进制转储,按节着色,延迟渲染 |
| Security Analysis | 加壳器、反调试及可疑模式发现 |
| YARA | 规则扫描(可选) |
| Search | 跨字符串、导入表、函数搜索 |
| Bookmarks | 命名的 RVA 书签 |
| Console | 命令输入和会话日志 |
## 架构
```
src/
├── analysis/
│ ├── import_categories.h — 11 import behaviour categories + classification
│ ├── overview.h — threat scoring, narrative, stats computation
│ ├── asm_annotate.h — plain-English x86/x64 instruction annotations
│ └── security_analyzer.h — packer/anti-debug signature detection
├── binary/
│ ├── binary.h / .cpp — PE parser (sections, imports, exports, strings, TLS…)
│ └── disassembler.h / .cpp — Zydis wrapper + instruction metadata
├── decompiler/
│ └── lifter.h / .cpp — in-process pseudo-code lifter
├── ir/
│ └── ir_lifter.h / .cpp — LLVM IR lifter (HAVE_LLVM guard)
├── rendering/
│ ├── ui.h / .cpp — all panels, docking layout, onboarding, file loading
│ ├── app_icon.h — embedded 32×32 RGBA app icon (orange hammer)
│ ├── nav_state.h — cross-panel navigation state
│ └── file_prompt.h — Windows IFileOpenDialog wrapper
├── data/
│ ├── api_descriptions.h — Win32 API descriptions with malware context
│ └── section_flags.h — IMAGE_SCN_* flag descriptions
├── assets/
│ └── icon.ico — multi-resolution icon (16/32/48px) for the exe
├── logger.h — session log → binaryhammer.log
└── main.cpp — entry point and window loop
```
## 许可证
MIT — 详见 [LICENSE](LICENSE)。
标签:Bash脚本, C++20, DAST, PE文件, Wayback Machine, YARA, 云安全监控, 云资产可视化, 云资产清单, 反汇编, 恶意软件分析, 逆向工程, 静态分析