russlank/BinXray

GitHub: russlank/BinXray

一款通过字节对散点图和 3D 三元组可视化快速识别二进制文件结构特征的交互式分析工具

Stars: 4 | Forks: 2

# Bin X-ray [![Latest Release](https://img.shields.io/github/v/release/russlank/BinXray?display_name=tag&sort=semver)](https://github.com/russlank/BinXray/releases/latest) [![Release Date](https://img.shields.io/github/release-date/russlank/BinXray)](https://github.com/russlank/BinXray/releases/latest) [![Release Packaging](https://img.shields.io/github/actions/workflow/status/russlank/BinXray/release-packaging.yml?branch=main&label=release%20packaging)](https://github.com/russlank/BinXray/actions/workflows/release-packaging.yml) [![License](https://img.shields.io/github/license/russlank/BinXray)](LICENSE) [![Documentation](https://img.shields.io/badge/docs-index-blue)](doc/index.md) [![Buy Me A Coffee](https://img.shields.io/badge/Buy%20Me%20A%20Coffee-%23FFDD00.svg?&style=flat&logo=buy-me-a-coffee&logoColor=black)](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 矩阵中不可见的高阶结构模式。 ## 截图 ![Bin X-Ray – 3D trigram scatter plot](https://static.pigsec.cn/wp-content/uploads/repos/2026/04/3bdc2f5e97082314.png) ## 视频 / 演示 [![Watch the Demo video](https://raw.githubusercontent.com/russlank/BinXray/main/doc/images/screenshot-07.png)](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, 二进制分析, 二进制指纹, 云安全监控, 云安全运维, 云资产清单, 可视化工具, 字节对散点图, 恶意软件分析, 数据擦除, 文件结构分析, 桌面应用, 熵分析, 网络信息收集, 逆向工程, 静态分析