Cómo realizar ingeniería inversa en una aplicación de Windows C# sin el código fuente disponible

En algunos proyectos nos encontramos con la situación de tener que hacer cambios en una aplicación existente en C# para Windows, pero sin acceso al código fuente (el desarrollador anterior se negó a proporcionarlo). La mayoría de los desarrolladores han experimentado una situación similar en la que no se puede encontrar el código fuente; a veces, el código fuente desaparece o se pierde.

Índice de Contenido
  1. Empezando
  2. Explorando otras opciones
  3. Instalación de obstáculos
  4. Resumen

Empezando

El punto de partida para realizar una ingeniería inversa es obtener los archivos DLL o EXE de los que deseas aprender su funcionamiento interno. El siguiente paso es localizar una herramienta para descompilar los archivos (este puede ser el primer paso, pero ¿para qué necesitas una herramienta sin los archivos?). Existen varias herramientas disponibles, pero el Framework .NET incluye su propia herramienta llamada Ildasm (Desensamblador MSIL). Se instala como parte de Visual Studio y Windows SDK, por lo que puedes acceder a ella a través del símbolo de sistema de Visual Studio o el símbolo de sistema de Windows SDK.

Ildasm toma un archivo que contiene MSIL como entrada (un archivo DLL o EXE) y genera código fuente adecuado para la herramienta del ensamblador (Ildasm.exe). El siguiente comando toma el archivo dll como entrada y genera el archivo de salida especificado (que contiene MSIL).

Ildasm archivoCompilado.dll /output:TRTest.il

A continuación se muestra un fragmento de MSIL generado por el comando Ildasm anterior.

.module archivoCompilado.dll
// MVID: {F5233C6F-701D-4E6B-BA37-ECCAA0B22083}
.imagebase 0x11000000
.file alignment 0x00001000
.stackreserve 0x00100000
.subsystem 0x0003 // WINDOWS_CUI
.corflags 0x00000001 // ILONLY
// Image base: 0x03370000
// =============== CLASS MEMBERS DECLARATION ===================
.class interface public abstract auto ansi archivoCompilado.IUpdatableControl
{
.method public hidebysig newslot specialname abstract virtual
instance bool get_UpdateAfterCallBack() cil managed
{
} // end of method IUpdatableControl::get_UpdateAfterCallBack
.method public hidebysig newslot specialname abstract virtual
instance void set_UpdateAfterCallBack(bool 'value') cil managed
{
} // end of method IUpdatableControl::set_UpdateAfterCallBack
.method public hidebysig newslot specialname abstract virtual
instance bool get_AutoUpdateAfterCallBack() cil managed
{
} // end of method IUpdatableControl::get_AutoUpdateAfterCallBack
.method public hidebysig newslot specialname abstract virtual
instance void set_AutoUpdateAfterCallBack(bool 'value') cil managed
{
} // end of method IUpdatableControl::set_AutoUpdateAfterCallBack
}

Esto puede resultar difícil de leer y analizar, pero es posible. Puedes realizar cambios en el MSIL y enviarlo al ensamblador (Ildasm.exe).

Explorando otras opciones

He utilizado otras herramientas que simplifican el proceso, como Red Gate's Reflector, pero ya no es gratuito: ahora se requiere su compra después de un período de prueba. Sin embargo, permite descompilar código y presenta los resultados en una interfaz fácil de leer. La Figura A muestra los resultados de un DLL. La parte inferior derecha de la interfaz muestra los resultados del análisis y las dependencias.
Figura A

Estrategias de presencia en línea para pequeñas empresas: B2B
La interfaz de Reflector simplifica la ingeniería inversa de código. (Haz clic en la imagen para ampliarla.)

Aquí hay tres opciones disponibles más, todas ellas gratuitas:

  • Dotnet IL Editor (DILE) te permite desensamblar y depurar código .NET.
  • dotPeek te permite descompilar y ver los resultados.
  • ILSpy es un navegador de ensamblados y descompilador de código fuente abierto.

Estas son solo unas muestras de las herramientas disponibles.

Instalación de obstáculos

Aunque no puedes evitar por completo que otros desensamblen archivos o código de tu aplicación, puedes dificultarles el proceso utilizando diversas técnicas. Puedes:

  • Utilizar ensamblados con nombre fuerte que incorporen firmas digitales y claves públicas.
  • Utilizar Microsoft Authenticode.
  • Alejarte de la práctica frecuente de enviar versiones de depuración de una aplicación. Estas versiones incluyen una gran cantidad de información relacionada con la depuración que es útil en el proceso de ingeniería inversa.
  • Considerar el uso de ofuscación, que convierte tu código y símbolos en datos incoherentes pero mantiene la lógica. Microsoft ofrece la herramienta Dotfuscator para la ofuscación, pero las herramientas de terceros de proveedores como Red Gate son aún mejores.

Resumen

Independientemente de la razón empresarial para realizar una ingeniería inversa del código, es una habilidad útil para usar en tu trabajo diario según sea necesario.

¡Mantén tus habilidades de ingeniería actualizadas suscribiéndote al boletín gratuito de Ingeniero de Software de Newsmatic, que se envía todos los martes!

Cómo evitar el Flash de Contenido sin Estilo (FOUC) en tu sitio web

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Cómo realizar ingeniería inversa en una aplicación de Windows C# sin el código fuente disponible , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.