本稿では、バイナリの型復元に対する改善版 n-gram ベースのアプローチ(STRIDE を参照)である XTRIDE を紹介します。これは実用性に重点を置いており、
高度に最適化されたスループットと実用的な信頼スコアにより、自動化パイプラインへの展開が可能です。
構造体復元の最新手法と比較すると、本手法は同等の性能を達成しつつ、70〜2300倍高速です。
./bin 内のCLIツールは、hdf5 の library of version 1.8.4 or later がインストールされている必要があります(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)提示されるスコアは、モデルパイプラインによる信頼度スタイルのランキングスコアです。 相対的なランキングやフィルタリングには有用ですが、較正された確率ではありません。 サマリーには、検出されたシンボル、フィルタリングされたシンボル、モデル出力のないシンボルが報告されます。
論文で説明した $XTRIDE_{PLUS}$ モデルを再現するための前処理済みデータを ./data ディレクトリに含めています。
JSONLファイルは、そのままボキャブラリの抽出とモデルの学習に使用できます(手順3以降。bin/src/db_creation.rs の16-db構成を選択してください)。
学習データセットには多種多様なバイナリからの大量のデータが含まれていますが、n-gramベースのアプローチの汎化性には限界があることを改めて強調します。
モデルを適用予定の領域に応じて、ドメイン固有のサンプルをデータセットに追加することを常に推奨します。
提供されるデータセットには、以下のサンプルが含まれています。
この分布から外れたサンプルに対して推論を実行しようとすると、ほぼ間違いなく使用できない予測になります。
新しいデータセット用のデータ抽出方法や、DIRTデータセットでの再学習・評価方法の詳細は、データセット準備ドキュメント に含まれています。
retyper モジュールは、XTRIDE型復元システムと逆コンパイラとの深い統合のためのリファレンス実装を示しています。
この機能はフィーチャーフラグの背後にあり、cargo build --features retyper で有効化できます。
プログラム解析には、VulHunt の一部として公開された Binarly の BIAS フレームワークを利用しています。このフレームワークは表現力豊かな型システムを備えており、内部で復元された表現を疑似Cにリフトするために使用される Ghidra 逆コンパイラバックエンドのフォークとシームレスに統合されます。 このフォークとその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},
}