Apakah mungkin untuk "mendekompilasi" Windows .exe? Atau setidaknya melihat Majelis?

237

Seorang teman saya mengunduh beberapa malware dari Facebook, dan saya ingin tahu apa fungsinya tanpa menginfeksi diri. Saya tahu bahwa Anda tidak bisa mendekompilasi .exe, tetapi bisakah saya setidaknya melihatnya di Assembly atau melampirkan debugger?

Edit untuk mengatakan itu bukan .NET dieksekusi, tidak ada header CLI.

swilliams
sumber
3
malware dari facebook ?? dapatkah Anda menjelaskannya
Aditya Mukherji
Maaf untuk balasan yang sangat terlambat ... tapi cara saya pikir itu terjadi adalah: dia menjalankan malware, yang pada beberapa titik mem-spam semua kontaknya di FB (saya) dengan tautan ke "video" yang meminta Anda unduh "codec baru". Saya menganggapnya berperilaku seperti cacing dalam pengertian ini.
swilliams

Jawaban:

448

Dengan debugger Anda dapat melangkah melalui perakitan program secara interaktif.
Dengan disassembler , Anda dapat melihat perakitan program lebih terinci.
Dengan dekompiler , Anda dapat mengubah program kembali menjadi kode sumber parsial, dengan asumsi Anda tahu apa yang tertulis di dalamnya (yang dapat Anda temukan dengan alat gratis seperti PEiD - jika program ini dikemas, Anda harus membukanya terlebih dahulu ATAU Deteksi-itu-Mudah jika Anda tidak dapat menemukan PEiD di mana pun. DIE memiliki komunitas pengembang yang kuat di github saat ini).

Debuggers:

  • OllyDbg , gratis, debugger 32-bit yang bagus, di mana Anda dapat menemukan banyak plugin dan skrip buatan pengguna untuk menjadikannya lebih bermanfaat.
  • WinDbg , gratis, debugger yang cukup mumpuni oleh Microsoft. WinDbg sangat berguna untuk melihat internal Windows, karena ia tahu lebih banyak tentang struktur data daripada para pengingkar lainnya.
  • SoftICE , SICE ke teman. Komersial dan pengembangan dihentikan pada tahun 2006. SoftICE adalah sejenis alat hardcore yang berjalan di bawah sistem operasi (dan menghentikan seluruh sistem ketika dipanggil). SoftICE masih digunakan oleh banyak profesional, meskipun mungkin sulit untuk didapatkan dan mungkin tidak bekerja pada beberapa perangkat keras (atau perangkat lunak - yaitu, ia tidak akan bekerja pada kartu gfx Vista atau NVIDIA).

Disassembler:

  • IDA Pro (komersial) - top of the line disassembler / debugger. Digunakan oleh sebagian besar profesional, seperti analis malware dll. Biaya beberapa dolar cukup (ada versi gratis , tetapi sangat terbatas)
  • W32Dasm (gratis) - sedikit tanggal tetapi menyelesaikan pekerjaan. Saya percaya W32Dasm ditinggalkan perangkat akhir-akhir ini, dan ada banyak peretas buatan pengguna untuk menambahkan beberapa fungsionalitas yang sangat berguna. Anda harus melihat-lihat untuk menemukan versi terbaik.

Pengurai:

  • Visual Basic: VB Decompiler , komersial, menghasilkan bytecode yang dapat diidentifikasi.
  • Delphi: DeDe , gratis, menghasilkan kode sumber berkualitas baik.
  • C: HexRays , komersial, sebuah plugin untuk IDA Pro oleh perusahaan yang sama. Menghasilkan hasil yang bagus tetapi membutuhkan banyak uang, dan tidak akan dijual kepada sembarang orang (atau begitulah yang saya dengar).
  • .NET (C #): dotPeek , gratis, mendekompilasi .NET 1.0-4.5 dirakit menjadi C #. Dukungan untuk file .dll, .exe, .zip, .vsix, .nupkg, dan .winmd.

Beberapa alat terkait yang mungkin berguna dalam apa pun yang Anda lakukan adalah editor sumber daya seperti ResourceHacker (gratis) dan editor hex yang baik seperti Hex Workshop (komersial).

Selain itu, jika Anda melakukan analisis malware (atau menggunakan SICE) , saya dengan sepenuh hati menyarankan menjalankan segala sesuatu di dalam mesin virtual, yaitu VMware Workstation . Dalam kasus SICE, itu akan melindungi sistem Anda yang sebenarnya dari BSODs, dan dalam kasus malware, itu akan melindungi sistem Anda yang sebenarnya dari program target. Anda dapat membaca tentang analisis malware dengan VMware di sini .

Secara pribadi, saya roll dengan Olly, WinDbg & W32Dasm, dan beberapa alat utilitas yang lebih kecil.

Juga, ingat bahwa membongkar atau bahkan men - debug perangkat lunak orang lain biasanya terhadap EULA paling tidak :)

