
डेटालॉग-आधारित डिसअसेंबलर जो ELF/PE बाइनरी से पुनःअसेंबल करने योग्य असेंबली उत्पन्न करता है, जिसमें x86, ARM और MIPS आर्किटेक्चरों पर बाइनरी विश्लेषण और पुनर्लेखन के लिए GTIRB मध्यवर्ती प्रतिनिधित्व शामिल है।
DDisasm एक तेज़ डिसअसेंबलर है जो परिणामी असेंबली कोड को पुनः असेंबल करने के लिए पर्याप्त सटीक है। DDisasm को datalog (souffle) डिक्लेरेटिव लॉजिक प्रोग्रामिंग भाषा का उपयोग करके कार्यान्वित किया गया है, ताकि डिसअसेंबली नियमों और ह्युरिस्टिक्स को संकलित किया जा सके। डिसअसेंबलर पहले ELF/PE फ़ाइल जानकारी को पार्स करता है और संभावित निर्देशों के एक सुपरसेट को डिकोड करके datalog तथ्यों का एक प्रारंभिक सेट बनाता है। इन तथ्यों का विश्लेषण कोड स्थान, प्रतीकीकरण, और फ़ंक्शन सीमाओं की पहचान करने के लिए किया जाता है। इस विश्लेषण के परिणाम, datalog तथ्यों का एक परिष्कृत सेट, फिर बाइनरी विश्लेषण और रिवर्स इंजीनियरिंग के लिए GTIRB इंटरमीडिएट रिप्रेजेंटेशन में अनुवादित किए जाते हैं। GTIRB प्रिटी प्रिंटर का उपयोग करके GTIRB को पुनः असेंबल करने योग्य असेंबली कोड में प्रिटी प्रिंट किया जा सकता है।
बाइनरी प्रारूप:
इंस्ट्रक्शन सेट आर्किटेक्चर (ISA):
आप Docker का उपयोग करके Ddisasm का पूर्व-निर्मित संस्करण चला सकते हैं:
docker pull grammatech/ddisasm:latest
Ddisasm का उपयोग बाइनरी को GTIRB रिप्रेजेंटेशन में डिसअसेंबल करने के लिए किया जा सकता है। हम रिपॉजिटरी में शामिल एक उदाहरण के साथ इसे आज़मा सकते हैं।
सबसे पहले, Ddisasm Docker कंटेनर प्रारंभ करें:
docker run -v $PWD/examples:/examples -it grammatech/ddisasm:latest
Docker कंटेनर के अंदर, आइए एक उदाहरण बनाएं:
apt update && apt install gcc -y
cd /examples/ex1
gcc ex.c -o ex
अब हम बाइनरी को डिसअसेंबल करने के लिए आगे बढ़ सकते हैं:
ddisasm ex --ir ex.gtirb
एक बार जब आपके पास GTIRB रिप्रेजेंटेशन हो, तो आप GTIRB या gtirb-rewriting का उपयोग करके बाइनरी में प्रोग्रामेटिक परिवर्तन कर सकते हैं।
फिर, आप बाइनरी का एक नया संस्करण तैयार करने के लिए gtirb-pprinter (Docker इमेज में शामिल) का उपयोग कर सकते हैं:
gtirb-pprinter ex.gtirb -b ex_rewritten
आंतरिक रूप से, gtirb-pprinter एक असेंबली फ़ाइल उत्पन्न करेगा और एक नई बाइनरी तैयार करने के लिए कंपाइलर/असेंबलर (जैसे gcc) को लागू करेगा। gtirb-pprinter एक नई बाइनरी तैयार करने के लिए सभी आवश्यक कमांड लाइन विकल्प उत्पन्न करने का ध्यान रखेगा, जिसमें संकलन विकल्प, लाइब्रेरी निर्भरताएँ, या वर्जन लिंकर स्क्रिप्ट शामिल हैं।
आप मैन्युअल संशोधन के लिए असेंबली लिस्टिंग उत्पन्न करने के लिए भी gtirb-pprinter का उपयोग कर सकते हैं:
gtirb-pprinter ex.gtirb --asm ex.s
इस असेंबली लिस्टिंग को फिर मैन्युअल रूप से पुनः संकलित किया जा सकता है:
gcc -nostartfiles ex.s -o ex_rewritten
कृपया अतिरिक्त जानकारी के लिए हमारा दस्तावेज़ीकरण देखें।
CONTRIBUTING.md देखें
@inproceedings {flores-montoya2020,
author = {Antonio Flores-Montoya and Eric Schulte},
title = {Datalog Disassembly},
booktitle = {29th USENIX Security Symposium (USENIX Security 20)},
year = {2020},
isbn = {978-1-939133-17-5},
pages = {1075--1092},
url = {https://www.usenix.org/conference/usenixsecurity20/presentation/flores-montoya},
publisher = {USENIX Association},
month = aug,
}
@misc{schulte2020gtirb,
title={GTIRB: Intermediate Representation for Binaries},
author={Eric Schulte and Jonathan Dorn and Antonio Flores-Montoya and Aaron Ballman and Tom Johnson},
year={2020},
eprint={1907.02859},
archivePrefix={arXiv},
primaryClass={cs.PL}
}
@INPROCEEDINGS{11023516,
author={Flores-Montoya, Antonio and Lim, Junghee and Seitz, Adam and Sood, Akshay and Raff, Edward and Holt, James},
booktitle={2025 IEEE Symposium on Security and Privacy (SP)},
title={Disassembly as Weighted Interval Scheduling with Learned Weights},
year={2025},
volume={},
number={},
pages={3033-3050},
keywords={Measurement;Privacy;Accuracy;Heuristic algorithms;Reverse engineering;Binary codes;Benchmark testing;Scheduling;Inference algorithms;Security;disassembly;reverse engineering;learning;binary analysis},
doi={10.1109/SP61157.2025.00192}}