Comment décompiler un EXE .NET en code source C # lisible?

259

J'ai écrit une application C # pour un client il y a quelques années, mais je n'ai plus le code source. Je n'ai que l'EXE que j'ai déployé sur le PC du client. Existe-t-il un moyen de générer du code source C # à partir de l'EXE?

MusiGenesis
la source
2
D'accord. Regardez ici ... Teleriks JustDecompile a en fait décompilé les DLL que Red Gates Reflector a complètement bousillé ... il y avait de nombreux problèmes avec Reflector ... JustDecompile ... sans faille jusqu'à présent ...
Marc Johnston
1
J'utilise JustDecompile depuis assez longtemps et il est vraiment bon pour décompiler et empaqueter les fichiers source en tant que csproject prêt à compiler. Il est vraiment actif dans le développement et il semble qu'il n'y ait aucun problème ouvert dans leur référentiel github.com/telerik/JustDecompileEngine
David Chelliah

Réponses:

194

Reflector et son complément FileDisassembler .

Le réflecteur permettra de voir le code source. FileDisassembler vous permettra de le convertir en solution VS.

GEOCHET
la source
4
Ma copie de Reflector a une option "Exporter ..." et je n'ai aucun plug-in installé. Il crée un projet VS avec tout le code source et les ressources. Alors, pourquoi tout le monde suggère FileDisassembler? Il est préférable?
Lucas
Lucas: Hors de la boîte, je n'ai pas vu de réflecteur capable de faire ça. FileDisassembler a toujours été le seul moyen. Cela a peut-être changé dans l'histoire récente, mais je suppose. Je vais vérifier cela.
GEOCHET
SAUVEUR DE VIE! dumb ass TFS a supprimé mon projet. Bien que j'aie dit à TFS de se supprimer, mais je ne m'attendais pas à ce qu'il supprime le projet du système de fichiers local. merci tout de même. x
Christo
Où est FileDisassembler? : /
Tom Stickel
Il fonctionne uniquement pour le framework .Net. un outil qui fonctionne pour .Net core 3.0 exe?
Somnath Kadam du
144

Lorsque Red Gate a dit qu'il n'y aurait plus de version gratuite de .Net Reflector, j'ai commencé à utiliser ILSpy et JustDecompile de Telerik . J'ai trouvé ILSpy pour décompiler plus précisément que JustDecompile (qui est toujours en version bêta). Red Gate a changé sa décision et a toujours une version gratuite de .Net Reflector, mais maintenant j'aime ILSpy.

Depuis le site Web ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy est le navigateur et décompilateur d'assembly .NET open source.

Fonctionnalités ILSpy

  • Navigation dans l'assemblage
  • Démontage IL
  • Décompilation en C #
  • Prise en charge des lambdas et du rendement
  • Affiche la documentation XML
  • Économie de ressources
  • Recherche de types / méthodes / propriétés (sous-chaîne)
  • Navigation par type / méthode / propriété basée sur un lien hypertexte
  • Navigation des types de base / dérivés
  • Historique de navigation
  • Décompilateur BAML vers XAML
  • Enregistrer l'assembly en tant que projet C #
  • Trouver l'utilisation du champ / de la méthode
  • Extensible via des plugins (MEF)

Mettre à jour:

Le 15 avril 2012, ILSpy 2.0 est sorti. Nouvelles fonctionnalités par rapport à la version 1.0:

  • Listes d'assemblages
  • Prise en charge de la décompilation d'arbres d'expression
  • Prise en charge des opérateurs levés sur nullables
  • Décompiler en Visual Basic
  • Recherchez plusieurs chaînes séparées par un espace (la recherche de "Assembly manager" dans ILSpy.exe trouverait AssemblyListManager)
  • Cliquer sur une variable locale mettra en évidence toutes les autres occurrences de cette variable
  • Ctrl + F peut être utilisé pour rechercher dans la vue du code décompilé

Mettre à jour:

  • ILSpy 2.1 prend en charge la décompilation asynchrone / en attente
Daniel
la source
1
J'utilise 2.2 et il prend en charge la décompilation en IL, VB.NET et C #. J'ai trouvé cela très utile.
VoteCoffee
1
Il semble que Telerik soit intéressé par la collecte d'informations douteuses à partir de l'ordinateur qui l'utilise et ILSpy ne peut pas être compilé à partir de sources. Le binaire ILSpy mélange également les noms de variables et met des caractères étranges dans le code source.
AaA
1
Notez qu'ILSpy inclut un complément Visual Studio. Pour ILSpy 2.4, j'ai ajouté la possibilité de naviguer depuis votre code source Visual Studio directement vers la sortie décompilée. Malheureusement, il y avait des correctifs de dernière minute qui sont maintenant fusionnés avec la ligne principale ILSpy mais n'ont pas fait la version 2.4.
yoyo
Brillant! Il y a une société de logiciels qui fait payer aux gens 100 £ à la fois pour qu'ils utilisent un outil "spécial" sur votre serveur afin de résoudre les problèmes. A réussi à obtenir une copie de l'outil utilisé lors de la connexion, puis a réussi à utiliser ILSpy très facilement pour obtenir le mot de passe de déverrouillage de l'outil. Plus de vol de clients!
user2924019
ILSpy est le meilleur
Pritam
65

