¿Cómo descompilo un .NET EXE en código fuente legible de C #?

259

Escribí una aplicación C # para un cliente hace un par de años, pero ya no tengo el código fuente. Todo lo que tengo es el EXE que implementé en la PC del cliente. ¿Hay alguna manera de generar el código fuente de C # desde el EXE?

MusiGenesis
fuente
2
Okay. Mire aquí ... Teleriks JustDecompile en realidad descompiló las DLL que Red Gates Reflector arruinó por completo ... hubo numerosos problemas con Reflector ... JustDecompile ... impecable hasta ahora ...
Marc Johnston
1
He estado usando JustDecompile durante bastante tiempo y es realmente bueno para descompilar y empaquetar los archivos de origen como un csproject listo para compilar. Está realmente activo en el desarrollo y parece que no hay problemas abiertos en su repositorio github.com/telerik/JustDecompileEngine
David Chelliah

Respuestas:

194

Reflector y su complemento FileDisassembler .

Reflector permitirá ver el código fuente. FileDisassembler le permitirá convertirlo en una solución VS.

GEOCHET
fuente
44
Mi copia de Reflector tiene la opción "Exportar ..." y no tengo complementos instalados. Crea un proyecto VS con todo el código fuente y los recursos. Entonces, ¿por qué todos sugieren FileDisassembler? ¿Es mejor?
Lucas
Lucas: Fuera de la caja, no he visto reflector capaz de hacer esto. FileDisassembler siempre ha sido la única forma. Esto puede haber cambiado en la historia reciente, aunque supongo. Yo lo comprobaré.
GEOCHET
Salvavidas! tonto culo TFS borró mi proyecto. Aunque le dije a TFS que se eliminara, pero no esperaba que eliminara el proyecto del sistema de archivos local. Gracias de todos modos. x
Christo
¿Dónde está FileDisassembler? : /
Tom Stickel
Funciona solo para .Net framework. alguna herramienta que funcione para .Net core 3.0 exe?
Somnath Kadam
144

Cuando Puerta Roja dijo que no habría dejado de ser una versión libre de .Net reflector, que empecé a usar ILSpy y Telerik JustDecompile . He encontrado que ILSpy se descompila con mayor precisión que JustDecompile (que todavía está en Beta). Red Gate ha cambiado su decisión y todavía tiene una versión gratuita de .Net Reflector, pero ahora me gusta ILSpy.

