
hexcymatix 是一个探索性研究项目,大致设想为一种
二进制逆向工程工具,用于从二进制文件中重复的字节模式中
提取结构信息。
这个构想从未真正成为可用的工具,但它仍然能从日常数据中 产生一些令人着迷的自对称性可视化表现。
有时候在逆向工程中,你会拥有某份数据的一个样本——一张表、一个 压缩数据块、一个协议载荷——并希望在文件的其他位置找到类似的 数据,而此时还无法编写出描述它的规则或解析器。你想要的 是无需规格说明的相似性。
hexcymatix 假定重复的字节串意味着结构或关联,
即使我们不知道那种结构是什么。通过将重复可视化,我们
无需确切知道自己在寻找什么,就能浮现出相关的数据。
例如,下面的《思想录》(Pensées)片段包含几个自我重复的序列
(' incapable of '、' which he '、'ing either ')——hexcymatix 将文件铺展
成两行,并连接所有长度至少为 8 字节的重复字节序列:

浮现出来的连接随后暗示了数据中潜在的结构与关联。
对日常二进制文件重复这一过程,就会开始自动提取出 意料之外的自相似性、连接和结构。例如,以下是标准 Windows 安装中的错误查找可执行文件:

这一过程中最重要的部分是在片段连接之间添加弧线, 让输出看起来更酷:

在完全偏离初衷之后,我们可以尝试对数据进行 各种不同的可视化表现。例如,将同样的文件和连接渲染到 圆周上,效果如下:

python hexcymatix.py [options] file [file ...]
# 可执行文件的圆形可视化
python hexcymatix.py --circular guidgen.exe
# 线性可视化,仅保留前 500 个片段
python hexcymatix.py --linear --top 500 guidgen.exe
# 批量处理,4K 输出
python hexcymatix.py --circular --resolution 4k *.exe






























pip install pycairo numpy pillow
pycairo 构建时依赖于原生的 cairo 库,因此必须先安装该库——
在 macOS 上执行 brew install cairo pkg-config,或在 Debian/Ubuntu 上执行
apt install libcairo2-dev pkg-config。
该工具最初是作为逆向工程辅助手段而开发的:给定某份数据的 一个已知样本——一个结构体、一个压缩数据块、一个协议载荷——即可 在文件中找到它的其他实例,而无需更多逆向工程。当时的期望是, 与已知样本共享大量重复子序列的区域会聚集成值得进一步调查的候选对象。
最终,这个想法似乎站不住脚,用例也过于狭窄,因此这项技术 从未被发展成有用的研究所需要的无缝插件。将这项工作分享于此, 是为了让它不至于湮灭于无形,也希望其他人或许能在此基础上 继续发展。
本项目最初由人工使用 C# 编写。后来借助 LLM 移植到了 Python, 几乎没有经过监督或审查。
hexcymatix 是 Christopher Domas(@xoreaxeaxeax)的一项研究工作。

| 选项 | 说明 |
|---|
--circular | 圆形布局:字节偏移映射为环上的角度(默认) |
--linear | 平行条布局:两条水平条带,由交叉四边形连接 |
--top N [N ...] | 渲染前仅保留 N 个最长的片段;可传入多个值,每个截断值渲染一张图像 |
--no-arcs | 仅绘制弦,跳过弧线(速度大大提升,视觉噪声更少) |
--resolution RES | 输出分辨率,格式为 WxH 或预设值:480p、720p、1080p、1440p、4k、uwfhd(2560x1080)、suwfhd(3840x1080)(默认:1080p) |
--ultra | --resolution 4000x4000 的简写 |
--circle-fill F | 圆形占画布直径的比例(默认:0.25;超宽预设为 0.50) |
--jpg | 同时为每张 PNG 输出一张 80% 质量的 JPEG |
--output-dir DIR | 输出文件目录(默认:output) |