Bagaimana cara mendekompilasi .NET EXE menjadi kode sumber C # yang dapat dibaca?

259

Saya menulis aplikasi C # untuk klien beberapa tahun yang lalu, tetapi saya tidak lagi memiliki kode sumber. Semua yang saya miliki adalah EXE yang saya gunakan pada PC klien. Apakah ada cara saya dapat menghasilkan kode sumber C # dari EXE?

MusiGenesis
sumber
2
Baik. Lihat di sini ... Teleriks JustDecompile sebenarnya mendekompilasi DLL yang Red Gates Reflector benar-benar kacau ... ada banyak masalah dengan Reflector ... JustDecompile ... tanpa cacat sejauh ini ...
Marc Johnston
1
Saya telah menggunakan JustDecompile untuk waktu yang cukup lama dan sangat bagus dalam mendekompilasi dan mengemas file sumber sebagai comproject yang siap dikompilasi. Ini benar-benar aktif dalam pengembangan dan tampaknya tidak ada masalah terbuka di repo mereka github.com/telerik/JustDecompileEngine
David Chelliah

Jawaban:

194

Reflektor dan add-in FileDisassembler .

Reflektor akan memungkinkan untuk melihat kode sumber. FileDisassembler akan memungkinkan Anda untuk mengubahnya menjadi solusi VS.

GEOCHET
sumber
4
Salinan Reflektor saya memiliki opsi "Ekspor ..." dan saya tidak menginstal plug-in. Ini menciptakan proyek VS dengan semua kode sumber dan sumber daya. Jadi mengapa semua orang menyarankan FileDisassembler? Ini lebih baik?
Lucas
Lucas: Di luar kotak, saya belum melihat reflektor dapat melakukan ini. FileDisassembler selalu menjadi satu-satunya cara. Ini mungkin telah berubah dalam sejarah baru-baru ini meskipun saya kira. Saya akan memeriksanya.
GEOCHET
PENOLONG! bodoh pantat TFS menghapus proyek saya. Meskipun saya memang memberitahu TFS untuk menghapus sendiri tetapi tidak berharap untuk menghapus proyek dari sistem file lokal. terima kasih semuanya sama. x
Christo
Di mana FileDisassembler? : /
Tom Stickel 3-15
Ini berfungsi hanya untuk .Net framework. alat apa pun yang berfungsi untuk exe .Net core 3.0?
Somnath Kadam
144

Ketika Red Gate mengatakan tidak akan ada lagi versi gratis .Net Reflector, saya mulai menggunakan ILSpy dan JustDecompile milik Telerik . Saya telah menemukan ILSpy untuk mendekompilasi lebih akurat daripada JustDecompile (yang masih dalam Beta). Red Gate telah mengubah keputusan mereka dan masih memiliki versi gratis .Net Reflector, tapi sekarang saya suka ILSpy.

Dari situs web ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy adalah open source browser browser dan dekompiler.

Fitur ILSpy

  • Perambanan perakitan
  • IL Disassembly
  • Dekompilasi ke C #
  • Mendukung lambdas dan 'imbal hasil'
  • Menampilkan dokumentasi XML
  • Hemat sumber daya
  • Mencari jenis / metode / properti (substring)
  • Navigasi tipe / metode / properti berbasis hyperlink
  • Navigasi tipe Dasar / Turunan
  • Riwayat navigasi
  • Dekompiler BAML ke XAML
  • Simpan Majelis sebagai Proyek C #
  • Temukan penggunaan bidang / metode
  • Extensible via plugins (MEF)

Memperbarui:

15 April 2012, ILSpy 2.0 dirilis. Fitur baru dibandingkan dengan versi 1.0:

  • Daftar Majelis
  • Dukungan untuk mendekompilasi pohon Ekspresi
  • Dukungan untuk operator terangkat pada nullables
  • Dekompilasi ke Visual Basic
  • Mencari beberapa string yang dipisahkan oleh ruang (mencari "Manajer perakitan" di ILSpy.exe akan menemukan AssemblyListManager)
  • Mengklik pada variabel lokal akan menyoroti semua kejadian lain dari variabel itu
  • Ctrl + F dapat digunakan untuk mencari dalam tampilan kode yang dikompilasi

Memperbarui:

  • ILSpy 2.1 mendukung dekompilasi async / menunggu
Daniel
sumber
1
Saya menggunakan 2.2 dan mendukung dekompilasi ke IL, VB.NET, dan C #. Saya menemukan ini sangat berguna.
VoteCoffee
1
Tampaknya Telerik tertarik untuk mengumpulkan informasi yang meragukan dari komputer yang menjalankannya dan ILSpy tidak dapat dikompilasi dari sumber. Biner ILSpy juga mencampur nama-nama variabel dan menempatkan beberapa karakter aneh dalam kode sumber.
AaA
1
Perhatikan bahwa ILSpy menyertakan add-in Visual Studio. Untuk ILSpy 2.4 saya menambahkan kemampuan untuk menavigasi dari kode sumber Visual Studio Anda langsung ke output yang dikompilasi. Sayangnya ada beberapa perbaikan terbaru yang sekarang digabungkan ke garis utama ILSpy tetapi tidak membuat rilis 2.4.
yoyo
Cemerlang! Ada perusahaan perangkat lunak yang menagih orang £ 100 waktu bagi mereka untuk menggunakan alat "khusus" pada server Anda untuk memperbaiki masalah. Berhasil mendapatkan salinan alat yang mereka gunakan saat terhubung, dan kemudian berhasil menggunakan ILSpy dengan sangat mudah untuk mendapatkan alat membuka kata sandi. Tidak ada lagi pelanggan ripping!
user2924019
ILSpy adalah yang terbaik
Pritam
65

