Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Obfusk8 — Obfusk8: مكتبة تشويش خفيفة الوزن مبنية على C++17 / رأس فقط لملفات ويندوز الثنائية | Kitploit
أدوات/GitHubGitHub/x86byte/obfusk8
أطر الاستغلالالهندسة العكسيةشيل كودالتشفيراختبار الاختراقالفريق الأحمرتطوير الحمولات
GitHubx86byte/obfusk8

Obfusk8

Obfusk8: مكتبة تشويش خفيفة الوزن مبنية على C++17 / رأس فقط لملفات ويندوز الثنائية

عرض المستودع
7938223منذ 3 أشهرتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

مكتبة Obfusk8: مكتبة تعقيم تعتمد على C++17

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

banner


جدول المحتويات

  1. استراتيجيات التعقيم الأساسية
  2. التبعيات
  3. التصور
  4. تحليل المحرك وملف الكشف
  5. الخصائص الهيكلية والجنائية
  6. الاستخدام
  7. البناء
  8. العرض التوضيحي
  9. المساهمة والملاحظات

استراتيجيات التعقيم الأساسية

1. تغليف دالة main (ماكرو _main)

يتم تحويل نقطة الدخول لتطبيقك (main) إلى محرك تعقيم معقد متعدد الطبقات:

  • تنفيذ آلة افتراضية (مفاهيمي): قبل تنفيذ كود main_body الفعلي، تقوم آلة افتراضية صغيرة (معالج محاكي) بتشغيل سلسلة من التعليمات "المشفرة". هذا يخفي نقطة الدخول الحقيقية والعمليات الأولية. يتم تهيئة حالة الآلة الافتراضية (السجلات، عداد البرنامج، مفتاح التوزيع) بقيم عشوائية في وقت التشغيل.
  • تسطيح تدفق التحكم غير المباشر (ICFF): يتم تحويل الحلقات الحرجة داخل ماكرو _main (سواء في المقدمة أو الخاتمة) إلى آلات حالة معقدة. تدفق التحكم ليس مباشرًا بل يتم تحديده بواسطة متغيرات حالة "مشفرة" بشدة. مفاتيح التشفير/فك التشفير لمتغيرات الحالة هذه ديناميكية، مشتقة من حالة الآلة الافتراضية، عدادات الحلقة، العشوائية في وقت الترجمة (مثل __COUNTER__، __LINE__، __TIME__)، وبذرة غير شفافة عامة. هذا يجعل التحليل الثابت لتدفق التحكم صعبًا للغاية.
    • يتم استخدام محركين ICFF متميزين (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):
    • الاستثناءات القسرية و SEH: يتم استخدام معالجة الاستثناءات المنظمة (SEH) لإنشاء مسارات تتضمن استثناءات قسرية. يمكن أن تغير كتل __except حالة البرنامج، مما يجعل من الصعب متابعتها إذا تجاوز المصحح الاستثناءات.
    • فحوصات المصحح (مفاهيمي): يحتوي ماكرو Runtime على شروط يمكنها، إذا تحققت (بسبب حالات أو توقيت معين للآلة الافتراضية)، تشغيل __debugbreak() أو إلقاء استثناءات، مصممة لتعطيل جلسات التصحيح.

2. محرك ISA الافتراضي (obf_vm_engine)

مكون أساسي في تعقيم ماكرو _main:

  • محاكاة معالج مصغر مخصص: يحاكي معالجًا بسجلات متطايرة (r0، r1، r2)، وعداد برنامج (pc)، ومفتاح توزيع (dispatch_key). ينفذ "تعليمات" مخصصة (معالجات).
  • تعليمات معقمة: تقوم معالجات تعليمات الآلة الافتراضية بإجراء عمليات مقنعة بشدة باستخدام الحساب المنطقي المختلط (MBA) والتلاعب على مستوى البت. تشمل المعالجات العمليات الحسابية، المنطق على مستوى البت، تشويه المفاتيح، تسلسلات غير مرغوب فيها، تحديثات شرطية، محاكاة الذاكرة، وتشويه عداد البرنامج.
  • التوزيع الديناميكي: يتم عشوائياً اختيار معالج التعليمات التالي للآلة الافتراضية من خلال آليات توزيع متعددة:
    • التوزيع على أساس السجلات (reg_dispatch_idx).
    • التوزيع على أساس جدول الذاكرة (جدول مؤشرات دالة مشوش get_mem_dispatch_table).
    • التوزيع المختلط (mixed_dispatch_idx). يتم تحوير dispatch_key باستمرار، مما يجعل تسلسل المعالجات المنفذة غير قابل للتنبؤ بشدة.
  • تحوير جدول المعالجات: يتم تحوير جدول معالجات تعليمات الآلة الافتراضية (vm_handler_table) نفسه في وقت التشغيل داخل مقدمة وخاتمة _main، مما يزيد من إخفاء سلوك الآلة الافتراضية.

