
مفكك برامج قائم على Datalog ينتج كود تجميع قابل لإعادة التجميع من ملفات ELF/PE ثنائية، مع تمثيل وسيط GTIRB لتحليل وإعادة كتابة البرامج الثنائية عبر معماريات x86 وARM وMIPS.
===================
DDisasm هو أداة تفكيك سريعة ودقيقة بما يكفي بحيث يمكن إعادة تجميع كود التجميع الناتج. تم تنفيذ DDisasm باستخدام لغة البرمجة المنطقية التقريرية داتالوج (souffle) لتجميع قواعد وإرشادات التفكيك. يقوم أداة التفكيك أولاً بتحليل معلومات ملفات ELF/PE وفك تشفير مجموعة فائقة من التعليمات الممكنة لإنشاء مجموعة أولية من حقائق داتالوج. يتم تحليل هذه الحقائق لتحديد موقع الكود، الرمزية، وحدود الدوال. ثم يتم ترجمة نتائج هذا التحليل، وهي مجموعة محسّنة من حقائق داتالوج، إلى تمثيل وسيط GTIRB لتحليل الثنائيات وهندسة عكسية. يمكن استخدام مُنسّق GTIRB لطباعة GTIRB بشكل منسق إلى كود تجميع قابل لإعادة التجميع.
صيغ الثنائيات:
مجموعات تعليمات المعالجات (ISAs):
يمكنك تشغيل نسخة مُجهّزة مسبقًا من Ddisasm باستخدام Docker:
docker pull grammatech/ddisasm:latest
يمكن استخدام Ddisasm لتفكيك ثنائي إلى تمثيل GTIRB. يمكننا تجربته مع أحد الأمثلة المضمنة في المستودع.
أولاً، ابدأ حاوية Docker الخاصة بـ Ddisasm:
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}}