
바이너리용 N-gram 기반 타입 복구 도구로, 디컴파일된 코드에서 구조체와 함수 시그니처를 높은 처리량과 자동화 파이프라인에 활용 가능한 신뢰도 점수로 복구합니다.
우리는 XTRIDE를 제시합니다. 이는 바이너리 타입 복구를 위한 개선된 n-gram 기반(참고: STRIDE) 접근법으로, 실용성에 초점을 맞추고 있습니다:
최적화된 높은 처리량과 실행 가능한 신뢰도 점수를 통해 자동화 파이프라인에 배포할 수 있습니다.
구조체 복구 분야의 최신 기술과 비교할 때, 우리의 방법은 70배에서 2300배 더 빠르면서도 유사한 성능을 달성합니다.
./bin 디렉토리의 CLI 도구는 hdf5용 1.8.4 이상 버전 라이브러리가 설치되어 있어야 합니다(크레이트 문서에 따름).
최신 버전으로 빌드할 경우 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를 역컴파일러에서 변수 타입을 직접 수정할 수 있는 인터페이스로 확장했습니다. 이를 통해 역컴파일러 컨텍스트 내에서 추론된 타입을 직접 적용할 수 있으며, 필드 타입 전파 등도 가능합니다.
| Before: | After: |
![]() | ![]() |
자세한 정보와 예제는 블로그 게시물을 참조하세요.
일반적으로 역컴파일러 통합에는 텍스트 기반 예측(어휘 사전에서)을 도구별 표현으로 변환하는 계층이 필요합니다.
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},
}