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

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
box-js — أداة لدراسة البرامج الضارة الخاصة بـ JavaScript. | Kitploit
أدوات/GitHubGitHub/capacitorset/box-js
إدارة مؤشرات الاختراق (IOC)التحليل الديناميكي (عزل)التحقيق الجنائي الرقميتحليل البرمجيات الخبيثة
GitHubcapacitorset/box-js

box-js

أداة لدراسة البرامج الضارة الخاصة بـ JavaScript.

عرض المستودع
67288منذ شهر واحدتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

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

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

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

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

box.js

npm Build Status paypal

أداة لتحليل جافاسكريبت الخبيثة.

التثبيت

ما عليك سوى تثبيت box-js من npm:

root@kitploit:~
npm install box-js --global

يتوفر box-js أيضًا:

  • كوحدة Cuckoo (انظر دليل integrations و Nwinternights/Cuckoo_Boxjs);
  • كملف Docker (انظر integrations/README.md);
  • كحزمة في توزيعات لمحترفي الأمن (REMnux, BlackArch);
  • كجزء من تطبيقات مفتوحة المصدر (Intel Owl);
  • كجزء من خدمات جهات خارجية تجارية (any.run).

الاستخدام

لنفترض أن لديك عينة تسمى sample.js: لتحليلها، قم بتشغيل الأمر التالي

root@kitploit:~
box-js sample.js

من المحتمل أن ترغب أيضًا في تنزيل أي حمولات؛ استخدم العلم --download لتمكين التنزيل. وإلا، سيحاكي المحرك خطأ 404، بحيث يتم خداع السكريبت ليعتقد أن موقع التوزيع معطل ويتصل بأي مواقع بديلة.

سيقوم Box.js بمحاكاة بيئة JScript في ويندوز، وطباعة ملخص للمحاكاة على وحدة التحكم، وإنشاء مجلد باسم sample.js.results (إذا كان موجودًا بالفعل، سينشئ sample.js.1.results وهكذا). سيحتوي هذا المجلد على:

  • analysis.log، سجل للتحليل كما طُبع على الشاشة؛
  • سلسلة من الملفات المعرفة بواسطة UUIDs؛
  • snippets.json، قائمة بأجزاء الكود التي نفذتها العينة (جافاسكريبت، أوامر شيل، إلخ)؛
  • urls.json، قائمة عناوين URL التي تم الاتصال بها؛
  • active_urls.json، قائمة عناوين URL التي يبدو أنها تسقط برامج ضارة نشطة؛
  • resources.json، تدفقات ADODB (أي الملفات التي كتبها السكريبت على القرص) مع أنواع الملفات وهاشاتها؛
  • IOC.json، قائمة بالسلوكيات التي تم تحديدها كمؤشرات اختراق (IOCs). تتضمن هذه الوصول إلى السجل، والملفات المكتوبة، وطلبات HTTP، وما إلى ذلك.

يمكنك تحليل هذه بنفسك، أو يمكنك إرسالها تلقائيًا إلى Malwr أو VirusTotal أو صندوق رمل Cuckoo: لمزيد من المعلومات، قم بتشغيل box-export --help.

لمزيد من العزل، يُنصح بتشغيل التحليل في حاوية Docker مؤقتة. راجع integrations/README.md لمزيد من المعلومات.

إذا كنت ترغب في أتمتة التحليل، يمكنك استخدام رموز الإرجاع - الموثقة في integrations/README.md - للتمييز بين أنواع الأخطاء المختلفة.

فشل التحليل بسبب فقدان كائن 'document' أو كائنات/دوال أخرى

يتضمن مستودع box-js من git ملف boilerplate.js. يعرّف هذا الملف بعض الإصدارات الوهمية لكائنات المتصفح الشائعة مثل document. حاول إعادة تشغيل التحليل باستخدام الخيار --prepended-code=DIR/boilerplate.js، حيث DIR هو دليل مستودع box-js المستنسخ أو باستخدام --prepended-code=default. يخبر الخيار --prepended-code box-js بإضافة الجافاسكريبت في الملف المحدد قبل العينة التي يتم تحليلها.

