Tigress هو Virtualizer/Opfuscator المتنوع للغة C التي تدعم العديد من الدفاعات الجديدة ضد كل من هجمات الهندسة العكسية والثابتة الثابتة والديناميكية. على وجه الخصوص ، يحمي Tigress من إلغاء التخلص من الثوابيات الثابتة عن طريق توليد مجموعات تعليمات افتراضية من التعقيد التعسفي والتنوع ، من خلال إنتاج المترجمين الفوريين بأنواع متعددة من إرسال التعليمات ، وإدراج رمز لتحليل مكافحة الاسم المستعار. يحمي Tigress من إلغاء التخلص الديناميكي عن طريق دمج الكود الحقيقي مع وظائف وهمية ، من خلال إدخال التدفق الضمني ، وإنشاء فترات فترات مترجمة تنقذ ببطء. يقوم Tigress بتنفيذ نسخته الخاصة من تعبئة التعليمات البرمجية من خلال استخدام توليد رمز وقت التشغيل. أخيرًا ، يوفر التحول الديناميكي لـ Tigress شكلاً معممًا لتعديل رمز وقت التشغيل المستمر.
قدم فريق Tigress بعض التحديات حيث يمكننا العثور على نوع مختلف من الحماية
جميع التحديات تأخذ كإدخال رقم وإرجاع تجزئة. مثال:
$ ./obfuscated_binaries/tigress-2-challenge-2 1234 202180712448 $ ./obfuscated_binaries/tigress-2-challenge-2 823748 50564355584 $ ./obfuscated_binaries/tigress-2-challenge-2 2834723 50714072576
دالة حساب التجزئة محتضرة. أنواع الهجمات الممكنة:
كانت أهدافنا هي:
وكل هذا مع برنامج نصي عام واحد فقط :). للقيام بذلك ، قدمنا بالترتيب التالي:
إذا كنت تريد المزيد من المعلومات ، فيمكنك الخروج من نص Solve-VM.Py.

ومع ذلك ، لقد دفعنا بالفعل جميع نتائجنا في هذا المستودع ، ولكن إذا كنت ترغب في إعادة إنتاج هذا التحليل بنفسك ، فعليك فقط تنفيذ solve-vm.py مثل هذا:
$ ./solve-vm.py ./obfuscated_binaries/_binary_
مثال:
$ ./solve-vm.py ./tigress-challenges/tigress-0-challenge-0 [+] تحميل 0x400040 - 0x400238 [+] تحميل 0x400238 - 0x400254 [+] تحميل 0x400000 - 0x400F14 [+] تحميل 0x601E28 - 0x602550 [+] تحميل 0x601E50 - 0x601FE0 [+] تحميل 0x400254 - 0x400298 [+] تحميل 0x400DC4 - 0x400E08 [+] تحميل 0x000000 - 0x000000 [+] تحميل 0x601E28 - 0x602000 [+] ربط printf [+] ربط __libc_start_main [+] تثبيت Strtoul [+] بدء مضاهاة. [+] __libc_start_main مدمن مخدرات [+] argv [0] = ./tigress-challenges/tigress-0-challenge-0 [+] argv [1] = 1234 [+] Strtoul مدمن مخدرات [+] يرمز إلى عودة سترتوول [+] printf مدمن مخدرات 3035321144166078008 [+] تقطيع تعبير مستخدم نقطة النهاية [-] تعليمات غير مدعومة: 0x400539: HLT [+] تم تنفيذ التعليمات: 39816 [+] تعليمات فريدة تنفيذها: 458 [+] PC LEN: 0 [+] مضاهاة القيام به. ] [+] تحويل التعبيرات الرمزية إلى وحدة LLVM ... [+] كتبت وحدة LLVM في LLVM_EXPRESSIRES/TIGRESS-0-CALLENGE-0.LL [+] إعادة تجميع ثنائي deobfuscated ... ]
بعد ذلك ، يمكن العثور على تعبيرات رمزية هنا ، يمكن العثور على تمثيلات LLVM هنا ويمكن العثور على ثنائيات إعادة ترجمة هنا.
باستخدام Docker:
$ git clone [email protected]: jonathansalwan/tigress_protection.git $ cd/path/to/tigress_protection $ docker build -t image_tigress_protection. $ docker Run -V/path/to/tigress_protection:/root/tigress_protection -ti -name = tigress_protection -ulimit = 'stack = -1: -1' image_tigress_protection
اختبار داخل حاوية Docker
# CD ~/tigress_protection # ./solve-vm.py tigress-challenges/tigress-0-challenge-0
عندما قمنا بتبسيط وإعادة ترجمة ثنائيات جديدة ، يجب أن نقدم نفس السلوك للثنائيات الأصلية. لذلك ، لاختبار إصداراتنا الثنائية نستخدم هذا البرنامج النصي.
$ ./scripts/testing_equality.py ./tigress-challenges/tigress-0-challenge-0. [...] [+] النجاح مع 272966812638982633 [+] النجاح مع 2304147855662358786 [+] النجاح مع 15697842028176298504 [+] النجاح مع 15273138908025273913 [+] النجاح مع 17329851347176088980 [+] النجاح مع 12160831137213706322 [+] النجاح مع 3489058267725840982 [+] نجاح مع 6474275930952607745 [+] النجاح مع 7363567981237584398 [+] النجاح مع 3685039181436704621 [+] النجاح: 100.00
في الأساس ، يقوم هذا البرنامج النصي بتشغيل الثنائيات المزعجة والثنائيات ذات المدخلات العشوائية والتحقق مما إذا كان لديهم نفس نتائج الإخراج.

فيما يتعلق بجدول النسب ، بعد حل التحديات التي تم حلها ، طلبنا من المسيحية Collberg مصادر تحدياتها من أجل مقارنة حجم المصادر الأصلية والإصدارات devirtualized. لاحظ أنه بناءً على طلب كريستيان ، لا يمكننا تقديم مصادر لتحديات Tigress ، إذا كنت تريد هذه المصادر ، يرجى أن تسأل عنه مباشرة :).
نلتقط أيضًا 20 خوارزميات تجزئة (10 معروفة ، 10 من تحدي Tigress) وحماينا كل واحد من هذه الخوارزميات باستخدام 46 حماية مختلفة من Tigress (انظر القسم التالي). في النهاية ، لدينا مقعد اختبار من 920 ثنائيات محمية. تم تنفيذ كل واحدة من هذه الثنائيات المحمية بنجاح باستخدام البرنامج النصي solve-vm.py . يمكن العثور على خوارزميات التجزئة هذه في دليل العينات وإصداراتها devirtualized في دليل deobfuscated_binaries. الجدول التالي هو ملخص لنتائجنا فيما يتعلق بعينات 920.

لمزيد من المعلومات حول هذه الخيارات ، انظر الصفحات 1 و 2.