我们提出了XTRIDE,一种改进的基于n-gram(参见STRIDE)的二进制类型恢复方法,专注于实用性:高度优化的吞吐量和可操作的置信度得分使其能够部署到自动化流水线中。与结构恢复领域的最先进技术相比,我们的方法在实现可比性能的同时,速度提升了70至2300倍。
位于 ./bin 中的 CLI 工具需要安装 hdf5 的 1.8.4 或更高版本的库(根据 crate 的文档)。
使用最新版本在 MacOS 上构建会失败,我们建议安装 hdf5 v1.10,例如使用
brew install [email protected]
cargo run --release -- create-dataset -i ../new_dataset/ -o ./
cargo run --release -- build-vocab ./xtride_plus_train.jsonl xtride_plus.vocab -t type
bin/src/db_creation.rs 中指定)。
cargo run --release -- build-all-dbs -t type -k 5 --flanking -o xtride_plus_dbs/ ./xtride_plus_train.jsonl xtride_plus.vocab
cargo run --release -- evaluate --threshold-sweep ./xtride_plus_test.jsonl xtride_plus.vocab ./out_xtride.json --flanking --db-dir ./xtride_plus_dbs
使用 recover 对单个反编译函数列表(纯文本输入)进行最佳努力类型恢复。
var*、param*、stack*、iVar*、sub_*)cargo run --release -- recover ./decompiled_function.c \
--vocab ./xtride_plus.vocab \
--db-dir ./xtride_plus_dbs \
--flanking \
--top-k 5 \
--fn-vocab <path>: 显式函数词表路径(如果省略,recover 会尝试 <vocab_stem>.fn.vocab)--strip: 启用传统的完整剥离模式(DIRT / STRIDE 向后兼容,请谨慎使用)--threshold <float>: 隐藏低于分数阈值的预测(1.0 表示禁用过滤)--top-k <int>: 每个符号显示的候选数量(默认:5)输出的分数是来自模型管道的置信度风格排名分数。 它们对于相对排序和过滤很有用,但不是校准的概率。 摘要报告了检测到的符号、过滤掉的符号以及没有模型输出的符号。
我们在 ./data 目录中包含了预处理后的数据,用于复现论文中描述的 $XTRIDE_{PLUS}$ 模型。
JSONL 文件可以直接用于提取词表和训练模型(从第3步开始,在 bin/src/db_creation.rs 中选择 16 数据库配置)。
虽然训练数据集包含了来自各种二进制文件的大量数据,但我们要重申,基于 n-gram 的方法的泛化能力是有限的。
我们始终建议根据你计划使用模型的地方,向数据集中添加特定领域的样本。
提供的数据集包含的样本是:
尝试对偏离此分布的样本进行推理,很可能导致不可用的预测。
关于如何提取新数据集的数据或在 DIRT 数据集上进行重新训练和评估的更多信息,请参见数据集准备文档。
retyper 模块展示了 XTRIDE 类型恢复系统与反编译器深度集成的参考实现。
该功能通过功能标志控制,可以使用 cargo build --features retyper 激活。
我们使用了 Binarly 的 BIAS 框架进行程序分析,该框架作为 VulHunt 的一部分发布。该框架具有表现力的类型系统,与用于将内部恢复的表示提升为伪 C 的 Ghidra 反编译器后端 fork 无缝集成。 我们扩展了这个 fork 及其 ffi,增加了允许直接在反编译器中修改变量类型的接口。 这允许在反编译器上下文中直接应用推断出的类型,包括字段类型等信息的传播。
| 之前: | 之后: |
![]() | ![]() |
更多信息和示例请查看我们的博客文章。
一般来说,任何反编译器集成都需要一个从基于文本的预测(来自词表)到工具特定表示的转换层。
DIRT 中使用的格式具有足够的表达能力来实现这一点,但需要递归解析类型(例如结构体)并手动计算偏移量和大小(所有必要信息都在,包括填充注释)。
对于 retyper 模块,词表中的类型(因此也是训练数据集中的类型)需要是序列化的 BIAS 类型。
我们目前不打算发布完整的数据提取和数据集创建流水线,因此将其视为参考实现,而非完整的 PoC。
如果您使用了本仓库和相应论文提供的代码、技术或结果,请按以下方式引用我们的工作:
@inproceedings{Seidel_Practical_Type_Inference_2026,
author = {Seidel, Lukas and Thomas, Sam L. and Rieck, Konrad},
title = {{Practical Type Inference: High-Throughput Recovery of Real-World Structures and Function Signatures}},
series = {The 16th ACM Conference on Data and Application Security and Privacy},
month = jun,
year = {2026},
url = {https://arxiv.org/abs/2603.08225},
}