Repositori ini berisi perpustakaan yang memungkinkan program Linux asli memuat dan memanggil fungsi dari Windows DLL.
Sebagai demonstrasi, saya telah porting Windows Defender ke Linux.
$ ./mpclient eicar.com
main(): Scanning eicar.com...
EngineScanCallback(): Scanning input
EngineScanCallback(): Threat Virus:DOS/EICAR_Test_File identified.
Direktori peloader berisi loader PE/Coff kustom yang berasal dari NDISWRAPPER. Perpustakaan akan memproses relokasi dan impor, kemudian menyediakan API seperti dlopen . Kode mendukung debugging dengan GDB (termasuk simbol), koleksi cakupan blok dasar, dan pengait dan penambalan runtime.
Tujuannya adalah untuk memungkinkan fuzzing perpustakaan windows mandiri yang dapat diskalakan dan efisien di Linux. Kandidat yang baik mungkin codec video, perpustakaan dekompresi, pemindai virus, decoder gambar, dan sebagainya.
Jika Anda perlu menambahkan dukungan untuk impor eksternal apa pun, stubs menulis biasanya cepat dan mudah.
Fuzzing yang didistribusikan, scalable pada jendela bisa menantang dan tidak efisien. Ini terutama berlaku untuk produk keamanan titik akhir, yang menggunakan komponen yang saling berhubungan kompleks yang membentang melintasi kernel dan ruang pengguna. Ini sering membutuhkan pemintalan seluruh lingkungan Windows tervirtualisasi untuk membubarkan mereka atau mengumpulkan data cakupan.
Ini kurang menjadi masalah di Linux, dan saya telah menemukan bahwa komponen porting produk antivirus Windows ke Linux sering dimungkinkan. Ini memungkinkan saya untuk menjalankan kode yang saya uji dalam wadah minimal dengan overhead yang sangat sedikit, dan dengan mudah meningkatkan pengujian.
Ini hanya pendapat pribadi, tetapi saya juga berpikir Linux memiliki alat yang lebih baik. ¯_(ツ)_/¯
MSMPeng adalah layanan perlindungan malware yang diaktifkan secara default pada Windows 8, 8.1, 10, Windows Server 2016, dan sebagainya. Selain itu, Microsoft Security Essentials, System Center Endpoint Protection dan berbagai produk keamanan Microsoft lainnya berbagi mesin inti yang sama.
Komponen inti dari MSMPeng yang bertanggung jawab untuk pemindaian dan analisis disebut mpengine. Mpengine adalah permukaan serangan yang luas dan kompleks, terdiri dari penangan untuk lusinan format arsip esoterik, pengemas yang dapat dieksekusi, emulator sistem penuh untuk berbagai arsitektur dan penerjemah untuk berbagai bahasa. Semua kode ini dapat diakses oleh penyerang jarak jauh.
Untuk membangun klien tes, cukup ketik make .
$ make
Perhatikan bahwa sufiks .i686 atau :i386 penting, kita membutuhkan perpustakaan 32bit untuk menggunakan 32bit DLL.
| Fedora / Redhat | Ubuntu / Debian | Komentar |
|---|---|---|
glibc-devel.i686 | libc6-dev:i386 / libc6-dev-i386 | Nama bervariasi dengan versi. |
libgcc.i686 | gcc-multilib | |
readline-devel.i686 | libreadline-dev:i386 | Opsional, digunakan dalam mpscript. |
cabextract | cabextract | Digunakan untuk mengekstrak definisi. |
Anda perlu mengunduh file pembaruan antimalware 32-bit dari halaman ini:
Ini harus menjadi tautan langsung ke file yang tepat:
Ini akan mengunduh file yang disebut mpam-fe.exe , yang merupakan file kabinet yang dapat diekstraksi dengan cabextract . Ekstrak file ke direktori 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.
Jika Anda ingin tahu versi mana yang Anda dapatkan, coba ini:
$ exiftool mpengine.dll | grep 'Product Version Number'
Product Version Number : 1.1.13701.0
MPEngine Loader utama disebut mpclient , ia menerima nama file untuk dipindai sebagai parameter.
$ ./mpclient netsky.exe
main(): Scanning netsky.exe...
EngineScanCallback(): Scanning input
EngineScanCallback(): Threat Worm:Win32/Netsky.P@mm identified.
Ada beberapa alat sampel lainnya, mpstreamfuzz dan mpscript .
Jika Anda ingin men -debug kecelakaan, satu langkah melalui rutinitas atau mengatur breakpoint, ikuti contoh -contoh ini. Pertama, Anda memerlukan file peta dari IDA.
Microsoft tidak merilis simbol publik untuk setiap bangunan, dan kadang -kadang simbol tertinggal selama beberapa bulan setelah rilis. Pastikan Anda menggunakan versi Mpengine dengan simbol publik yang tersedia.
Gunakan commandline sampel berikut untuk menghasilkan file peta dan IDB.
> idaw -A -P+ -S"createmap.idc mpengine.map" mpengine.dll
Jika Anda menghasilkan file peta di windows, Anda akan mendapatkan terminator garis CRLF, perbaiki seperti ini:
$ dos2unix mpengine.map
Saat Anda menjalankan MPClient di bawah GDB, itu akan mendeteksi debugger dan mencetak perintah yang perlu Anda masukkan untuk mengajar GDB tentang simbol:
$ 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)
Jika Anda memasukkan perintah yang ditampilkan ke GDB, Anda akan memiliki simbol yang tersedia.
Perhatikan bahwa
genmapsym.shmengasumsikan Anda menggunakan 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>
Kemudian Anda dapat melanjutkan, dan itu akan berjalan seperti biasa.
(gdb) c
Breakpoints, Watchpoints dan Backtraces semuanya berfungsi seperti biasa, meskipun mungkin lebih andal menggunakan breakpoint perangkat keras daripada breakpoint perangkat lunak.
Untuk menggunakan breakpoint perangkat keras di GDB, Anda hanya menggunakan hb atau hbreak alih -alih break . Perhatikan bahwa Anda hanya mendapatkan sejumlah breakpoint perangkat keras.
(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
Proyek ini tidak menggantikan anggur atau Winelib.
Winelib digunakan untuk port proyek Windows C ++ ke Linux, dan anggur dimaksudkan untuk menjalankan aplikasi Windows lengkap. Proyek ini dimaksudkan untuk memungkinkan kode Linux asli memuat DLL Windows sederhana.
Analogi terdekat adalah ndiswrapper tetapi untuk ruang pengguna.
Gpl2