Desde el sitio web de ILSpy ( https://github.com/icsharpcode/ILSpy/ ):

ILSpy es el navegador y descompilador de ensamblado de código abierto .NET.

Características de ILSpy

  • Navegación de ensamblaje
  • Desmontaje IL
  • Descompilación a C #
  • Admite lambdas y 'rendimiento de rendimiento'
  • Muestra documentación XML
  • Ahorro de recursos
  • Buscar tipos / métodos / propiedades (subcadena)
  • Navegación de tipo / método / propiedad basada en hipervínculos
  • Navegación de tipos base / derivados
  • Historial de navegación
  • Descompilador BAML a XAML
  • Guardar ensamblado como proyecto C #
  • Encuentra el uso del campo / método
  • Extensible a través de complementos (MEF)

Actualizar:

15 de abril de 2012, se lanzó ILSpy 2.0. Nuevas características en comparación con la versión 1.0:

  • Listas de montaje
  • Soporte para descompilar árboles de expresión
  • Soporte para operarios elevados en nulables
  • Descompilar a Visual Basic
  • Busque varias cadenas separadas por espacio (la búsqueda de "Administrador de ensamblaje" en ILSpy.exe encontraría AssemblyListManager)
  • Al hacer clic en una variable local, se resaltarán todas las demás ocurrencias de esa variable.
  • Ctrl + F se puede usar para buscar dentro de la vista de código descompilado

Actualizar:

  • ILSpy 2.1 admite descompilación asíncrona / espera
Daniel
fuente
1
Estoy usando 2.2 y es compatible con descompilar a IL, VB.NET y C #. Esto me pareció muy útil.
VoteCoffee
1
Parece que Telerik está interesado en recopilar información cuestionable de la computadora que se ejecuta en él e ILSpy no se puede compilar a partir de fuentes. También ILSpy binary mezcla nombres de variables y pone algunos caracteres extraños en el código fuente.
AaA
1
Tenga en cuenta que ILSpy incluye un complemento de Visual Studio. Para ILSpy 2.4, agregué la capacidad de navegar desde su código fuente de Visual Studio directamente a la salida descompilada. Desafortunadamente, hubo algunas correcciones de última hora que ahora se fusionaron con la línea principal de ILSpy pero no hicieron la versión 2.4.
yoyo
¡Brillante! Hay una compañía de software que cobra a las personas £ 100 por vez para que usen una herramienta "especial" en su servidor para solucionar problemas. Se las arregló para obtener una copia de la herramienta que usaron mientras estaba conectado, y luego se las arregló para usar ILSpy muy fácilmente para obtener la contraseña de desbloqueo de la herramienta. ¡No más estafa a los clientes!
user2924019
ILSpy es el mejor
Pritam
65

Reflector ya no es gratuito en general, pero lo ofrecen gratis para desarrolladores de código abierto: http://reflectorblog.red-gate.com/2013/07/open-source/

Pero algunas compañías como DevExtras y JetBrains han creado alternativas gratuitas:

DevExtras CodeReflect

JetBrains DotPeek

arco
fuente
55
Reflector es como 35 $. Rompiendo el banco, lo sé, pero vale 10 veces eso.
StingyJack
77
Vale la pena agregar Telerik JustDecompile a la lista de descompiladores de ensamblaje .NET gratuitos. telerik.com/justdecompile
Todd
3
@StingyJack: ¡Genial, parece que te escucharon! Ahora es realmente 10 el precio de $ 368 si desea el desensamblador VS2012. : /
DeepSpace101
1
No lo considero contra ellos por ganar dinero, pero ILSpy (mencionado) en la respuesta de @ Daniel es lo que estoy usando ahora.
StingyJack
1
Ahora cuesta $ 100 para la versión estándar y $ 200 para la versión que se integra con Visual Studios. Esa es una gran tasa de inflación. Aunque sí ofrecen cosas gratis para desarrolladores de código abierto: reflectorblog.red-gate.com/2013/07/open-source
VoteCoffee
35

Reflector y el complemento Desmontador de archivos de Denis Bauer. Realmente produce proyectos de origen a partir de ensamblajes, donde Reflector por sí solo solo muestra la fuente desmontada.

AGREGADO: Mi último favorito es dotPeek de JetBrains .

ProfK
fuente
Me gusta que dotPeek permite trabajar con una carpeta completa fácilmente, pero a partir de hoy solo se descompilan en c #. La mayoría de los otros descompiladores también hacen vb e IL. También solo admite hasta Net 4.5, mientras que Telerik admite 4.5.1
VoteCoffee
¿Entonces dotPeek es totalmente gratuito o tienen restricciones para la versión paga? No pude ver ninguna información en el sitio web de jetbrains al respecto.
batmaci
29

Telerik JustDecompile es gratuito y tiene una función para crear proyectos a partir de ensamblados .NET.

Kodefuguru
fuente
Telerik ofrece la capacidad de descompilar a VB.NET, IL o C # .NET, lo que me pareció útil. También selecciona automáticamente el marco y tiene un complemento disponible para desofuscicar. Además, es compatible con .NET 4.5.1. Parece bastante bueno
VoteCoffee
1
Probé todas las soluciones aquí en esta publicación y JustDecompile fue la única que funcionó perfectamente para mí.
Alvaro Pereira
24

Me sorprende que nadie haya mencionado el ildasmo de Microsoft . Puede que no sea tan bonito como ILSpy o Reflector, pero viene con Visual Studio, por lo que muchos desarrolladores ya lo tienen.

Para ejecutarlo (suponiendo que VS 2013, debería ser similar para otras versiones):

  1. Seleccione Inicio> Todos los programas> Visual Studio 2013> Herramientas de Visual Studio.
  2. Haga doble clic en el símbolo del sistema del desarrollador para VS2013.
  3. Ejecute "ildasm" desde el símbolo del sistema resultante.
  4. En la herramienta, seleccione Archivo> Abrir y abra su archivo ejecutable o DLL.

Ahora puede navegar por la estructura DLL. Haga doble clic en los miembros de la clase para ver la IL. Use Archivo> Volcado para exportar IL a un archivo.

yoyó
fuente
Me parece que IL DASM es un poco bárbaro. Muestra el árbol, pero cuando hago clic derecho no hace nada, me parece una locura. Además, el volcado de la exportación al archivo es básicamente basura. Míralo, ¿cómo es eso remotamente útil?
Tom Stickel
44
Nunca dije que ildasm fuera la mejor opción, solo que está disponible y funciona. ¯_ (ツ) _ / ¯
yoyo
No, fraid no.
yoyo
Realmente me sorprendió que dotPeek no me dejara buscar en toda la Asamblea una cadena que sabía que estaba allí. Puede que ildasm no sea bonito, pero al menos tiene una opción de volcado que me ayudó a localizar la clase que contenía la cadena que estaba buscando.
Gabe Halsmer el