anon6439
sumber
16
Saya menghargai paragraf terakhir secara umum, saran yang bagus, tetapi itu lucu dalam konteks pertanyaan: Saya ragu virus datang dengan EULA! ;-)
PhiLho
4
Sebenarnya, beberapa malware dan bahkan trojan akhir-akhir ini memiliki EULA di dalamnya (oh, Rusia itu ..) Tentu saja, mereka dapat (dan) diabaikan oleh penelitian, karena dapat diasumsikan bahwa tidak ada yang akan maju untuk menuntut mereka. .. Juga, mereka biasanya ditulis dengan sangat buruk sehingga tidak berarti apa pun di pengadilan.
anon6439
2
Perhatikan bahwa versi IDA Pro sebelumnya gratis untuk penggunaan non-komersial.
Simon Buchan
6
Perhatikan bahwa sebagian besar malware hari ini (setidaknya disusun malware) dapat dengan mudah mendeteksi jika sedang berjalan di VMWare, Virtual PC, WINE, VirtualBox, dll
Mick
Jika Anda menggunakan VM, waspadai serangan Blue Pill.
Siqi Lin
44

posting psoul yang luar biasa menjawab pertanyaan Anda sehingga saya tidak akan meniru pekerjaan baiknya, tetapi saya merasa itu akan membantu untuk menjelaskan mengapa ini sekaligus merupakan pertanyaan yang benar-benar valid tetapi juga sangat konyol. Bagaimanapun, ini adalah tempat untuk belajar, bukan?

Program komputer modern diproduksi melalui serangkaian konversi, dimulai dengan input dari badan teks yang dapat dibaca manusia (disebut "kode sumber") dan diakhiri dengan tubuh instruksi yang dapat dibaca komputer (disebut sebagai alternatif "biner" atau "mesin" kode").

Cara komputer menjalankan seperangkat instruksi kode mesin pada akhirnya sangat sederhana. Setiap tindakan yang dapat dilakukan prosesor (mis., Membaca dari memori, menambahkan dua nilai) diwakili oleh kode numerik. Jika saya katakan kepada Anda bahwa angka 1 berarti berteriak dan angka 2 berarti cekikikan, dan kemudian mengangkat kartu dengan 1 atau 2 pada mereka mengharapkan Anda untuk berteriak atau terkikik sesuai, saya akan menggunakan apa yang pada dasarnya adalah sistem yang sama yang digunakan komputer mengoperasikan.

File biner hanyalah seperangkat kode-kode itu (biasanya memanggil "kode op") dan informasi ("argumen") yang digunakan oleh kode op.

Sekarang, bahasa assembly adalah bahasa komputer di mana setiap kata perintah dalam bahasa tersebut mewakili tepat satu op-code pada prosesor. Ada terjemahan 1: 1 langsung antara perintah bahasa assembly dan kode-prosesor. Inilah mengapa perakitan kode untuk prosesor x386 berbeda dari perakitan kode untuk prosesor ARM.

Pembongkaran hanyalah ini: sebuah program membaca biner (kode mesin), mengganti op-kode dengan perintah bahasa assembly yang setara, dan menampilkan hasilnya sebagai file teks. Penting untuk memahami ini; jika komputer Anda dapat membaca biner, maka Anda dapat membaca biner juga, baik secara manual dengan tabel kode-op di tangan Anda (ick) atau melalui disassembler.

Disassembler memiliki beberapa trik baru dan semuanya, tetapi penting untuk dipahami bahwa disassembler pada akhirnya adalah mekanisme pencarian dan penggantian. Itulah sebabnya setiap EULA yang melarangnya pada akhirnya menghembuskan udara panas. Anda tidak dapat sekaligus mengizinkan komputer membaca data program dan juga melarang komputer membaca data program.

(Jangan salah paham, ada upaya untuk melakukannya. Mereka berfungsi sebaik DRM pada file lagu.)

Namun, ada peringatan untuk pendekatan pembongkaran. Nama variabel tidak ada; hal seperti itu tidak ada pada CPU Anda. Panggilan perpustakaan membingungkan sekali dan seringkali membutuhkan pembongkaran binari lebih lanjut. Dan kebaktian sulit sekali dibaca dalam kondisi terbaik.

Kebanyakan programmer profesional tidak bisa duduk dan membaca bahasa rakitan tanpa sakit kepala. Bagi seorang amatir, itu tidak akan terjadi.

Bagaimanapun, ini adalah penjelasan yang agak terlalu jelas, tapi saya harap ini membantu. Setiap orang dapat merasa bebas untuk memperbaiki salah saji di pihak saya; sudah lama. ;)

