يحتوي هذا المستودع على مكتبة تسمح لبرامج Linux الأصلية بتحميل وظائف واتصالها من Windows DLL.
كتقريبي ، قمت بنقل Windows Defender إلى Linux.
$ ./mpclient eicar.com
main(): Scanning eicar.com...
EngineScanCallback(): Scanning input
EngineScanCallback(): Threat Virus:DOS/EICAR_Test_File identified.
يحتوي دليل peloader على محمل PE/Coff مخصص مشتق من NDISWRAPPER. ستقوم المكتبة بمعالجة عمليات نقل وواردات ، ثم توفر واجهة برمجة تطبيقات تشبه dlopen . يدعم الرمز تصحيح الأخطاء مع GDB (بما في ذلك الرموز) ، وجمع تغطية الكتلة الأساسية ، ووقت التشغيل التثبيت والترقيع.
القصد من ذلك هو السماح بتزوير مكتبات Windows القابلة للتطوير والفعالة على Linux. قد يكون المرشحون الجيدون برامج ترميز الفيديو ، ومكتبات إزالة الضغط ، وماسحات الفيروسات ، ودلالات الصور ، وما إلى ذلك.
إذا كنت بحاجة إلى إضافة دعم لأي واردات خارجية ، فعادةً ما تكون كتابة كبار السن سريعة وسهلة.
يمكن أن يكون التوزيع الموزع والقابل للتطوير على النوافذ أمرًا صعبًا وغير فعال. وينطبق هذا بشكل خاص على منتجات أمان نقطة النهاية ، والتي تستخدم المكونات المترابطة المعقدة التي تمتد عبر kernel ومساحة المستخدم. يتطلب هذا غالبًا تدوير بيئة Windows الافتراضية بالكامل لخداعها أو جمع بيانات التغطية.
هذه مشكلة أقل في Linux ، ووجدت أن مكونات نقل منتجات Windows Antivirus إلى Linux غالبًا ما تكون ممكنة. يتيح لي ذلك تشغيل الكود الذي أختبره في الحد الأدنى من الحاويات مع القليل من النفقات العامة ، وتوسيع نطاق الاختبار بسهولة.
هذا مجرد رأي شخصي ، لكنني أعتقد أيضًا أن Linux لديه أدوات أفضل. ¯_(ツ)_/¯
MSMPENG هي خدمة حماية البرامج الضارة التي يتم تمكينها افتراضيًا على نظام التشغيل Windows 8 و 8.1 و 10 و Windows Server 2016 وما إلى ذلك. بالإضافة إلى ذلك ، تشترك Microsoft Security Essentials ، وحماية نقطة نهاية مركز النظام ، ومختلف منتجات أمان Microsoft الأخرى في نفس المحرك الأساسي.
يسمى المكون الأساسي لـ MSMPENG المسؤول عن المسح والتحليل mpengine. MPENGINE هو سطح هجوم واسع ومعقد ، يتكون من معالجات لعشرات من تنسيقات الأرشيف الباطنية ، والبوق القابلة للتنفيذ ، ومحاكيات النظام الكامل لمختلف البنى والمترجمين الفوريين لمختلف اللغات. كل هذا الرمز متاح للمهاجمين عن بُعد.
لبناء عميل الاختبار ، ببساطة اكتب make .
$ make
لاحظ أن .i686 أو :i386 لاحقة مهمة ، نحتاج إلى 32 بتات لاستخدام DLL 32bit.
| فيدورا / ريدهات | Ubuntu / Debian | تعليق |
|---|---|---|
glibc-devel.i686 | libc6-dev:i386 / libc6-dev-i386 | يختلف الاسم مع الإصدار. |
libgcc.i686 | gcc-multilib | |
readline-devel.i686 | libreadline-dev:i386 | اختياري ، يستخدم في mpscript. |
cabextract | cabextract | تستخدم لاستخراج التعريفات. |
ستحتاج إلى تنزيل ملف تحديث antimalware 32 بت من هذه الصفحة:
يجب أن يكون هذا رابطًا مباشرًا للملف الصحيح:
سيؤدي ذلك إلى تنزيل ملف يسمى mpam-fe.exe ، وهو ملف خزانة يمكن استخلاصه باستخدام cabextract . استخراج الملفات في دليل engine :
$ cabextract mpam-fe.exe
Extracting cabinet: mpam-fe.exe
extracting MPSigStub.exe
extracting mpavdlta.vdm
extracting mpasdlta.vdm
extracting mpavbase.vdm
extracting mpasbase.vdm
extracting mpengine.dll
All done, no errors.
إذا كنت تريد معرفة الإصدار الذي حصلت عليه ، جرب هذا:
$ exiftool mpengine.dll | grep 'Product Version Number'
Product Version Number : 1.1.13701.0
يسمى محمل mpengine الرئيسي mpclient ، ويقبل أسماء الملفات للمسح كمعلمة.
$ ./mpclient netsky.exe
main(): Scanning netsky.exe...
EngineScanCallback(): Scanning input
EngineScanCallback(): Threat Worm:Win32/Netsky.P@mm identified.
هناك بعض أدوات العينة الأخرى ، mpstreamfuzz و mpscript .
إذا كنت ترغب في تصحيح تصادم ، أو خطوة واحدة من خلال نقاط التوقف الروتينية أو تعيين هذه الأمثلة. أولاً ، تحتاج إلى ملف خريطة من IDA.
لا تصدر Microsoft رموزًا عامة لكل بناء ، وأحيانًا تتخلف الرموز لبضعة أشهر بعد الإصدار. تأكد من أنك تستخدم إصدار MpEngine مع توفر الرموز العامة.
استخدم سطر الأوامر العينة التالي لإنشاء ملفات MAP و IDB.
> idaw -A -P+ -S"createmap.idc mpengine.map" mpengine.dll
إذا قمت بإنشاء ملفات الخريطة على Windows ، فستحصل على محطات خطوط CRLF ، قم بإصلاحها على هذا النحو:
$ dos2unix mpengine.map
عندما تقوم بتشغيل mpclient تحت GDB ، ستكتشف تصحيح الأخطاء وطباعة الأوامر التي تحتاجها للدخول لتدريس GDB حول الرموز:
$ gdb -q ./mpclient
(gdb) r testfile.txt
Starting program: mpclient
main(): GDB: add-symbol-file engine/mpengine.dll 0xf6af4008+0x1000
main(): GDB: shell bash genmapsym.sh 0xf6af4008+0x1000 symbols_19009.o < mpengine.map
main(): GDB: add-symbol-file symbols_19009.o 0
Program received signal SIGTRAP, Trace/breakpoint trap.
0x0804d213 in main (argc=1, argv=0xffffcc64, envp=0xffffcc6c) at mpclient.c:156
156 __debugbreak();
(gdb)
إذا قمت بإدخال الأوامر التي تعرضها في GDB ، فسيكون لديك رموز متوفرة.
لاحظ أن
genmapsym.shيفترض أنك تستخدم GNU AWK.
(gdb) add-symbol-file engine/mpengine.dll 0xf6af4008+0x1000
add symbol table from file "engine/mpengine.dll" at
.text_addr = 0xf6af5008
Reading symbols from engine/mpengine.dll...done.
(gdb) shell bash genmapsym.sh 0xf6af4008+0x1000 symbols_19009.o < mpengine.map
(gdb) add-symbol-file symbols_19009.o 0
add symbol table from file "symbols_19009.o" at
.text_addr = 0x0
Reading symbols from symbols_19009.o...done.
(gdb) p as3_parsemetadata_swf_vars_t
$1 = {void (void)} 0xf6feb842 <as3_parsemetadata_swf_vars_t>
ثم يمكنك المتابعة ، وسيتم تشغيله كالمعتاد.
(gdb) c
تعمل نقاط التوقف ونقاط المراقبة والخلف بشكل طبيعي ، على الرغم من أنها قد تكون أكثر موثوقية لاستخدام نقاط توقف الأجهزة من نقاط توقف البرامج.
لاستخدام نقاط توقف الأجهزة في GDB ، يمكنك فقط استخدام hb أو hbreak بدلاً من break . لاحظ أنك تحصل فقط على عدد محدود من نقاط توقف الأجهزة.
(gdb) b as3_parsemethodinfo_swf_vars_t
Breakpoint 1 at 0xf6feb8da
(gdb) c
Continuing.
main(): Scanning test/input.swf...
EngineScanCallback(): Scanning input
Breakpoint 1, 0xf6feb8da in as3_parsemethodinfo_swf_vars_t ()
(gdb) bt
#0 0xf6feb8da in as3_parsemethodinfo_swf_vars_t ()
#1 0xf6dbad7f in SwfScanFunc ()
#2 0xf6d73ec3 in UfsScannerWrapper__ScanFile_scanresult_t ()
#3 0xf6d6c9e3 in UfsClientRequest__fscan_SCAN_REPLY ()
#4 0xf6d6a818 in UfsNode__ScanLoopHelper_wchar_t ()
#5 0xf6d6a626 in UfsNode__Analyze_UfsAnalyzeSetup ()
#6 0xf6d71f7f in UfsClientRequest__AnalyzeLeaf_wchar_t ()
#7 0xf6d71bb9 in UfsClientRequest__AnalyzePath_wchar_t ()
#8 0xf6dbbd88 in std___String_alloc_std___String_base_types_char_std__allocator_char______Myptr_void_ ()
#9 0xf6d75e72 in UfsCmdBase__ExecuteCmd__lambda_c80a88e180c1f4524a759d69aa15f87e____lambda_c80a88e180c1f4524a759d69aa15f87e__ ()
Backtrace stopped: previous frame inner to this frame (corrupt stack?)
(gdb) x/3i $pc
=> 0xf6feb8da <as3_parsemethodinfo_swf_vars_t+7>: lea ebx,[edx+0x1c]
0xf6feb8dd <as3_parsemethodinfo_swf_vars_t+10>: push esi
0xf6feb8de <as3_parsemethodinfo_swf_vars_t+11>: mov edx,ebx
هذا المشروع لا يحل محل النبيذ أو Winelib.
يتم استخدام Winelib لتنفيذ مشاريع Windows C ++ إلى Linux ، ويهدف النبيذ إلى تشغيل تطبيقات Windows كاملة. يهدف هذا المشروع إلى السماح لبرنامج Linux الأصلي بتحميل Windows DLLs البسيطة.
سيكون أقرب تشبيه هو NDISWRAPPER ولكن لمستخدمي المساحة.
GPL2