لاحظ أنه يمكنك نسخ boilerplate.js وإضافة الفئات والكائنات الوهمية الخاصة بك حسب الحاجة. استخدم خيار سطر الأوامر --prepended-code=show-default لطباعة المسار الكامل لملف boilerplate.js الافتراضي الخاص بـ box-js.

الاستخدام الدفعي

بينما يُستخدم box.js عادةً على ملفات فردية، يمكنه أيضًا تشغيل تحليلات دفعية. يمكنك ببساطة تمرير قائمة من الملفات أو المجلدات لتحليلها:

root@kitploit:~
box-js sample1.js sample2.js /var/data/mySamples ...

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

يمكنك استخدام --loglevel=warn لإسكات الرسائل المتعلقة بالتحليل وعرض معلومات التقدم فقط.

بعد انتهاء التحليل، يمكنك استخراج عناوين URL النشطة على النحو التالي:

root@kitploit:~
cat ./*.results/active_urls.json | sort | uniq

الأعلام

root@kitploit:~
NAME                   DESCRIPTION                                                                     
-h, --help                 إظهار نص المساعدة والخروج                                                       
-v, --version              إظهار إصدار الحزمة والخروج                                               
--license                  إظهار الترخيص والخروج                                                       
--debug                    التوقف عند حدوث خطأ في المحاكاة، حتى في "الوضع الدفعي"، وتمرير رمز الخروج  
                           .                                                                           
--loglevel                 مستوى التسجيل (debug, verbose, info, warning, error - الافتراضي "info")           
--threads                  عند التشغيل في الوضع الدفعي، كم عدد التحليلات التي يجب تشغيلها في نفس الوقت (0 =      
                           غير محدود، الافتراضي: بعدد نوى وحدة المعالجة المركزية)                         
--download                 تنزيل الحمولات فعليًا                                                  
--encoding                 ترميز العينة المدخلة (سيتم اكتشافه تلقائيًا افتراضيًا)        
--timeout                  سينتهي وقت السكريبت بعد هذا العدد من الثواني (الافتراضي 10)                    
--output-dir               الموقع على القرص لكتابة ملفات ومجلدات النتائج إليها (الافتراضي هو 
                           الدليل الحالي)                                                              
--preprocess               معالجة مسبقة لشفرة المصدر الأصلية (تسهل الهندسة العكسية، لكنها تستغرق
                           بضع ثوانٍ)                                                                  
--unsafe-preprocess        معالجة مسبقة أكثر عدوانية. غالبًا ما تؤدي إلى كود أفضل، ولكنها قد تتعطل في 
                           بعض الحالات الحدية (على سبيل المثال، إعادة تعريف النماذج الأولية)                                     
--prepended-code           ملف أو دليل إدخال يحتوي على كود يجب إضافته قبل ملفات JS      
                           التي نحللها. إذا تم إعطاء دليل، يسبق محتويات جميع الملفات 
                           في الدليل. إذا تم إعطاء 'default'، يتم استخدام boilerplate.js الافتراضي الذي 
                           يأتي مع box-js. إذا تم إعطاء 'show-default'، يتم طباعة مسار boilerplate.js 
                           والخروج (مفيد إذا كنت تريد نسخ وتعديل كود boilerplate الافتراضي).      
--fake-script-engine       محرك السكريبت الذي سيتم الإبلاغ عنه في WScript.FullName و WScript.Name (مثال.           
                           'cscript.exe', 'wscript.exe', أو 'node'). الافتراضي هو wscript.exe.               
--fake-cl-args            وسائط سطر أوامر السكريبت الوهمية. في السلسلة يجب أن تكون مفصولة بفاصلة       
                           .                                                                      
--fake-sample-name         اسم ملف وهمي لاستخدامه للعينة التي يتم تحليلها. يمكن أن يكون مسارًا كاملاً أو مجرد 
                           اسم الملف. إذا كان لديك '\' في المسار، فاهربها كـ '\\' في هذه 
                           القيمة لوسيطة سطر الأوامر (مثال. --fake-sample-name=C:\\foo\\bar.js).           
--fake-language            حدد رمز اللغة لإرجاعه لـ Win32_OperatingSystem.OSLanguage.       
                           القيم المدعومة هي 'spanish' و 'english' و 'portuguese'.                    
--fake-domain              حدد مجال المستخدم لإرجاعه لـ WScript.Network.UserDomain.
--fake-download            تزوير أن طلبات HTTP تعمل وإرجاع حمولة وهمية                
--no-kill                  لا تقتل التطبيق عند حدوث أخطاء وقت التشغيل                           
--no-echo                  عندما يطبع السكريبت بيانات، لا تطبعها على وحدة التحكم                     
--no-rewrite               لا تعيد كتابة شفرة المصدر على الإطلاق، بخلاف دعم `@cc_on`          
--no-catch-rewrite         لا تعيد كتابة عبارات try..catch لجعل الاستثناء عالمي النطاق           
--no-cc_on-rewrite         لا تعيد كتابة `/*@cc_on <...>@*/` إلى `<...>`                                   
--no-eval-rewrite          لا تعيد كتابة `eval` بحيث يتم إعادة كتابة وسيطته                         
--no-file-exists           إرجاع `false` لـ Scripting.FileSystemObject.FileExists(x)                     
--limit-file-checks        تبديل القيمة الافتراضية لفحوصات وجود المجلد/الملف إذا تم إجراء العديد من الفحوصات 
                           (حاول كسر حلقات فحص الملفات اللانهائية).                                       
--no-folder-exists         إرجاع `false` لـ Scripting.FileSystemObject.FileExists(x)                     
--function-rewrite         إعادة كتابة استدعاءات الدوال من أجل التقاط استدعاءات eval                             
--no-rewrite-prototype     لا تعيد كتابة تعبيرات مثل `function A.prototype.B()` كـ `A.prototype.B =  
                           function()`                                                                     
--no-hoist-prototype       لا ترفع تعبيرات مثل `function A.prototype.B()` (مضمنة ضمن            
                           no-rewrite-prototype)                                                           
--no-shell-error           لا تطرح خطأ وهميًا عند تنفيذ `WScriptShell.Run` (يطرح خطأ وهميًا           
                           افتراضيًا للتظاهر بأن مواقع التوزيع معطلة، بحيث يحاول السكريبت الاتصال بكل موقع)                                         
--no-typeof-rewrite        لا تعيد كتابة `typeof` (على سبيل المثال `typeof ActiveXObject`، الذي يجب أن يرجع            
                           'unknown' في معيار JScript وليس 'object')                             
--proxy                    [تجريبي] استخدم الوكيل المحدد للتنزيلات. هذا غير مهم إذا 
                           لم يكن العلم --download موجودًا.                                             
--windows-xp               محاكاة ويندوز XP (تؤثر على قيمة متغيرات البيئة)              
--dangerous-vm            استخدم وحدة `vm`، بدلاً من `vm2`. يمكن اختراق هذا الصندوق الرملي، لذا **لا 
                           تستخدم هذا** إلا إذا كنت متأكدًا 100% مما تفعله. يساعد في تصحيح الأخطاء من خلال 
                           إعطاء تتبعات مكدس صحيحة.                                                    
--rewrite-loops            إعادة كتابة بعض أنواع الحلقات لجعل التحليل أسرع                             
--throttle-writes          تقليل الإبلاغ وتتبع بيانات كتابات الملفات التي تكتب الكثير من البيانات    
--throttle-commands        إيقاف التحليل إذا تم تشغيل الكثير من الأوامر نفسها                   
--extract-conditional-code استخراج الكود الفعلي للتحليل من تعليقات JScript الشرطية (/*@if(...).  
--loose-script-name        إعادة كتابة فحوصات == بحيث تقارن اسم السكريبت الحالي باسم سكريبت محدد
                           مكتوب بشكل ثابت دائمًا ترجع true.                                                 
--real-script-name         إرجاع اسم الملف الحقيقي للسكريبت الذي يتم تحليله حاليًا بدلاً من اسم وهمي   
                           .                                                                           
--activex-as-ioc           تسجيل جميع استدعاءات ActiveX كمؤشرات اختراق ومحاولة تحديد ما إذا كان الاستدعاء مشوشًا
                           في شفرة المصدر JS.                                                               
--ignore-wscript-quit      تجاهل استدعاءات WSCript.Quit() ومتابعة التنفيذ.                          
--ignore-rewrite-errors    تحليل العينة الأصلية إذا فشلت أي إعادة كتابة للعينة.                            

تحليل المخرجات

مخرجات وحدة التحكم

المصدر الأول للمعلومات هو مخرجات وحدة التحكم. في التحليل الناجح، سيطبع عادةً شيئًا كهذا:

root@kitploit:~
Using a 10 seconds timeout, pass --timeout to specify another timeout in seconds
Analyzing sample.js
Header set for http://foo.bar/baz: User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Emulating a GET request to http://foo.bar/baz
Downloaded 301054 bytes.
Saved sample.js.results/a0af1253-597c-4eed-9e8f-5b633ff5f66a (301054 bytes)
sample.js.results/a0af1253-597c-4eed-9e8f-5b633ff5f66a has been detected as data.
Saved sample.js.results/f8df7228-7e0a-4241-9dae-c4e1664dc5d8 (303128 bytes)
sample.js.results/f8df7228-7e0a-4241-9dae-c4e1664dc5d8 has been detected as PE32 executable (GUI) Intel 80386, for MS Windows.
http://foo.bar/baz is an active URL.
Executing sample.js.results/d241e130-346f-4c0c-a698-f925dbd68f0c in the WScript shell
Header set for http://somethingelse.com/: User-Agent Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)
Emulating a GET request to http://somethingelse.com/
...

في هذه الحالة، نحن نرى برنامج إسقاط يقوم بتنزيل ملف من http://foo.bar/baz، مع تعيين رأس HTTP User-Agent إلى Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0). ثم، يشرع في فك تشفيره، وكتابة النتيجة على القرص (ملف PE32 قابل للتنفيذ). أخيرًا، يقوم بتشغيل بعض الأوامر في شل ويندوز.

  • sample.js.results/a0af1253-597c-4eed-9e8f-5b633ff5f66a سيحتوي على الحمولة كما تم تنزيلها من http://foo.bar/baz؛
  • sample.js.results/f8df7228-7e0a-4241-9dae-c4e1664dc5d8 سيحتوي على الحمولة الفعلية (ملف PE قابل للتنفيذ)؛
  • sample.js.results/d241e130-346f-4c0c-a698-f925dbd68f0c سيحتوي على الأمر الذي تم تشغيله في شل ويندوز.

سجلات JSON

يتم طباعة كل طلب HTTP على الطرفية وتسجيله في urls.json. عناوين URL المكررة لا يتم إدراجها (أي طلب نفس URL مرتين سيؤدي إلى سطر واحد فقط في urls.json).

active_urls.json يحتوي على قائمة عناوين URL التي أدت في النهاية إلى حمولة قابلة للتنفيذ. هذا الملف هو الأكثر إثارة للاهتمام، إذا كنت تبحث عن إزالة مواقع التوزيع.

snippets.json يحتوي على كل قطعة كود صادفها box-js، سواء كانت جافاسكريبت، أو أمر cmd.exe، أو سكريبت PowerShell.

resources.json يحتوي على كل ملف كتبته العينة على القرص. على سبيل المثال، إذا حاول التطبيق حفظ Hello world! إلى $PATH/foo.txt، فسيكون محتوى resources.json:

root@kitploit:~
{
	"9a24...": {
		"path": "(path)\\foo.txt",
		"type": "ASCII text, with no line terminators",
		"md5": "86fb269d190d2c85f6e0468ceca42a20",
		"sha1": "d3486ae9136e7856bc42212385ea797094475802",
		"sha256": "c0535e4be2b79ffd93291305436bf889314e4a3faec05ecffcbb7df31ad9e51a"
	}
}

ملف resources.json مهم أيضًا: انتبه لأي مورد قابل للتنفيذ (مثل "type": "PE32 executable (GUI) Intel 80386, for MS Windows").

التصحيح

لوحظ أن بعض السكريبتات في البرية تستخدم new Date().getYear() بينما الصحيح هو new Date().getFullYear(). إذا لم تظهر عينة أي سلوك مشبوه، انتبه لفحوصات Date.


إذا واجهت ملفات .JSE، قم بتجميع وحدة فك التشفير وتشغيلها هكذا:

root@kitploit:~
cc decoder.c -o decoder
./decoder foo.jse bar.js
node run bar.js

التوسيع

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

سيبدو الخطأ عادةً هكذا (قد تختلف أرقام الأسطر):

root@kitploit:~
1 Jan 00:00:00 - Unknown ActiveXObject WinHttp.WinHttpRequest.5.1
Trace
    at kill (/home/CapacitorSet/box-js/run.js:24:10)
    at Proxy.ActiveXObject (/home/CapacitorSet/box-js/run.js:75:4)
    at evalmachine.<anonymous>:1:6471
    at ContextifyScript.Script.runInNewContext (vm.js:18:15)
    at ...

يمكنك أن ترى أنه تم رفع الاستثناء في Proxy.ActiveXObject، والذي يبدو هكذا:

root@kitploit:~
function ActiveXObject(name) {
	name = name.toLowerCase();
	/* ... */
	switch (name) {
		case "wscript.shell":
			return require("./emulator/WScriptShell");
		/* ... */
		default:
			kill(`Unknown ActiveXObject ${name}`);
			break;
	}
}

أضف case "winhttp.winhttprequest.5.1" جديدًا (لاحظ الأحرف الصغيرة!)، واجعله يُرجع كائن ES6 Proxy (مثل ProxiedWinHttpRequest). يُستخدم هذا لالتقاط الميزات غير المنفذة بمجرد طلبها من قبل العينة الخبيثة:

root@kitploit:~
/* emulator/WinHttpRequest.exe */
const lib = require("../lib");

module.exports = function ProxiedWinHttpRequest() {
	return new Proxy(new WinHttpRequest(), {
		get: function(target, name, receiver) {
			switch (name) {
				/* أضف هنا "مصائد" خاصة باستخدام عبارات case */
				default:
					if (name in target) return target[name];
					else lib.kill(`WinHttpRequest.${name} not implemented!`)
			}
		}
	})
}

function WinHttpRequest() {
	
}

أعد تشغيل التحليل: سيفشل مرة أخرى، ويخبرك بالضبط ما الذي لم يتم تنفيذه.

root@kitploit:~
1 Jan 00:00:00 - WinHttpRequest.open not implemented!
Trace
    at kill (/home/CapacitorSet/box-js/run.js:24:10)
    at Object.ProxiedWinHttpRequest.Proxy.get (/home/CapacitorSet/box-js/run.js:89:7)

قم بمحاكاة WinHttpRequest.open حسب الحاجة:

root@kitploit:~
function WinHttpRequest() {
	this.open = function(method, url) {
		URLLogger(method, url);
		this.url = url;
	}
}

وكرر العملية حتى يتم محاكاة الكود دون أخطاء.

المساهمون

@CapacitorSet: المطور الأصلي

@kirk-sayre-work: الصيانة

@daviesjamie:

  • حزمة npm
  • المساعدة في سطر الأوامر
  • --output-directory
  • إصلاحات الأخطاء

@ALange:

  • دعم الترميزات غير UTF-8
  • الإبلاغ عن الأخطاء

@alexlamsl, @kzc

  • نصائح حول دمج UglifyJS في box-js
  • تحسين ميزات UglifyJS المستخدمة في إزالة التعتيم

@psrok:

  • إصلاحات الأخطاء

@gaelmuller:

  • إصلاحات الأخطاء
تنزيل الأداة