Reflector tidak lagi gratis secara umum, tetapi mereka menawarkannya secara gratis untuk pengembang open source: http://reflectorblog.red-gate.com/2013/07/open-source/

Tetapi beberapa perusahaan seperti DevExtras dan JetBrains telah menciptakan alternatif gratis:

DevExtras CodeReflect

JetBrains DotPeek

busur
sumber
5
Reflektor seperti $ 35. Melanggar bank saya tahu, tapi nilainya 10x itu.
StingyJack
7
Sebaiknya tambahkan Telerik JustDecompile ke daftar dekompiler rakitan NET gratis juga. telerik.com/justdecompile
Todd
3
@ StingyJack: Bagus, sepertinya mereka mendengarmu! Sekarang sebenarnya 10 harga di $ 368 jika Anda ingin disassembler VS2012. : /
DeepSpace101
1
Saya tidak menentang mereka untuk menghasilkan uang, tetapi ILSpy (disebutkan) dalam jawaban @ Daniel adalah apa yang saya gunakan sekarang.
StingyJack
1
Sekarang harganya $ 100 untuk versi standar dan $ 200 untuk versi yang terintegrasi dengan Visual Studios. Itu angka inflasi. Meskipun mereka menawarkan hal-hal gratis untuk pengembang open source: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee
35

Reflektor dan add-in File Disassembler dari Denis Bauer. Ini sebenarnya menghasilkan proyek sumber dari majelis, di mana Reflector sendiri hanya menampilkan sumber yang dibongkar.

TAMBAH: Favorit saya yang terbaru adalah dotPeek JetBrains .

ProfK
sumber
Saya suka itu dotPeek memungkinkan bekerja dengan seluruh folder dengan mudah, tetapi pada hari ini mereka hanya mendekompilasi ke c #. Sebagian besar pengurai lainnya juga melakukan vb dan IL. Ini juga hanya mendukung hingga Net 4.5 sedangkan Telerik mendukung 4.5.1
VoteCoffee
jadi dotPeek benar-benar gratis atau mereka memiliki batasan untuk versi berbayar ?. saya tidak bisa melihat informasi di situs web jetbrains mengenai hal itu.
batmaci
29

Telerik JustDecompile gratis dan memiliki fitur untuk membuat proyek dari majelis .NET.

kodefuguru
sumber
Telerik menawarkan kemampuan untuk mendekompilasi ke VB.NET, IL, atau C # .NET yang menurut saya berguna. Ini juga otomatis memilih kerangka kerja dan memiliki plug-in yang tersedia untuk deobfuscicating. Juga, mendukung .NET 4.5.1. Sepertinya cukup bagus.
VoteCoffee
1
Saya mencoba semua solusi di sini dalam posting ini dan JustDecompile adalah satu-satunya yang berfungsi dengan baik untuk saya.
Alvaro Pereira
24

Saya terkejut tidak ada yang menyebut - nyebut ildasme Microsoft . Mungkin tidak secantik ILSpy atau Reflector, tetapi ia hadir dengan Visual Studio sehingga banyak pengembang sudah memilikinya.

Untuk menjalankannya (dengan asumsi VS 2013, harus serupa untuk versi lain):

  1. Pilih Mulai> Semua Program> Visual Studio 2013> Alat Visual Studio.
  2. Klik dua kali pada Command Command Prompt untuk VS2013.
  3. Jalankan "ildasm" dari prompt perintah yang dihasilkan.
  4. Di alat, pilih File> Buka dan buka executable atau DLL Anda.

Sekarang Anda dapat menavigasi struktur DLL. Klik dua kali pada anggota kelas untuk melihat IL. Gunakan File> Dump untuk mengekspor IL ke file.

yoyo
sumber
Saya menemukan IL DASM sedikit biadab. Ini menunjukkan pohon, tetapi ketika mengklik kanan tidak melakukan apa-apa saya menemukan itu gila. Ditambah Dump dari ekspor ke file pada dasarnya adalah sampah. Lihat itu, bagaimana itu bahkan sangat membantu?
Tom Stickel 3-15
4
Saya tidak pernah mengklaim bahwa ildasme adalah pilihan terbaik di luar sana, hanya saja itu tersedia dan berfungsi. ¯_ (ツ) _ / ¯
yoyo
Tidak, tidak takut.
yoyo
Saya sangat terkejut bahwa dotPeek tidak akan membiarkan saya mencari seluruh Majelis untuk string yang saya tahu ada di sana. ildasm mungkin tidak cantik tetapi setidaknya memiliki opsi dump yang membantu saya menemukan kelas yang berisi string yang saya cari.
Gabe Halsmer