Jason L.
sumber
1
Ini menguraikan pembongkaran, tetapi saya ingin mendengar penjelasan tentang penguraian. Apakah itu akan membuahkan hasil? Apa peringatannya?
Prometheus
@telah: Mengurai kode asli adalah tantangan yang cukup sulit, sering kali mustahil. Pengoptimal sangat agresif, sering menerjemahkan kode sumber menjadi tidak ada sama sekali. Anda tidak dapat mendekompilasi apa pun.
IInspectable
11

Setiap debugger yang layak dapat melakukan ini. Coba OllyDbg . (sunting: yang memiliki disassembler hebat yang bahkan menerjemahkan kode untuk panggilan WinAPI!)

utku_karatas
sumber
10

x64dbg adalah debugger sumber yang baik dan terbuka yang dikelola secara aktif.

BullyWiiPlaza
sumber
6

Tentu, lihat IDA Pro . Mereka menawarkan versi eval sehingga Anda dapat mencobanya.

Douglas Mayle
sumber
6

Jika Anda hanya mencoba mencari tahu apa yang dilakukan malware, mungkin akan lebih mudah untuk menjalankannya di bawah sesuatu seperti alat Monitor Proses gratis yang akan melaporkan setiap kali mencoba mengakses sistem file, registri, port, dll ...

Juga, menggunakan mesin virtual seperti server VMWare gratis sangat membantu untuk pekerjaan semacam ini. Anda dapat membuat gambar "bersih", dan kemudian kembali ke situ setiap kali Anda menjalankan malware.

joeld
sumber
4

Anda mungkin mendapatkan beberapa informasi yang melihatnya secara bersamaan, tetapi saya pikir hal yang paling mudah untuk dilakukan adalah menyalakan mesin virtual dan melihat apa yang dilakukannya. Pastikan Anda tidak memiliki saham terbuka atau hal seperti itu yang dapat dilompati;)

Rob Prouse
sumber
Ya, saya memikirkannya, tapi saya lebih suka tidak repot-repot menyiapkan VM hanya untuk membunuhnya :)
swilliams
1
Benar, ini merepotkan untuk kasus yang satu ini, tapi saya selalu merasa berguna untuk menjaga VM di sekitar untuk menguji perangkat lunak baru atau hal-hal seperti ini. Saya kemudian dapat melakukan apa yang saya suka dan hanya memilih untuk tidak menyimpan keadaan di akhir dan kembali ke VM bersih untuk menjalankan selanjutnya.
Rob Prouse
4

Boomerang juga layak untuk dicoba.

Andru Luvisi
sumber
Tidak juga. itu crash dan terbakar untuk sesuatu yang lebih rumit daripada executable paling sepele.
shoosh
4

Yang Anda inginkan adalah jenis perangkat lunak yang disebut "Disassembler".

Google cepat menghasilkan ini: Tautan

Corey Trager
sumber
Anda tidak menjelaskan ini
scitronboy
3

Aku tidak percaya tidak ada yang mengatakan apa-apa tentang Imunitas Debugger .

Immunity Debugger adalah alat yang ampuh untuk menulis eksploit, menganalisis malware, dan membalikkan file biner. Awalnya didasarkan pada kode sumber Ollydbg 1.0, tetapi dengan bug perbaikan nama yang diperbaiki. Ini memiliki API Python yang didukung dengan baik untuk ekstensibilitas yang mudah, sehingga Anda dapat menulis skrip python untuk membantu Anda dalam analisis.

Juga, ada Peter yang baik dari tim Corelan menulis disebut mona.py , alat yang sangat baik btw.

jyz
sumber
2

Jika Anda ingin menjalankan program untuk melihat apa yang dilakukannya tanpa menginfeksi komputer Anda, gunakan dengan mesin virtual seperti VMWare atau Microsoft VPC, atau program yang dapat mem -sandbox program seperti SandboxIE

Joel Lucsy
sumber
2

Anda dapat menggunakan dotPeek, sangat bagus untuk mendekompilasi file exe. Ini gratis.

https://www.jetbrains.com/decompiler/

Apakah Nhu Vy
sumber
1
Mengapa dotpeek memberi exe saya tidak didukung?
SarveshwarPM
2

Saya akan mengatakan pada tahun 2019, Ghidra ( https://ghidra-sre.org/ ) layak untuk dicoba. Ini open source (dan gratis), dan memiliki kemampuan analisis kode fenomenal, termasuk kemampuan untuk mendekompilasi semua jalan kembali ke kode C yang cukup mudah dibaca.

Dylan McNamee
sumber
0

Paket explorer dapat melakukan apa yang Anda inginkan.

FloatFish
sumber