
فك تغليف وإزالة تشويش الملفات الثنائية المحمية بـ VMProtect 2 باستخدام مستكشف آلة افتراضية قائم على المحاكاة، ومحلل معالجات (handler profiler)، ومُعاد ترجمة LLVM تجريبي لإزالة الافتراضية (devirtualization).
هذا المستودع هو مجموعة من الأدوات القديمة للعمل مع البرامج المحمية بـ VMProtect 2.
تتيح هذه الأدوات فك التغليف والتحليل وإزالة الظاهرية التجريبية للبرامج المحمية بـ VMProtect 2. وفي صميم هذه المجموعة توجد vmprofiler، وهي مكتبة أدوات مساعدة توفر المنطق الأساسي المستخدم في جميع الأدوات الأخرى. وهي مسؤولة عن تحديد المكونات الرئيسية لـ VMProtect 2 مثل معالجات VM، وجدول المعالجات، والتحويلات، والمزيد.
ينبغي نقل الدروس المستفادة من هذا المشروع الذي يتجاوز عمره 4+ سنوات إلى المهتمين بإزالة الظاهرية.
يحاول هذا المشروع تحديد معالجات VM الفردية. هذا النهج هشّ، ولا يتوسع، ويمكن التغلب عليه بتغييرات في بنية الآلة الافتراضية (ربط معالجات متعددة معًا، ومعالجات معقدة، وما إلى ذلك). بدلاً من ذلك، أنا أدعو إلى استراتيجية رفع تدريجي واستعادة تدفق التحكم مع الحد الأدنى من منطق إزالة التعتيم الخاص بالآلة الافتراضية. أدوات مثل Saturn، وDna by Colton، وTriton، وMergen نجحت في إزالة تعتيم VMProtect مع القليل من تحديد المعالجات الخاصة بالآلة الافتراضية أو من دونه. يوثّق هذا المستودع بنية VMProtect 2 ويعمل كملاحظة تحذيرية: تجنّب بناء أدوات إزالة الظاهرية التي تعتمد بشكل كبير على تحديد المعالجات الخاصة بالآلة الافتراضية.
يتطلب النهج شبه العام لإزالة ظاهرية VMProtect إطار عمل قويًا يدعم نشر التحميل/التخزين، ونشر الثوابت عبر الأقسام، وإزالة الكود الميت (DCE)، ومجموعة من التحسينات البسيطة الأخرى. يحاول كثيرون استخدام LLVM لإعادة الترجمة إلى كود أصلي؛ غير أنني أعتقد أن هذا النهج سينتج دائمًا مخرجات أقل من المرغوب فيه. لدينا إطار العمل الخاص بنا، blare2، الذي يوفر قدرات رفع وخفض نظيفة بنسبة 1:1 نستفيد منها لأغراض إزالة التعتيم. إذا كنت مهتمًا بخدمات استشارية لإزالة التعتيم، فهذا شيء يمكننا تقديمه إذا سمح جدولنا بذلك.
vmemu
أداة استكشاف للآلة الافتراضية مبنية على Unicorn Engine.
تتيح لك فك تغليف البرامج المحمية وتحليل تدفق التحكم داخل vmenter محدد.
تُنشئ هذه الأداة ملف .vmp2 يحتوي على مخطط تدفق التحكم لنقطة دخول VM المعطاة.
يمكن بعد ذلك تمرير ملف .vmp2 الناتج إلى vmdevirt لإعادة ترجمة الدالة إلى كود x86 أصلي وإعادة دمجها في الملف الثنائي الأصلي. يُرجى ملاحظة أن هذه ليست مجرد أداة تتبع بسيطة تكتشف مسارًا واحدًا فقط عبر الدالة، بل إنها تحدد فعليًا قفزات jcc الافتراضية وتستكشف جميع تدفقات التحكم الظاهرية.
vmdevirt
مُعيد ترجمة تجريبي مبني على LLVM لملفات .vmp2.
على الرغم من كونه عمليًا، إلا أنه يُعتبر تجريبيًا وغير مستقر بدرجة كبيرة، وهذا النهج غير موصى به عمومًا.
vmassembler
مُجمِّع تجريبي لتشفير عمليات الآلة الافتراضية المعرّفة من قبل المستخدم.
يُظهر هذا المشروع فهمًا تقنيًا عميقًا لـ بنية الآلة الافتراضية لـ VMProtect 2.
vmhook
أداة مصممة للربط بالآلة الافتراضية لـ VMProtect 2 في وقت التشغيل، مما يتيح فحصًا داخليًا تفصيليًا لـ معالجات VM الفردية.
vmprofiler
مكتبة الأدوات المساعدة الأساسية التي تقوم عليها جميع الأدوات الأخرى.
تتضمن مطابقة أنماط معالجات VM، واستخراج جدول المعالجات، وإزالة الكود الميت (DCE)، وروتينات التحليل الأساسية الأخرى.
يرجى اتباع التعليمات الموجودة في هذه الصفحة.
vmhookإعداد vmassembler وvmemu وvmprofiler وvmprofiler-cli:
cmake -B build
cmake --build build
مع vmdevirt (سيقوم بتنزيل وبناء LLVM!):
cmake -B build -DBUILD_VMDEVIRT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
مع vmprofiler-qt:
cmake -B build -DBUILD_VMPROFILER_QT=ON
cmake --build build
كلا الوحدتين الاختياريتين:
cmake -B build -DBUILD_VMDEVIRT=ON -DBUILD_VMPROFILER_QT=ON -DLLVM_BUILD_TYPE=Release
cmake --build build
تُقدَّم هذه الأدوات لأغراض تعليمية وبحثية فقط. ولا يجوز استخدامها في أي أنشطة غير قانونية، أو وصول غير مصرح به، أو انتهاكات لـ DMCA أو القوانين الأخرى. الأدوات نفسها لا تنتهك أي لوائح من لوائح DMCA. جميع الأعمال هي من إنشائي الأصلي، وأي إجراءات يتخذها مستخدمو هذه الأدوات تقع بالكامل على مسؤولية هؤلاء المستخدمين وحدهم، ولا تعكس أفعال المؤلف أو نواياه.
vmprofiler-cli
واجهة سطر أوامر لـ vmprofiler، تتيح للمستخدمين عرض وفحص المعلومات المستخرجة في صيغة نصية.
vmprofiler-qt
مفكك رسومي مبني على Qt لبايت كود VMProtect 2، يوفر استكشافًا تفاعليًا ومرئيًا للكود الظاهري.