Reflector n'est plus gratuit en général, mais ils le proposent gratuitement aux développeurs open source: http://reflectorblog.red-gate.com/2013/07/open-source/

Mais quelques entreprises comme DevExtras et JetBrains ont créé des alternatives gratuites:

DevExtras CodeReflect

JetBrains DotPeek

arc
la source
5
Le réflecteur est comme 35 $. Briser la banque, je sais, mais ça vaut 10 fois ça.
StingyJack
7
Cela vaut également la peine d'ajouter Telerik JustDecompile à la liste des décompilateurs d'assemblage .NET gratuits. telerik.com/justdecompile
Todd
3
@StingyJack: Super, on dirait qu'ils vous ont entendu! C'est maintenant en fait 10 le prix à 368 $ si vous voulez le démonteur VS2012. : /
DeepSpace101
1
Je ne leur en veux pas pour gagner de l'argent, mais ILSpy (mentionné) dans la réponse de @ Daniel est ce que j'utilise maintenant.
StingyJack
1
Il en coûte désormais 100 $ pour la version standard et 200 $ pour la version qui s'intègre à Visual Studios. C'est un sacré taux d'inflation. Bien qu'ils offrent des trucs gratuits aux développeurs open source: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee
35

Reflector et le complément File Disassembler de Denis Bauer. Il produit en fait des projets source à partir d'assemblages, où Reflector à lui seul n'affiche que la source désassemblée.

AJOUT: Mon dernier favori est le dotPeek de JetBrains .

ProfK
la source
J'aime que dotPeek permet de travailler avec un dossier entier facilement, mais à ce jour, ils ne se décompilent qu'en c #. La plupart des autres décompilateurs utilisent également vb et IL. Il prend également en charge uniquement jusqu'à Net 4.5 tandis que Telerik prend en charge 4.5.1
VoteCoffee
alors dotPeek est totalement gratuit ou ils ont des restrictions pour la version payante ?. Je n'ai pu voir aucune information sur le site Web de Jetbrains à ce sujet.
batmaci
29

Telerik JustDecompile est gratuit et dispose d'une fonctionnalité pour créer des projets à partir d'assemblages .NET.

kodefuguru
la source
Telerik offre la possibilité de décompiler en VB.NET, IL ou C # .NET que j'ai trouvé utile. Il sélectionne également automatiquement le cadre et dispose d'un plug-in disponible pour la désobfuscification. En outre, il prend en charge .NET 4.5.1. Semble assez bien.
VoteCoffee
1
J'ai essayé toutes les solutions ici dans ce post et JustDecompile était la seule qui fonctionnait parfaitement pour moi.
Alvaro Pereira
24

Je suis surpris que personne n'ait mentionné l' ildasm de Microsoft . Il n'est peut-être pas aussi joli qu'ILSpy ou Reflector, mais il est livré avec Visual Studio, de nombreux développeurs l'ont déjà.

Pour l'exécuter (en supposant que VS 2013, devrait être similaire pour les autres versions):

  1. Sélectionnez Démarrer> Tous les programmes> Visual Studio 2013> Visual Studio Tools.
  2. Double-cliquez sur Invite de commandes développeur pour VS2013.
  3. Exécutez "ildasm" à partir de l'invite de commande résultante.
  4. Dans l'outil, sélectionnez Fichier> Ouvrir et ouvrez votre exécutable ou DLL.

Vous pouvez maintenant naviguer dans la structure DLL. Double-cliquez sur les membres de la classe pour voir l'IL. Utilisez Fichier> Dump pour exporter IL dans un fichier.

yo-yo
la source
Je trouve IL DASM un peu barbare. Il montre l'arbre, mais quand un clic droit ne fait rien, je trouve ça fou. De plus, le vidage de l'exportation vers un fichier est essentiellement une ordure. Regardez-le, comment cela peut-il être utile à distance?
Tom Stickel
4
Je n'ai jamais prétendu que l'eldasm était la meilleure option, mais seulement qu'il est disponible et qu'il fonctionne. ¯_ (ツ) _ / ¯
yoyo
Non, pas frêle.
yoyo
J'ai été vraiment surpris que dotPeek ne me permette pas de rechercher dans l'ensemble de l'assemblage une chaîne que je savais être là. ildasm n'est peut-être pas joli mais au moins il a une option de vidage qui m'a aidé à localiser la classe qui contenait la chaîne que je cherchais.
Gabe Halsmer