DDISASM هو جهاز تفكيك سريع وهو دقيق بما يكفي لإعادة تجميع رمز التجميع الناتج. يتم تنفيذ DDISASM باستخدام لغة برمجة المنطق التصريحي DATALOG (Souffle) لتجميع قواعد التفكيك والاستدلال. يقوم Disassembler أولاً بتوزيع معلومات ملف ELF/PE ويفكك مجموعة من الإرشادات المحتملة لإنشاء مجموعة أولية من حقائق DATALOG. يتم تحليل هذه الحقائق لتحديد موقع الكود ، والرمز ، وحدود الوظيفة . يتم بعد ذلك ترجمة نتائج هذا التحليل ، وهي مجموعة مكررة من حقائق DataLog ، إلى تمثيل GTIRB الوسيط للتحليل الثنائي والهندسة العكسية. يمكن بعد ذلك استخدام طابعة GTIRB Pretty لطباعة GTIRB إلى رمز التجميع القابل لإعادة التقييم.
التنسيقات الثنائية:
بنيات مجموعة التعليمات (ISAS):
يمكنك تشغيل نسخة مسبقة من ddisasm باستخدام Docker:
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 بإنشاء ملف تجميع واستدعاء برنامج التحويل البرمجي/المجمع (EG GCC) لإنتاج ثنائي جديد. سيحصل gtirb-pprinter على الرعاية أو إنشاء جميع خيارات سطر الأوامر اللازمة لإنشاء ثنائي جديد ، بما في ذلك خيارات التجميع أو تبعيات المكتبة أو نصوص روابط الإصدار.
يمكنك أيضًا استخدام gtirb-pprinter لإنشاء قائمة تجميع للتعديل اليدوي:
gtirb-pprinter ex.gtirb --asm ex.sيمكن بعد ذلك إعادة ترجمة قائمة التجميع هذه يدويًا:
gcc -nostartfiles ex.s -o ex_rewrittenيرجى إلقاء نظرة على وثائقنا للحصول على معلومات إضافية.
انظر المساهمة
@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}
}