arclabs561/printb
GitHub: arclabs561/printb
printb 将二进制文件按字节映射为彩色 PNG 图像,帮助用户在不了解文件格式的前提下快速识别填充、字符串、压缩区等结构特征并对比版本差异。
Stars: 0 | Forks: 0
# printb
将二进制文件渲染为彩色图像。
二进制文件具有形状特征。填充、字符串、表格、压缩区域以及补丁都会留下不同的字节纹理。`printb` 可以在不知道文件格式的情况下,快速呈现这种形状特征的概貌。

黑色代表空填充,绿色代表控制字节,蓝色代表可打印 ASCII 字符,红色代表高位字节数据,白色代表 `0xff`。
## 安装
```
cargo install --git https://github.com/arclabs561/printb
```
或者通过检出的代码进行构建:
```
cargo build --release
```
## 用法
```
printb input.bin -n 4096 -w 64 -o image.png
```
`-s` 标志用于在渲染前跳过字节,`-n` 限制读取的字节数,`-w` 设置字节网格的宽度,`-o` 设置输出路径。
## 比较二进制版本
当确切的字节内容至关重要,而十六进制转储过于狭长难以扫描时,二进制图像就非常有用。微小的字节级更改可能会变成可见的色块、条带或重复的图案。
| 修改前 | 修改后 |
| --- | --- |
|  |  |
第二张图将一个 ASCII 标记打补丁到了原本是高位字节数据的区域中。这一变化显示为一个蓝色块。同样的方法也可以帮助检查打包区域、附加的 payload、剥离的符号,或者构建版本之间的意外变化。
要重新生成示例文件和图像:
```
perl examples/make-fixtures.pl
cargo run -- target/example-before.bin -n 4096 -w 64 -o examples/image.png
cargo run -- target/example-after.bin -n 4096 -w 64 -o examples/patched.png
```
## 相关工作
- [Conti 和 Dean,二进制与数据文件的可视化逆向工程](https://vizsec.org/files/2008/Conti.pdf):将字节图、熵、字节频率、字符串和 n-grams 作为未知数据的独立于文件的视图。
- [Christopher Domas,逆向工程的未来:动态二进制可视化](https://www.youtube.com/watch?v=4bM3Gut1hIk):著名的演讲,将视觉模式识别与逆向工程实践联系起来。
- [CantorDust](https://inside.battelle.org/blog-details/battelle-publishes-open-source-binary-visualization-tool):一个用于有向图和 Hilbert 风格二进制可视化的 Ghidra 插件。
- [Aldo Cortesi 的 binvis 工作](https://corte.si/posts/visualisation/binvis/) 和 [binvis.io](https://binvis.io/):在将字节映射到正方形上时能保留局部结构的 Hilbert 曲线布局。
- [Stairwell 的 Hilbert 曲线恶意软件分析文章](https://stairwell.com/blog/hilbert-curves-visualizing-binary-files-with-color-and-patterns/) 和 [8dcc/bin-graph](https://github.com/8dcc/bin-graph):用于文件分析的二进制图像的近期实践者示例。
`printb` 比这些工具都要轻量。它从磁盘上的字节生成固定宽度的 PNG 图像,并将交互式导航、有向图绘制和 Hilbert 曲线布局留给更重量级的分析工具。
## 许可证
采用 MIT 或 UNLICENSE 双重许可。
标签:Mutation, Rust, 二进制分析, 云安全运维, 云资产清单, 可视化, 可视化界面, 网络流量审计, 逆向工程, 通知系统