E9Patch هي أداة إعادة كتابة ثنائية ثابتة قوية لثنائيات Linux ELF x86_64
. E9Patch هو:
تأخذ إعادة الكتابة الثنائية الثابتة إدخالاً ثنائيًا (كائن ELF قابل للتنفيذ أو مشترك) وتقوم بإنشاء ثنائي إخراج مع تطبيق بعض التصحيح/التعديل عليه. يمكن استخدام الملف الثنائي المصحح كبديل مباشر للملف الأصلي.
لمزيد من المعلومات، يرجى الاطلاع على ورقة PLDI'2020 الخاصة بنا:
يمكن تنزيل ثنائيات E9Patch المعدة مسبقًا هنا:
يعد إنشاء E9Patch أمرًا سهلاً للغاية: ما عليك سوى تشغيل البرنامج النصي build.sh
.
سيؤدي هذا تلقائيًا إلى إنشاء أداتين:
e9patch
: الواجهة الخلفية لإعادة الكتابة الثنائية؛ وe9tool
: واجهة أمامية للتفكيك الخطي لـ E9Patch. يمكن استخدام E9Patch عبر الواجهة الأمامية لـ E9Tool.
على سبيل المثال، لإضافة أدوات طباعة التعليمات إلى كافة تعليمات xor
في xterm
، يمكننا استخدام الأمر التالي:
$ ./e9tool -M 'asm=/xor.*/' -P print xterm
سيؤدي هذا إلى إنشاء نسخة معدلة من xterm
مكتوبة في ملف a.out
.
يمكن تشغيل xterm
المعدل كالمعتاد، ولكن سيتم طباعة سلسلة التجميع لكل تعليمة xor
تم تنفيذها إلى stderr
:
$ ./a.out
xorl %ebp, %ebp
xorl %ebx, %ebx
xorl %eax, %eax
xorl %edx, %edx
xorl %edi, %edi
...
للحصول على قائمة كاملة بالخيارات والأوضاع المدعومة، راجع:
$ ./e9tool --help
قم بتصحيح جميع تعليمات القفز باستخدام أدوات "فارغة":
$ ./e9tool -M 'asm=/j.*/' -P empty xterm
$ ./a.out
اطبع جميع تعليمات الانتقال باستخدام أدوات "الطباعة":
$ ./e9tool -M 'asm=/j.*/' -P print xterm
$ ./a.out
كما هو مذكور أعلاه، ولكن استخدم بناء جملة "Intel":
$ ./e9tool -M 'asm=/j.*/' -P print xterm --syntax=intel
$ ./a.out
قم بتصحيح كافة تعليمات الانتقال من خلال استدعاء دالة فارغة:
$ ./e9compile.sh examples/nop.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@nop' xterm
$ ./a.out
قم بتصحيح جميع تعليمات القفز باستخدام أدوات عد التعليمات:
$ ./e9compile.sh examples/counter.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@counter' xterm
$ FREQ=10000 ./a.out
قم بتصحيح جميع تعليمات القفز باستخدام أدوات طباعة جميلة:
$ ./e9compile.sh examples/print.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry(addr,instr,size,asm)@print' xterm
$ ./a.out
قم بتصحيح جميع تعليمات الانتقال باستخدام أدوات "التأخير" لإبطاء البرنامج:
$ ./e9compile.sh examples/delay.c
$ ./e9tool -M 'asm=/j.*/' -P 'entry()@delay' xterm
$ DELAY=100000 ./a.out
ملحوظات :
XTerm(322)
تتضمن بعض المشاريع الأخرى التي تستخدم E9Patch ما يلي:
libc.so
.E9Patch هي أداة منخفضة المستوى مصممة لتكون قابلة للتكامل في المشاريع الأخرى. لمعرفة المزيد، يرجى الاطلاع على الوثائق التالية:
يمكن الإبلاغ عن الأخطاء هنا:
تم تحسين الإصدار الحالي من E9Patch بشكل ملحوظ مقارنة بالنموذج الأولي الأصلي الذي تم تقييمه في ورقة PLDI'2020. خاصة:
-O2
إلى E9Tool.تم إصدار هذا البرنامج بموجب رخصة جنو العامة (GPL) الإصدار 3.
يتم إصدار بعض الملفات المحددة بموجب ترخيص MIT (راجع مقدمة الملف).
تم دعم هذا العمل جزئيًا من قبل القمر الصناعي الوطني للتميز في أنظمة البرمجيات الجديرة بالثقة، بتمويل من مؤسسة البحوث الوطنية (NRF) في سنغافورة في إطار البرنامج الوطني للبحث والتطوير في مجال الأمن السيبراني (NCR).