
Obfusk8: مكتبة تشويش خفيفة الوزن مبنية على C++17 / رأس فقط لملفات ويندوز الثنائية
Obfusk8 هي مكتبة خفيفة الوزن، تعتمد على الرؤوس فقط (header-only) بلغة C++17، مصممة لتعزيز تعقيم تطبيقاتك بشكل كبير، مما يجعل الهندسة العكسية مهمة أكثر صعوبة. تحقق ذلك من خلال مجموعة متنوعة من التقنيات في وقت الترجمة ووقت التشغيل تهدف إلى حماية منطق وبيانات الكود الخاص بك.

main (ماكرو _main)يتم تحويل نقطة الدخول لتطبيقك (main) إلى محرك تعقيم معقد متعدد الطبقات:
main_body الفعلي، تقوم آلة افتراضية صغيرة (معالج محاكي) بتشغيل سلسلة من التعليمات "المشفرة". هذا يخفي نقطة الدخول الحقيقية والعمليات الأولية. يتم تهيئة حالة الآلة الافتراضية (السجلات، عداد البرنامج، مفتاح التوزيع) بقيم عشوائية في وقت التشغيل._main (سواء في المقدمة أو الخاتمة) إلى آلات حالة معقدة. تدفق التحكم ليس مباشرًا بل يتم تحديده بواسطة متغيرات حالة "مشفرة" بشدة. مفاتيح التشفير/فك التشفير لمتغيرات الحالة هذه ديناميكية، مشتقة من حالة الآلة الافتراضية، عدادات الحلقة، العشوائية في وقت الترجمة (مثل __COUNTER__، __LINE__، __TIME__)، وبذرة غير شفافة عامة. هذا يجعل التحليل الثابت لتدفق التحكم صعبًا للغاية.
obf_icff_ns_dcff و obf_icff_ns_epd) بمنطق انتقال حالة وتوليد مفاتيح مختلفين، مما يزيد من تعقيد التحليل.OBF_BOGUS_FLOW_*): يتم حقن العديد من أنماط القفز المضللة والهياكل الشرطية المعقدة في جميع أنحاء _main. تستخدم هذه عبارات goto مقترنة بمسندات غير شفافة (شروط تُقيم دائمًا إلى صواب أو خطأ ولكنها مكلفة حسابيًا أو يصعب تحديدها بشكل ثابت). هذا يخلق متاهة من المسارات الزائفة لمفككات التجميع ومفككات التجميع.
OBF_BOGUS_FLOW_LABYRINTH و OBF_BOGUS_FLOW_GRID و OBF_BOGUS_FLOW_SCRAMBLE و OBF_BOGUS_FLOW_WEAVER و OBF_BOGUS_FLOW_CASCADE و OBF_BOGUS_FLOW_CYCLONE لتوليد تدفقات مزيفة متنوعة ومعقدة.Runtime، SEH):
__except حالة البرنامج، مما يجعل من الصعب متابعتها إذا تجاوز المصحح الاستثناءات.Runtime على شروط يمكنها، إذا تحققت (بسبب حالات أو توقيت معين للآلة الافتراضية)، تشغيل __debugbreak() أو إلقاء استثناءات، مصممة لتعطيل جلسات التصحيح.obf_vm_engine)مكون أساسي في تعقيم ماكرو _main:
r0، r1، r2)، وعداد برنامج (pc)، ومفتاح توزيع (dispatch_key). ينفذ "تعليمات" مخصصة (معالجات).reg_dispatch_idx).get_mem_dispatch_table).mixed_dispatch_idx).
يتم تحوير dispatch_key باستمرار، مما يجعل تسلسل المعالجات المنفذة غير قابل للتنبؤ بشدة.vm_handler_table) نفسه في وقت التشغيل داخل مقدمة وخاتمة _main، مما يزيد من إخفاء سلوك الآلة الافتراضية.OBFUSCATE_STRING من AES8.hpp)__FILE__، __LINE__)، ووقت البناء (__DATE__، __TIME__).AES8.hpp).STEALTH_API_OBFSTR / STEALTH_API_OBF من Resolve8.hpp)GetModuleHandle و GetProcAddress القياسيين للحل الأولي إذا لم يتم حل تلك نفسها بعد بواسطة هذه الآلية.CT_HASH) لأسماء DLL وواجهات API للبحث. هذا يمنع ظهور أسماء DLL وواجهات API بنص صريح في بيانات الاستيراد أو جداول السلاسل للثنائي عند استخدام هذه الماكرو.K8_SYSCALL)يدمج Obfusk8 الآن آلية استدعاء نظام غير مباشر متطورة لتجاوز خطافات وضع المستخدم (EDRs/AVs) وفحوصات التحليل الثابت.
K8_SYSCALL("ZwOpenProcess", ...) بدلاً من NtOpenProcess.OBF_METHOD)يوفر Obfusk8 الآن تحكمًا دقيقًا في أمان ثنائيك من خلال التعقيم القائم على الطريقة. بدلاً من تعقيم مشروعك بالكامل (والذي قد يؤثر على الأداء)، يمكنك الآن حماية وظائف أو طرق فئة محددة وعالية القيمة بشكل انتقائي.
OBF_METHOD: ```cpp
OBF_METHOD(ret_type, func_name, params, method_body)
ret_type: نوع الإرجاع لدالتك (مثل bool، int، void*).func_name: اسم الطريقة.params: معاملات الدالة (يجب أن تكون محاطة بأقواس).method_body: المنطق الفعلي لدالتك محاط بـ { }.في هذا المثال، PrintStatus هي دالة عادية قابلة للقراءة. Obfusk8_PrintStatus محمية بواسطة Obfusk8.```cpp
#include "../Instrumentation/materialization/state/Obfusk8Core.hpp"
#include "../Instrumentation/materialization/transform/K8_UTILS/k8_utils.hpp" // for the printf_, u can change the printf_ with anything else...
class Obfusk8_C { public: // standard method which is visible to reverse engineers void PrintStatus(void) { printf_("method\n"); }
// Obfuscated method protected by Obfusk8
OBF_METHOD_(void, Obfusk8_PrintStatus, (void),
{
printf_("same method but Obfuscated\n");
})
};