Come decompilare un file EXE .NET in codice sorgente C # leggibile?


259

Ho scritto un'applicazione C # per un client un paio di anni fa, ma non ho più il codice sorgente. Tutto quello che ho è il file EXE che ho distribuito sul PC del client. Esiste un modo per generare codice sorgente C # da EXE?


2
Ok. Guarda qui ... Teleriks JustDecompile ha effettivamente decompilato le DLL che Red Gates Reflector ha rovinato completamente ... c'erano numerosi problemi con Reflector ... JustDecompile ... finora impeccabile ...
Marc Johnston

1
Sto usando JustDecompile da molto tempo ed è davvero bravo a decompilare e impacchettare i file sorgente come un pronto per compilare csproject. È davvero attivo nello sviluppo e non sembrano esserci problemi aperti nel loro repository github.com/telerik/JustDecompileEngine
David Chelliah,

Risposte:


194

Reflector e il suo componente aggiuntivo FileDisassembler .

Reflector consentirà di vedere il codice sorgente. FileDisassembler ti permetterà di convertirlo in una soluzione VS.


4
La mia copia di Reflector ha un'opzione "Esporta ..." e non ho plug-in installati. Crea un progetto VS con tutto il codice sorgente e le risorse. Allora perché tutti stanno suggerendo FileDisassembler? È meglio?
Lucas,

Lucas: Fuori dalla scatola, non ho visto il riflettore in grado di farlo. FileDisassembler è sempre stato l'unico modo. Questo potrebbe essere cambiato nella storia recente, anche se credo. Controllerò.
GEOCHET,

SALVAVITA! stupido culo TFS ha cancellato il mio progetto. Anche se ho detto a TFS di cancellare se stesso, ma non mi aspettavo che rimuovesse il progetto dal file system locale. grazie lo stesso. x
Christo,

Dov'è FileDisassembler? : /
Tom Stickel,

Funziona solo per framework .Net. qualsiasi strumento che funziona per .Net core 3.0 exe?
Somnath Kadam,

144

Quando Red Gate disse che non ci sarebbe stata più una versione gratuita di .Net Reflector, ho iniziato a usare ILSpy e JustDecompile di Telerik . Ho trovato ILSpy decompilare in modo più accurato di JustDecompile (che è ancora in beta). Red Gate ha cambiato la sua decisione e ha ancora una versione gratuita di .Net Reflector, ma ora mi piace ILSpy.

Dal sito web ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy è il browser e decompilatore di assembly .NET open source.

Caratteristiche di ILSpy

  • Navigazione dell'Assemblea
  • Smontaggio IL
  • Decompilazione in C #
  • Supporta lambda e "rendimento"
  • Mostra la documentazione XML
  • Risparmio di risorse
  • Cerca tipi / metodi / proprietà (sottostringa)
  • Navigazione di tipo / metodo / proprietà basata su collegamento ipertestuale
  • Navigazione dei tipi di base / derivati
  • Cronologia di navigazione
  • Decompilatore da BAML a XAML
  • Salva assembly come progetto C #
  • Trova l'utilizzo del campo / metodo
  • Estensibile tramite plug-in (MEF)

Aggiornare:

15 aprile 2012, ILSpy 2.0 è stato rilasciato. Nuove funzionalità rispetto alla versione 1.0:

  • Elenchi di assiemi
  • Supporto per la decompilazione degli alberi delle espressioni
  • Supporto per operatori sollevati su nullable
  • Decompilare in Visual Basic
  • Cerca più stringhe separate da spazio (la ricerca di "Assembly manager" in ILSpy.exe trova AssemblyListManager)
  • Facendo clic su una variabile locale verranno evidenziate tutte le altre occorrenze di quella variabile
  • Ctrl + F può essere usato per cercare all'interno della vista del codice decompilato

Aggiornare:

  • ILSpy 2.1 supporta la decompilazione asincrona / attende

1
Sto usando 2.2 e supporta la decompilazione in IL, VB.NET e C #. L'ho trovato molto utile.
VoteCoffee

1
Sembra che Telerik sia interessato a raccogliere informazioni discutibili dal computer in esecuzione su di esso e ILSpy non può essere compilato da fonti. Anche ILSpy binary mescola i nomi delle variabili e inserisce alcuni caratteri strani nel codice sorgente.
AaA

1
Si noti che ILSpy include un componente aggiuntivo di Visual Studio. Per ILSpy 2.4 ho aggiunto la possibilità di navigare dal codice sorgente di Visual Studio direttamente all'output decompilato. Sfortunatamente ci sono state alcune correzioni in ritardo che ora sono state unite alla linea principale ILSpy ma non hanno rilasciato la versione 2.4.
yoyo

