web-dev-qa-db-fra.com

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

J'ai écrit une application C # pour un client il y a quelques années, mais je n'ai plus le code source. Tout ce que j'ai, c'est le fichier 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 du fichier EXE?

250
MusiGenesis

Reflector et son complément FileDisassembler .

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

191
GEOCHET

Quand Red Gate a annoncé qu'il n'y aurait plus de version gratuite de .Net Reflector, j'ai commencé à utiliser ILSpy et celle de Telerik JustDecompile . J'ai trouvé que ILSpy se décompilait plus précisément que JustDecompile (qui est encore 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.

Sur le site Web ILSpy ( http://www.ilspy.net/ ):

ILSpy est le navigateur et le décompilateur .NET Assembly open-source.

Caractéristiques ILSpy

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

Mise à jour:

Le 15 avril 2012, ILSpy 2.0 a été publié. Nouvelles fonctionnalités par rapport à la version 1.0:

  • Listes d'assemblées
  • Prise en charge de la décompilation des arbres d'expression
  • Prise en charge des opérateurs levés sur les nullables
  • Décompiler en Visual Basic
  • Rechercher plusieurs chaînes séparées par un espace (la recherche de "Gestionnaire d'assemblage" dans ILSpy.exe trouverait AssemblyListManager)
  • En cliquant sur une variable locale, toutes les autres occurrences de cette variable seront mises en évidence.
  • Ctrl + F peut être utilisé pour effectuer une recherche dans la vue de code décompilée

Mise à jour:

  • ILSpy 2.1 prend en charge la décompilation async/wait
139
Daniel

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

Mais quelques sociétés comme DevExtras et JetBrains ont créé des alternatives gratuites:

DevExtras CodeReflect

JetBrains DotPeek

64
arc

Réflecteur et le complément File Disassembler de Denis Bauer. Il produit en fait des projets sources à partir d’assemblées, où Reflector seul affiche uniquement la source désassemblée.

AJOUTÉ: Mon dernier favori est JetBrains ' dotPeek .

34
ProfK

Telerik JustDecompile est gratuit et dispose d'une fonctionnalité permettant de créer des projets à partir d'assemblys .NET.

27
kodefuguru

Je suis surpris que personne n'ait mentionné Microsoft ildasm. Ce n'est peut-être pas aussi joli que ILSpy ou Reflector, mais il est livré avec Visual Studio, de sorte que 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 du 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 votre 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 le fichier IL dans un fichier.

24
yoyo

Vous voulez réflecteur .

14
Luke Halliwell