Sebuah Panduan Runtime Crypters

Hasil gambar untuk crypters runtime
Selamat Datang para pembaca, untuk panduan dan langkah-langkah di crypters runtime bagian ini secara khusus akan mencakup sistem Windows, jadi jika Anda pembenci dan merasa ngeri pada bayi Microsoft, jangan ragu untuk menutup tab ini, menghapus riwayat Anda, keluar dari browser Anda.
Artikel berikut ini tentang detail internal Portable Executable (PE) Format dan beberapa konsep dari manajemen memori Windows. hanya akan mencakup informasi yang relevan sehingga jika Anda ingin memahami lebih, Anda akan perlu melakukan penelitian lebih lanjut.
Catatan:
Kami masih sedang belajar lebih lanjut tentang ini, jika Anda kebetulan mendapatkan informasi yang salah, silakan tinggalkan komentar di bawah ini atau drop pesan di inbox.
Disclaimer:
Ini adalah artikel yang menunjukkan bagaimana runtime crypter bekerja. Hal ini dimaksudkan untuk menjadi panduan, bukan tutorial sehingga tidak setiap bagian kecil dari informasi akan diberikan.
Pengantar Portable Executable Format file PE adalah file Windows format yang didasarkan pada dan merupakan modifikasi untuk Unix Common Object File Format (COFF), spesifikasi untuk dieksekusi, objek atau berbagi file library. Ini berasal sebagai hasil dari evolusi ke dalam Windows NT dan Windows 95 sistem yang memungkinkan sistem operasi untuk dapat lebih efisien memuat program ke dalam memori yang bertentangan dengan implementasi di DOS. Mari kita lihat ke dalam tingkat tinggi gambaran representasi dari sebuah file PE. Gambar berikut adalah ekstrak dari PE 101 - Windows Executable Walkthrough dan The PE Format oleh Ange Albertini, pe101.corkami.com , corkami.blogspot.com .
Kita bisa lihat di sini bahwa format PE dibagi menjadi dua bagian utama: bagian header.
Header berisi informasi penting tentang file seperti manajemen secara keseluruhan (lokasi dan ukuran) dan bagaimana harus ditangani dalam memori.
Bagian yang mana data yang sebenarnya berada seperti kode, data dan sumber daya (ikon, gambar, GUI, dll).
Kita sekarang akan melihat lebih dalam dua segmen tersebut.
PE Header
Mari kita menutupi header pertama.
DOS header berisi banyak nilai-nilai tapi karena artikel ini hanya akan berfokus pada rincian penting, hanya ada dua anggota yang digunakan. Anggota e_magic juga dikenal sebagai signature DOS menyatakan bahwa file tertentu adalah file biner. Tanda tangan adalah 'MZ' atau 0x5A4D (Little Endian) singkatan Mark Zbikowski yang merupakan salah satu pengembang MS-DOS.
Apa yang biasanya datang setelah header DOS adalah program rintisan DOS. Kita tidak bisa melihatnya di sini tapi itu ada (percaya padaku). Apa yang terjadi ketika dieksekusi dijalankan dalam lingkungan DOS adalah bahwa hal itu akan mengeksekusi program rintisan DOS. Biasanya, ia hanya akan menampilkan pesan "Program ini tidak dapat dijalankan dalam mode DOS". Saya yakin Anda pernah melihat ini sebelumnya jika Anda membuka dieksekusi di Notepad. Tentu saja, stub DOS dapat dimodifikasi mengandung program DOS yang lengkap atau apa pun yang Anda inginkan. Karena itu, ukuran dapat bervariasi dan sebagai hasilnya, anggota terakhir dari header DOS, e_lfanew, menunjuk ke awal header PE menggunakan apa yang kita sebut relatif offset. Apa itu relatif? Awal gambar dieksekusi, AKA, ImageBase ketika dalam memori. Kita akan melihat ini ketika kita mencapai itu.
Header PE atau dikenal sebagai header NT berisi dua header yang lebih kecil di dalam tetapi dalam gambar ini, kita hanya dapat melihat satu: header Opsional. Yang lain disebut header file yang datang langsung dari COFF tersebut. Anggota pertama dari header PE adalah tanda tangan PE yang memiliki nilai 'PE \ 0 \ 0', yaitu "PE" dengan dua byte nol dan merupakan file PE.
Pada header File, kita bisa melihat NumberOfSections anggota yang disebut yang berisi jumlah bagian file biner memiliki. Kita juga dapat melihat Karakteristik yang menyatakan apakah file biner adalah EXE, DLL, dll
Pada header Opsional, ada AddressOfEntryPoint, ImageBase, SizeOfImage dan SizeOfHeaders anggota. The AddressOfEntryPoint adalah relatif offset (lagi!) Untuk entry point, AKA, di mana kode dimulai eksekusi. Anggota ImageBase menggambarkan lokasi alamat dalam memori dari mana seluruh file PE harus diambil dari (awal) dan nilai ini biasanya 0x00400000. Semua offset relatif atau relatif Virtual Alamat (RVA) dihitung dari titik ini. Anggota menarik terakhir adalah SizeOfImage yang berisi ukuran seluruh gambar executable, yaitu ukuran header + ukuran bagian dalam memori. Jika kita hanya ingin ukuran header (semua header gabungan), yang SizeOfHeaders akan memberikan data yang bagi kita.
Kami akan melewatkan bagian direktori data karena tidak penting bagi kami. Secara singkat, direktori data berisi informasi tentang lokasi Impor dan tabel Ekspor, Sumber Daya, Sertifikat, informasi Copyright, dll
Akhirnya, kita memiliki header Bagian yang berisi informasi dari bagian sebagai meja.
Anggota Nama berisi nama bagian (.text, DATA, .rdata, .idata, .edata, .crt, .tls, dll) dengan maksimum delapan karakter tidak termasuk terminating byte nol (bagi mereka yang melakukan C / ++ atau bahasa lain yang serupa).
Anggota VirtualSize adalah ukuran bagian dalam memori dan VirtualAddress adalah RVA dari bagian (dari ImageBase). The SizeOfRawData dan PointerToRawData adalah anggota yang rinci data fisik file pada disk. The SizeOfRawData adalah ukuran bagian dan PointerToRawData adalah file offset untuk awal bagian (dari awal file). Karakteristik masing-masing negara bagian bagaimana setiap bagian harus ditangani, apakah itu dieksekusi atau read-only, dll
Bagian PE
Bagian dalam file PE yang mana informasi yang sebenarnya disimpan. Mari kita menutupi beberapa bagian umum: .text, DATA, .rdata, .idata.
Bagian .text (atau kode untuk Borland) adalah dimana kode executable ada dan diberi Karakteristik CODE, EXECUTE dan BACA. Kami ingin menjadi executable dan read-only karena kita tidak ingin ada yang korup data.
Bagian DATA adalah tempat data global disimpan ... Ya, itu cukup banyak itu ... .rdata adalah read-only bagian dari DATA, yaitu konstanta ada di sini seperti string.
Terakhir, .idata adalah di mana impor, AKA, fungsi impor untuk dieksekusi. Ini juga termasuk nama-nama DLL masing dari mana fungsi diimpor.
Seperti yang bisa kita lihat di atas, fungsi impor ExitProcess dan MessageBox diimpor dari DLL kernel32 dan user32 masing-masing. Untuk C library standar, fungsi impor seperti printf dan malloc berasal dari msvcrt (Microsoft Visual C ++ Run Time) perpustakaan.
PE Format Kesimpulan
Itu saja untuk pengenalan ke format PE. Seperti bisa Anda lihat, ada BANYAK terjadi jadi jika Anda ingin mempelajari lebih lanjut, Anda harus penelitian sendiri.
Selingan
Sebelum kita dapat benar-benar rinci bagaimana crypters runtime bekerja, kita perlu tahu bagaimana beban Windows file PE ke dalam memori. Berikut dasarnya adalah apa yang tampak seperti.
Ketika Windows peta file eksekusi ke dalam memori, itu cukup banyak hal yang sama seperti pada disk kecuali bahwa bagian akan dibagi menjadi bagian mereka sendiri dalam memori sesuai. Informasi untuk ini terletak pada header bagian bagian masing-masing ini.
Sekarang mari kita lihat bagaimana crypters runtime melakukan sihir mereka ...
Menguraikan Misteri Runtime Crypter
Akhirnya, kita telah mencapai bagian yang menarik dari artikel! Merayu! Jangan buang-buang waktu dan menyelam ke lubang kelinci!
Sebuah metode yang crypters runtime dapat menggunakan disebut Run PE atau Dinamis forking proses. Apakah ini berarti bahwa crypter kami akan terus informasi file PE yang dikaburkan yang akan dibentuk dalam memori dan kemudian dieksekusi sebagai suatu proses.
Langkah 1: Membuat Proses
Kita harus membuat proses pertama untuk mendapatkan pegangan untuk proses dan benang dari kami segera-to-be malware (atau tidak, apa pun yang Anda inginkan). Kami akan melakukan ini dengan menggunakan CreateProcess fungsi dengan bendera CREATE_ SUSPENDED untuk menangguhkan benang.
Langkah 2: Mengalokasikan Virtual ruang memori
Kami akan membutuhkan ruang memori yang cukup besar untuk menampung seluruh gambar executable kami tapi bagaimana kita tahu seberapa besar itu? Jika kita melihat kembali sedikit pada artikel ini, saya telah menyatakan bahwa anggota SizeOfImage dari header Opsional menyimpan ukuran ruang memori yang dibutuhkan. Mulai dari alamat dasar Opsional sundulan ini anggota ImageBase, kita menggunakan VirtualAllocEx untuk mengalokasikan ruang yang diperlukan bagi kita. Inilah yang ruang memori kita akan terlihat seperti:
Langkah 3: Menulis Header untuk Memory
sekarang kita harus mulai menulis file PE ke dalam ruang memori. Pertama, kita akan menulis dalam informasi header. Kita bisa mendapatkan ukuran semua header dikombinasikan dengan nilai SizeOfHeaders header Opsional ini. Sekali lagi, mulai dari ImageBase, kita menulis informasi header file PE kami ke memori menggunakan WriteProcessMemory fungsi. Inilah yang ingatan kita akan terlihat seperti:
Langkah 4: Menulis Bagian ke Memory
Yang kita butuhkan sekarang adalah untuk menulis bagian ke dalam memori. Menggunakan WriteProcessMemory lagi, kami akan melakukan tugas ini menggunakan informasi dari header bagian. Kali ini, bukan mulai dari ImageBase, kita harus menghitung mulai alamat virtual seksi (kepala bagian ini anggota VirtualAddress) dan menulis sampai semua data telah ditulis menggunakan kepala bagian ini anggota SizeOfRawData. Ingat, kita perlu melakukan ini untuk semua bagian.
Langkah 5: Melanjutkan Thread
Semuanya telah ditulis ke ruang memori dari disk dan kita sekarang dapat melanjutkan untuk melanjutkan thread menggunakan ResumeThread fungsi. malware kami (atau apa pun yang Anda inginkan) sekarang berjalan sebagai proses dalam memori! Sangat baik! Tugas kita crypter ini dilakukan.
Langkah 6: ??? ???
Langkah 7: Profit Keuntungan!
Membandingkan ScanTime dan Runtime Crypters
Sebelum menulis artikel ini, saya telah diuji dan dibandingkan saya crypter ScanTime dan saya runtime crypter. Jika Anda belum membaca artikel saya tentang membuat ScanTime crypter dasar dalam C, silakan ikuti tautan ini .
Berikut rincian ke dalam penerapan dua crypters ini dengan RAT komersial, Dark Comet. Antivirus yang digunakan adalah AVG yang merupakan produk umum untuk pengguna standar. Kami akan mengasumsikan bahwa sistem milik pengguna standar sehingga kita dapat mengukur efektivitas setiap crypter.
Berikut adalah file di Desktop.
Di paling kiri, adalah runtime crypter dengan dikaburkan (XOR-dienkripsi) Gelap Comet dalam program. Di tengah adalah ScanTime crypter dasar dengan gelap Comet yang dikaburkan di atasnya. Di sebelah kanan adalah telanjang executable Gelap Comet dan sqlite3.dll nya yang diperlukan untuk menjalankannya. AVG saat ini dinonaktifkan. Mari kita aktifkan dan melihat apa yang terjadi.
Segera, kita dapat melihat bahwa telanjang Gelap Comet telah terdeteksi dan dibersihkan sehingga tidak dapat dieksekusi. Saya kemudian melanjutkan untuk memilih "Protect Me" pilihan untuk menghapusnya.
Sekarang mari kita uji crypter ScanTime saya.
Menggunakan baris perintah, saya mencoba untuk mendekripsi dikaburkan Gelap Comet ke dalam biner DC.exe ...
Tapi itu akan ditolak. Karena menulis file kembali ke disk, AVG akhirnya mendeteksi sebagai hasil dalam hanyalah telanjang gelap Comet executable. Tidak beruntung di sini! Kami memiliki satu kesempatan lagi dengan runtime crypter.
Mari kita jalankan dan melihat apa yang terjadi ...
Itu bekerja! Sebuah keberhasilan yang cemerlang! Amazing! Karena langsung beban executable kami di memori, ia menghindari konsekuensi dari crypter ScanTime kami dan karena itu adalah teknik jauh lebih efektif. Bahkan, crypter ScanTime telah terdeteksi oleh AVG jadi aku harus menambahkannya ke daftar pengecualian untuk dapat menunjukkan ini untuk kalian dan gals.
Kesimpulan
Jika Anda merasa bingung, silahkan, melakukan penelitian! Semoga Anda menikmati artikel ini (agak panjang, mudah-mudahan tidak terlalu membosankan) dan sekarang setidaknya Anda memahami apa yang terjadi! Terima kasih sudah membaca!




























































Comments

Popular Posts