Spedi هو مفكك تخميني لـ Thumb ISA ذو الحجم المتغير. بالنظر إلى ملف ELF كمدخل، يمكن لـ Spedi:
يعمل Spedi مباشرة على الملف الثنائي دون استخدام معلومات الرمز. لقد وجدنا أن Spedi يتفوق على IDA Pro في تجاربنا.
يستعيد Spedi جميع الكتل الأساسية (BBs) الممكنة المتوفرة في الملف الثنائي. يتم تجميع BBs التي تشترك في نفس تعليمات القفز في كتلة قصوى واحدة (MB). بعد ذلك، يتم تنقيح MBs باستخدام تحليل التداخل وتضارب CFG. يمكن العثور على التفاصيل في ورقتنا البحثية رقم 16 بعنوان " التفكيك التأملي للشفرة الثنائية ". الورقة متاحة هنا .
يستعيد Spedi (تقريبًا) تعليمات التجميع بشكل مثالي من الثنائيات المرجعية لدينا بمتوسط 99.96%. بالمقارنة، يتمتع IDA Pro بمتوسط 95.83% منحرفًا بسبب الأداء الضعيف نسبيًا على معيار sha .
يستعيد Spedi بدقة 97.46% من الوظائف في المتوسط. أي أنه يحدد عنوان البداية وعنوان النهاية الصحيحين. قارن ذلك بمتوسط 40.53% الذي حققته IDA Pro.
من الخصائص الرائعة لتقنيتنا أنها سريعة أيضًا وتتدرج بشكل جيد مع زيادة الحجم القياسي. على سبيل المثال، يقوم spedi بتفكيك du (تعليمات 50 ألفًا) في حوالي 150 مللي ثانية. لاحظ أن هناك مجالًا جيدًا لمزيد من التحسينات.
للاستشهاد بـ Spedi في عمل أكاديمي، يرجى استخدام:
@inproceedings{BenKhadraSK2016,
author = {Ben Khadra, M. Ammar and Stoffel, Dominik and Kunz, Wolfgang},
title = {Speculative Disassembly of Binary Code},
booktitle = {Proceedings of the International Conference on Compilers, Architectures and Synthesis for Embedded Systems},
year = {2016},
location = {Pittsburgh, Pennsylvania},
articleno = {16},
doi = {10.1145/2968455.2968505},
acmid = {2968505},
publisher = {ACM},
}
أنشئ المشروع وجربه على أحد الثنائيات الموجودة في مجموعة المعايير المتوفرة لدينا في هذا المستودع.
سيوجه الأمر التالي spedi
لتفكيك قسم .text
بشكل تخميني،
$ ./spedi -t -s -f $FILE > speculative.inst
استخدم الأمر التالي لتفكيك قسم .text
استنادًا إلى رموز تعيين كود ARM التي توفر الحقيقة الأساسية حول التعليمات الصحيحة،
$ ./spedi -t -f $FILE > correct.inst
أسهل طريقة لمقارنة كلا الناتجين هي باستخدام،
$ diff -y correct.inst speculative.inst | less
حاليًا، تحتاج إلى تعديل main.cpp
يدويًا لإظهار النتائج المتعلقة بجدول التبديل واسترداد الرسم البياني للاستدعاء.
هذه الأداة هي إثبات أكاديمي للمفهوم. حاليا، ليس على قائمة أولوياتنا. ومع ذلك، هناك بعض الميزات التي نضعها في اعتبارنا للمستقبل، وهي:
bx
و blx
). توفر هذه الورقة بعض التفاصيل ذات الصلة. في الآونة الأخيرة، أندريس وآخرون. آل. لقد تم العمل على Nucleus
، وهي أداة لتحديد الوظائف في ثنائيات x64. تم قبول ورقتهم البحثية " كشف الوظائف غير البرمجي في الثنائيات " في IEEE Euro S&P 2017. وهم يستخدمون تقريبًا نفس تقنيات تحديد الوظيفة المطبقة في Spedi. إذا كنت مهتمًا بدعم x64، فيمكنك إلقاء نظرة على أدواتهم.
ومع ذلك، لاحظ أن أداتهم تعتمد على افتراض أن المترجمين الحديثين لـ x64 يخصصون بيانات جدول الانتقال في قسم .rodata
. وهذا يجعل استرداد التعليمات أسهل بكثير لأنه يمكن إجراؤه بشكل موثوق باستخدام عملية المسح الخطي. بالمقارنة، يتعامل Spedi مع الحالة الأكثر عمومية للتعليمات البرمجية/البيانات المختلطة باستخدام التفكيك التخميني.
يعتمد هذا المشروع على مكتبة التفكيك Capstone (الإصدار 3.0.4).