Brillante! C'è una società di software che addebita alle persone 100 sterline alla volta affinché possano utilizzare uno strumento "speciale" sul tuo server per risolvere i problemi. È riuscito a ottenere una copia dello strumento utilizzato durante la connessione, quindi è riuscito a utilizzare ILSpy molto facilmente per ottenere la password di sblocco dello strumento. Non dovrai più fregare i clienti!
user2924019

ILSpy è il migliore
Pritam

65

Reflector non è più gratuito in generale, ma lo offrono gratuitamente agli sviluppatori open source: http://reflectorblog.red-gate.com/2013/07/open-source/

Ma alcune aziende come DevExtras e JetBrains hanno creato alternative gratuite:

DevExtras CodeReflect

JetBrains DotPeek


5
Il riflettore è come 35 $. Rompere la banca lo so, ma vale 10 volte quello.
StingyJack,

7
Vale la pena aggiungere anche Telerik JustDecompile all'elenco dei decompilatori di assembly .NET gratuiti. telerik.com/justdecompile
Todd,

3
@StingyJack: Fantastico, sembra che ti abbiano sentito! Ora è in realtà 10 al prezzo di $ 368 se si desidera il disassemblatore VS2012. : /
DeepSpace101

1
Non lo tengo contro di loro per fare soldi, ma ILSpy (menzionato) nella risposta di @ Daniel è quello che sto usando ora.
StingyJack,

1
Ora costa $ 100 per la versione standard e $ 200 per la versione che si integra con Visual Studios. Questo è un diavolo di un tasso di inflazione. Sebbene offrano cose gratis agli sviluppatori open source: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee

35

Reflector e il componente aggiuntivo Disassemblatore file di Denis Bauer. In realtà produce progetti di origine da assiemi, in cui Reflector da solo mostra solo la fonte disassemblata.

AGGIUNTO: Il mio ultimo preferito è dotPeek di JetBrains .


Mi piace il fatto che dotPeek consenta di lavorare facilmente con un'intera cartella, ma ad oggi si decompilano solo in c #. La maggior parte degli altri decompilatori esegue anche vb e IL. Supporta anche fino a Net 4.5 mentre Telerik supporta 4.5.1
VoteCoffee

quindi dotPeek è totalmente gratuito o hanno restrizioni per la versione a pagamento ?. non ho potuto vedere alcuna informazione sul sito web di jetbrains al riguardo.
Batmaci,

29

Telerik JustDecompile è gratuito e ha una funzione per creare progetti da assembly .NET.


Telerik offre la possibilità di decompilare in VB.NET, IL o C # .NET che ho trovato utile. Inoltre, seleziona automaticamente il framework e dispone di un plug-in disponibile per la deobuscicazione. Inoltre, supporta .NET 4.5.1. Sembra abbastanza buono.
VoteCoffee,

1
Ho provato tutte le soluzioni qui in questo post e JustDecompile è stato l'unico che funziona perfettamente per me.
Alvaro Pereira,

24

Sono sorpreso che nessuno abbia menzionato l' illasmo di Microsoft . Potrebbe non essere bello come ILSpy o Reflector, ma viene fornito con Visual Studio, quindi molti sviluppatori lo hanno già.

Per eseguirlo (supponendo VS 2013, dovrebbe essere simile per altre versioni):

  1. Selezionare Start> Tutti i programmi> Visual Studio 2013> Strumenti di Visual Studio.
  2. Fare doppio clic su Prompt dei comandi per sviluppatori per VS2013.
  3. Esegui "ildasm" dal prompt dei comandi risultante.
  4. Nello strumento, seleziona File> Apri e apri l'eseguibile o la DLL.

Ora puoi navigare nella struttura DLL. Fai doppio clic sui membri della classe per vedere l'IL. Usa File> Dump per esportare IL in un file.


Trovo IL DASM un po 'barbaro. Mostra l'albero, ma quando il clic destro non fa nulla lo trovo folle. Inoltre, il dump dell'esportazione su file è fondamentalmente spazzatura. Guardalo, come può essere di aiuto anche in remoto?
Tom Stickel,

4
Non ho mai sostenuto che ildasm fosse l'opzione migliore là fuori, solo che è disponibile e funziona. ¯_ (ツ) _ / ¯
yoyo

No, non fragile.
yoyo

Sono stato davvero sorpreso che dotPeek non mi permettesse di cercare in tutta l'Assemblea una stringa che sapevo fosse lì. ildasm potrebbe non essere carino ma almeno ha un'opzione di dump che mi ha aiutato a individuare la classe che conteneva la stringa che stavo cercando.
Gabe Halsmer,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.