3. تشفير السلاسل في وقت الترجمة (OBFUSCATE_STRING من AES8.hpp)

  • سلاسل مخفية: يشفر جميع حروف السلسلة في وقت الترجمة باستخدام تشفير AES معدل.
  • مفاتيح ديناميكية: مفاتيح التشفير فريدة لكل مثيل سلسلة، مشتقة من محتوى السلسلة، موقع الملف (__FILE__، __LINE__)، ووقت البناء (__DATE__، __TIME__).
  • فك التشفير في الوقت المناسب: يتم فك تشفير السلاسل على المكدس فقط عند الوصول إليها في وقت التشغيل، مما يقلل من عمر نصها الصريح في الذاكرة.
  • (اختياري) أقسام PE خادعة: يمكن تخزين السلاسل المشفرة في أقسام PE مخصصة مصممة لتقليد توقيعات الحزم الشائعة، مما قد يضلل المحللين (ميزة خاصة بـ MSVC من AES8.hpp).

4. استدعاء واجهات برمجة تطبيقات Windows الخفي (STEALTH_API_OBFSTR / STEALTH_API_OBF من Resolve8.hpp)

  • إخفاء IAT: يتجنب ترك إدخالات مباشرة وسهلة التحديد لواجهات برمجة تطبيقات Windows في جدول عناوين الاستيراد (IAT).
  • الحل المستند إلى PEB: يجد ديناميكياً العناوين الأساسية لملفات DLL المحملة وعناوين وظائف API عن طريق تحليل هياكل بيانات كتلة بيئة العملية (PEB) مباشرة في وقت التشغيل. هذا يتجاوز GetModuleHandle و GetProcAddress القياسيين للحل الأولي إذا لم يتم حل تلك نفسها بعد بواسطة هذه الآلية.
  • أسماء مشفرة بالتجزئة: يستخدم تجزئة وقت الترجمة (خوارزمية مخصصة CT_HASH) لأسماء DLL وواجهات API للبحث. هذا يمنع ظهور أسماء DLL وواجهات API بنص صريح في بيانات الاستيراد أو جداول السلاسل للثنائي عند استخدام هذه الماكرو.

5. محرك استدعاء النظام غير المباشر (K8_SYSCALL)

يدمج Obfusk8 الآن آلية استدعاء نظام غير مباشر متطورة لتجاوز خطافات وضع المستخدم (EDRs/AVs) وفحوصات التحليل الثابت.

  • حل "قبعة الفرز": بدلاً من قراءة قسم .text من ntdll.dll (والذي غالبًا ما يتم ربطه أو مراقبته)، يقوم المحرك بتحليل دليل التصدير. يقوم بتصفية الوظائف التي تبدأ بـ Zw، وفرزها حسب عنوان الذاكرة، واستنتاج رقم استدعاء النظام (SSN) بناءً على فهرسها. هذا يسمح بحل SSN دون لمس الكود القابل للتنفيذ مطلقًا.
  • تنفيذ الأداة الجانبية: لا يحتوي المحرك على تعليمة استدعاء النظام (0F 05) في ثنائيه الخاص. بدلاً من ذلك، يقوم بتحديد موقع أداة استدعاء نظام صالحة؛ ret داخل ذاكرة ntdll.dll في وقت التشغيل. أكوام استدعاء نظيفة: يتم تخصيص thunk مخصص يقفز إلى أداة ntdll. بالنسبة لنواة نظام التشغيل وأجهزة الاستشعار الأمنية، يبدو استدعاء النظام وكأنه ينشأ بشكل شرعي من ntdll.dll، مما يحافظ على كومة استدعاء نظيفة.
  • الاستخدام: استخدم ببساطة K8_SYSCALL("ZwOpenProcess", ...) بدلاً من NtOpenProcess.

6. التعقيم القائم على الطريقة باستخدام (OBF_METHOD)

يوفر Obfusk8 الآن تحكمًا دقيقًا في أمان ثنائيك من خلال التعقيم القائم على الطريقة. بدلاً من تعقيم مشروعك بالكامل (والذي قد يؤثر على الأداء)، يمكنك الآن حماية وظائف أو طرق فئة محددة وعالية القيمة بشكل انتقائي.


كيفية الاستخدام

  1. تضمين التمرير
    تأكد من تضمين منطق تعقيم الطريقة في مشروعك: ```cpp #include "../transform/PASSES/obf_cmethods.cxx"
  2. بناء الجملة الكلي
    قم بتعريف طريقتك باستخدام ماكرو 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");
})

};

تنزيل الأداة