
बायनरीज़ के लिए N-ग्राम-आधारित प्रकार पुनर्प्राप्ति उपकरण, डीकंपाइल्ड कोड से संरचनाओं और फ़ंक्शन हस्ताक्षरों को उच्च थ्रूपुट और स्वचालित पाइपलाइनों के लिए कार्रवाई योग्य आत्मविश्वास स्कोर के साथ पुनर्प्राप्त करता है।
हम XTRIDE प्रस्तुत करते हैं, जो बाइनरी के लिए प्रकार पुनर्प्राप्ति पर एक बेहतर n-gram-आधारित (cf. 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 से सक्रिय किया जा सकता है।
हम प्रोग्राम विश्लेषण के लिए Binarly के BIAS फ्रेमवर्क का उपयोग करते हैं जो VulHunt के भाग के रूप में प्रकाशित किया गया था। फ्रेमवर्क में एक अभिव्यंजक टाइपिंग सिस्टम है जो Ghidra डीकंपाइलर बैकएंड के फोर्क के साथ सहजता से एकीकृत होता है जिसका उपयोग आंतरिक रूप से पुनर्प्राप्त अभ्यावेदन को स्यूडो C में उठाने के लिए किया जाता है। हमने इस फोर्क और इसके 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},
}