russlank/BinXray
GitHub: russlank/BinXray
一款通过字节对散点图和 3D 三元组可视化快速识别二进制文件结构特征的交互式分析工具
Stars: 4 | Forks: 2
# Bin X-ray
[](https://github.com/russlank/BinXray/releases/latest)
[](https://github.com/russlank/BinXray/releases/latest)
[](https://github.com/russlank/BinXray/actions/workflows/release-packaging.yml)
[](LICENSE)
[](doc/index.md)
[](https://buymeacoffee.com/russlank)
**Bin X-ray** 是原版 **[BinView](https://github.com/russlank/BinView)** 工具的 C++ 继任者,专注于通过 ImGui 桌面 UI 进行快速交互式二进制检查。
该工具的核心是渲染一个 **字节对散点图** —— 一个 256×256 的矩阵,其中每个单元格 `(x, y)` 表示文件中字节值 `x` 紧接着字节值 `y` 出现的频率。这种指纹可以一眼揭示结构、重复模式、压缩和熵。在窗口模式下,该矩阵变为一个 **滑动字节对图**,当你通过位图带状概览在文件中拖动时,它会实时更新,让你观察二进制文件中结构模式的转变。
一个配套的 **3D 字节三元组散点图** 将分析扩展到三维:每三个连续的字节成为 256³ 立方体中的一个点,揭示了在 2D 矩阵中不可见的高阶结构模式。
## 截图

## 视频 / 演示
[](https://www.youtube.com/watch?v=EDPa4owmucA)
## Bin X-ray 的优势
- **发现未知二进制文件中的结构**:字节转换指纹使重复记录、分隔符、填充和格式转换迅速可见。
- **查找分段边界和重复布局**:使用带状条进行拖动,观察不同区域重复出现的视觉特征。
- **对比随机与有组织的区域**:压缩/加密部分通常看起来像噪声,而表/头/文本区域往往形成更强的结构。
- **从异常跳转到精确偏移量**:悬停在转换处,获取匹配的偏移量,直接跳转到十六进制视图,并在无需切换上下文的情况下继续调查。
- **探索高阶模式**:当成对转换不足以分析时,3D 三元组模式有助于揭示更强的语法/编码信号。
## 最适合的人群
- 处理未知或专有文件格式的逆向工程师。
- 扫描大型二进制大对象以查找行为变化的固件和嵌入式分析师。
- 快速分类可疑部分的安全和恶意软件分析师。
- 调查二进制日志、保存文件、数据包捕获或自定义存储格式的底层开发人员。
## 典型工作流程
1. 打开文件并拖动带状条以定位视觉上不同的区域。
2. 使用 2D 转换视图识别有趣的模式和边界。
3. 悬停在转换处以收集确切的偏移量并立即跳转到十六进制视图。
4. 当 2D 模式模棱两可时,切换到 3D 三元组视图。
5. 在视觉和字节级检查之间迭代,直到结构被映射出来。
## 功能
### 2D 转换分析
- 兼容旧版的字节对散点图引擎 (`P[256][256]`),具有 **Scale**、**Normalize**、**Full View** 和 **Block Size** 控件。
- **滑动字节对图**:拖动位图带状条以滑动分析窗口,并观看散点图实时更新。
- **热力图颜色模式**:在灰度和蓝→青→绿→黄→红渐变之间切换,以获得更好的密度感知。
- **转换查找**:悬停在散点图上以选择一个字节对,在可滚动的地址列表中查看所有匹配的偏移量,并直接导航到十六进制视图中的每个命中点。
- **吸附到数据**:查找十字准线自动吸附到可配置切比雪夫半径内最近的非空单元格。
### 3D 三元组散点图
- 交互式 256³ 体素散点图,通过正交 ImDrawList 投影渲染,带有线框立方体和轴标签。
- **鼠标拖动旋转**(偏航/俯仰)和 **双击重置**。
- **自动旋转**,具有可调速度(0.05–5.0 度/帧)和仰角(−89° 至 89°)。
- **点不透明度滑块**(5 %–100 %),用于揭示密集簇而不隐藏阴影点。
- **画布背景预设**:黑色(默认)、白色或带有 RGB 颜色选择器的自定义。
- **画布裁剪** 防止线框边缘、标签和点溢出到相邻面板中。
- 与 2D 图共享的热力图/灰度颜色切换。
### 导航与检查
- 用于大型二进制文件的异步 `Open File` 流程。
- **位图带状导航**:单击任意像素以跳转到该字节偏移量;红色指针三角形和坐标标签标记当前位置。拖动以拖动分析范围。
- **带状自适应缩放**:当带状宽度超过面板空间时进行分数像素缩放。
- 虚拟化十六进制视图 (ImGuiListClipper),具有查找高亮和编程式滚动支持。
- **ASCII 列高亮**:每字符着色与十六进制字节高亮状态匹配。
- 所选偏移量的字节检查器面板。
- 三列工作区:左侧控件 · 中间图表 + 十六进制视图 · 右侧位图带状条。
### 性能
- 三元组计算中的 **脏索引跟踪**:重新计算之间仅清零已写入的体素,避免完整的 64 MB 清除。
- **3D 模式门控三元组重新计算**:在 2D 模式下跳过三元组累积,从而在仅可见转换矩阵时降低拖动成本。
- **静态热力图 LUT**:256 条目颜色查找表构建一次,并由 2D 和 3D 渲染共享。
- **优化的投影数学**:除法折叠到比例因子中;2D 矩阵循环中的位移行/列索引。
- **事件驱动的空闲渲染**:当没有动画或加载时,主循环通过 `MsgWaitForMultipleObjects` 休眠,将 CPU/GPU 使用率降至接近零。
### 测试
- 七个自动化测试套件:`ByteFormatterTests`、`BinaryDocumentTests`、`TransitionMatrixTests`、`TransitionSeekerTests`、`TrigramPlotTests`、`CrosshairCoordsTests`、`UILayoutLogicTests`。
- 覆盖的边缘情况:空/丢失文件、单字节、子范围、边界钳制、maxResults 上限、自转换、反转范围、重复三元组累积、mapIntensity 模式、十字准线坐标语义、opacity-alpha 验证。
## 产品方向(高价值后续步骤)
优先级顺序:
1. **书签和注释**,用于持久化调查会话。
2. **熵 + 直方图区域条**,用于显式的结构与随机信号。
3. **比较模式**,用于文件/范围差异和变体分类。
4. **结构化解码器/模板**,用于从视觉分析转向字段级解释。
5. **周期性检测器**,用于固定大小的记录、成帧和重复的协议/数据块。
有关扩展指导,请参阅 [用例与路线图](doc/use-cases-and-roadmap.md)。
## 需求
- Windows 10/11
- Visual Studio 2022 (v143 toolset)
- Windows SDK 10.0+
- Python 3 (用于版本辅助脚本)
## 快速开始
1. 在 Visual Studio 中打开 `src/BinXray.slnx`。
2. 选择 `Debug|x64`。
3. 构建解决方案。
4. 运行:
- app: `src\\x64\\Debug\\BinXray.exe`
- tests: `src\\x64\\Debug\\BinXray.Tests.exe`
或者在 VS Code 中使用任务:
- `Build BinXray (x64 Debug)`
- `Run BinXray (x64 Debug)`
- `Run Tests (x64 Debug)`
## 仓库布局
- `src/BinXray` 应用程序代码
- `src/BinXray.Tests` 测试运行器和测试
- `src/vendor/imgui` vendored Dear ImGui
- `.vscode` 共享构建/运行/调试配置
- `scripts` 本地构建/发布辅助脚本
- `packaging` 安装程序脚手架
- `doc` 项目文档
标签:C++, DAST, DNS 反向解析, Hex查看器, ImGui, Trigram图, Windows, 二进制分析, 二进制指纹, 云安全监控, 云安全运维, 云资产清单, 可视化工具, 字节对散点图, 恶意软件分析, 数据擦除, 文件结构分析, 桌面应用, 熵分析, 网络信息收集, 逆向工程, 静态分析