Decompiling .net for dummies

Decompilar una aplicación .NET de manera sencilla en 5 pasos

Dotnetsafer
Dotnetsafer

¿Por qué explicamos cómo decompilar aplicaciones .NET?


Desde Dotnetsafer hacemos este artículo por una razón muy sencilla, en nuestras oficinas (un espacio de coworking) hay bastantes empresas que se desarrollan en .NET.

Un día en el almuerzo les dije lo que estábamos haciendo y no entendieron nada, resulta que no tenían ni idea de lo que es la decompilación, no sabían que con una simple herramienta podían ver, copiar o modificar su desarrollo.

No en todos los casos debes preocuparte, pero para algunos de ellos el núcleo del negocio es el desarrollo en sí y obviamente no fue muy divertido.

Tengo que decir que esto sucede en todos los lenguajes compilados, pero me centraré en .NET, que es lo que dominamos.

En este artículo te voy a mostrar nociones básicas sobre decompilación e ingeniería inversa, si estás interesado en algo más complejo, ¡no dudes en preguntarnos!

Aviso: Este artículo es para orientación educativa y formativa, no nos hacemos responsables del mal uso de las técnicas y explicaciones mencionadas en este artículo y / o el uso de las herramientas mencionadas / proporcionadas, además no asumimos responsabilidad por las acciones realizadas con la información del mismo. Utilice esta información con fines éticos.

Nota: Para realizar las partes prácticas utilizamos DnSpy, pero te proporcionamos la misma herramienta en https://decompiler.dotnetsafer.com para que puedas realizar el tutorial desde tu navegador sin tener que descargar nada ♥. (Simplemente para decompilar arrastre la aplicación .NET a la parte izquierda que se muestra en la pantalla, el código se mostrará en la parte derecha).

Que es la decompilacion

La decompilación es lo contrario de la compilación (voy a patentar esta gran explicación).

Es decir, la COMPILACIÓN es básicamente:

  1. Tu escribes codigo
  2. Presionas el botón mágico de compilar y se convierte en un ejecutable / .exe / dll …
  3. (Bueno, debería… seguramente olvidaste un punto y coma o algo así 😪) también tendrás 103 warnings ⚠, pero si no abres los ojos, no los ves 🤭.

El proceso será algo como esto:

Empezar a decompilar una aplicación .NET

Pues el proceso de decompilación es todo lo contrario, tienes un archivo ejecutable, .dll, .exe… y con una herramienta (decompilador) obtienes el código fuente original.

Como decompilar aplicación .NET

¿Y es simple 🙄?
Diría que es más fácil que compilar, pero veamos cómo se hace.

Decompilar aplicaciones .NET / .NET Core

Decompilemos una aplicación simple:

Decompilando una aplicación .NET

Para este ejemplo usaremos DnSpy. Hay varias herramientas y cada una sirve para algo en particular, pero DnSpy es una de las mejores para decompilar y depurar aplicaciones .NET.

Cuando compilemos nuestra aplicación .NET Core obtendremos los archivos compilados, en el caso de .NET Core el archivo “.exe” será el ejecutable, pero se encargará de ejecutar el “.dll” que contiene el código de nuestra aplicación.

Ok, procedamos a decompilar el archivo .dll:

Aplicación .NET decompilada

Para hacer esto, todo lo que tenemos que hacer es arrastrarlo a DnSpy:

Dnspy .NET

Una vez cargado se mostrará el código fuente original y podremos trabajar en él, podemos analizarlo, modificarlo, depurarlo, etc.

Ver el código fuente de la aplicación .NET decompilada

Una vez decompilada nuestra aplicación, podemos navegar por el código fuente como si fuera nuestro propio proyecto:

Código fuente .NET decompilado

Debuggear la aplicación .NET

Esto será útil para comprender cómo funciona o para obtener algunos valores en la memoria.

Por ejemplo, pongamos un punto de interrupción antes de hacer una resta:

Breackpoint en Dnspy en una aplicación decompilada .NET

y luego ejecutaremos la aplicación:

depuración de dnspy en una aplicación .NET decompilada

A continuación, se muestra un ejemplo sencillo:

Proceso de decompilación de la aplicación .NET

Esta es una función que puede resultar muy útil en ocasiones, pero también puede resultar peligrosa ⚡.

Modificar el código de la aplicación .NET decompilada

Podemos modificar y recompilar la aplicación .NET decompilada sin ningún problema:

crackeando una aplicación .NET decompilada

También podemos hacerlo usando código IL, pero si no lo conocemos será mucho más complejo.

cambiamos ese simple texto:

Cambiando el título de una aplicación .NET

y compilamos de nuevo:

Compilando la aplicación .NET

Ahora para guardar nuestra aplicación modificada, le daremos:

Guardando el módulo en Dnspy

Seleccionaremos el nombre del archivo, su ruta y marcaremos las siguientes opciones:

Metadata en Dnspy

y tendremos nuestra aplicación modificada:

Aplicación .NET modificada

Ok, estos son ejemplos sencillos y sin importancia, dejo a tu imaginación 💭 todo lo que se podría hacer con estas sencillas herramientas.

Ahora vamos a ver otro tipo de aplicaciones, porque el proceso de compilación en .NET es el mismo, no importa si usas C#, vb, ASP, Xamarin, Blazor, todo funciona de la misma manera, veamos luego con un Aplicación Blazor.

Decompilación de una aplicación web con Blazor

Ahora que hemos creado una aplicación web de muestra con Blazor, este es el código de la aplicación en Visual Studio:

Decompilar aplicación Blazor .NET

Básicamente es una aplicación que muestra el clima y hemos agregado Dotnetsafer en el medio para que podamos verla más adelante en la aplicación decompilada, aquí está la aplicación web:

Aplicación Blazor

Ok, obtengamos el código de nuevo.

Primero usaremos nuestro navegador (no importa cual), ya que al cargar las librerías .NET para desplegar la aplicación, hace una llamada para obtenerlas.

Debemos entrar en modo de inspección Ctrl + Shift + C e ir a la sección Network, luego recarga la página con Ctrl + F5.

Aquí estará el archivo que contiene el código de nuestra aplicación web:

Archivo de Blazor

También puede obtener todas las dependencias o archivos .net propios que utiliza la aplicación

Pues lo descargamos y lo volvemos a abrir con DnSpy:

Decompilando la aplicación Blazor con DnSpy

Una vez que tengamos el archivo decompilado podemos hacer todo lo que mencioné en el punto anterior.

Decompilación de una aplicación móvil con Xamarin

Subimos un poco el nivel de dificultad 🧨, pero el funcionamiento sigue siendo el mismo.

Hemos creado una aplicación sencilla para dispositivos móviles con Xamarin, la aplicación compilada tendrá la extensión .APK

Lo primero que haremos será descomprimir el APK, hay herramientas para ello, pero no es necesario, para algo tan sencillo podemos usar winrar, (sí, el programa que nunca caduca 🆓):

Decompilando un APK

y copiaremos todos los archivos en una carpeta:

Decompilando un APK Xamarin

Dentro de la carpeta Assemblies se encontrarán todos los archivos .NET:

Archivos de Xamarin en .NET

Aquí viene lo interesante, estos archivos tienen lz4 compression, lo que nos dará un error si intentamos decompilarlo con DnSpy:

Error de Dnspy decompilando la aplicación Xamarin

Para ello les traigo una solución sencilla, un pequeño script de Python que nos ayudará a descomprimir todos los archivos .NET .dll.

Sí, esto suena muy complejo, y parece que debes ser un experto:

Hackeando .NET

Pero realmente es algo muy sencillo que haremos en menos de un minuto.

Decomprimir las bibliotecas .NET de Xamarin

Si no tienes Python en tu máquina, instálalo previamente.

Una vez que tenemos Python (lo ejecuto desde el terminal VSCode) procedemos:

Instalar lz4:

Instalando lz4

python -m pip install lz4 o simplemente pip install lz4

Usar el script de decompresión

El autor de este código es Christian Reitter, X41 D-Sec GmbH, gracias por su artículo en X41 D-Sec GmbH, hemos modificado para descomprimir todos los archivos en el directorio.

Copiaremos el código en un archivo llamado decompress.py Y lo guardaremos en la misma ruta que nuestros archivos .dll.

Descomprimir los archivos que necesitamos:

Descomprimiendo la aplicación Xamarin

Lo haremos con py .\decompressor.py .\, lo dejaremos descomprimir todos los archivos .dll en el directorio.

En este caso solo me interesan los dos archivos correspondientes a mi solicitud.

¿Qué no ha sido tan difícil?

Decompilando y hackeando la aplicación Xamarin

Ahora tenemos los archivos listos para abrir con DnSpy:

Decompilando con DnSpy las aplicaciónes .NET Xamarin

Ahora nuevamente podemos hacer todo lo que mencioné anteriormente, el procedimiento es siempre el mismo, solo varía la forma en que se compilan los archivos.

Esto se aplica a todas las aplicaciones bajo .NET, como juegos desarrollados en Unity con C#, aplicaciones de realidad virtual y realidad aumentada..

¿Te gustó este artículo?

Ha sido muy sencillo pero lo considero bien para un nivel básico y aprendo un poco sobre estos temas 😊.

Si te ha parecido interesante no dudes en apoyarlo, y cuéntanos a continuación 👇 si quieres saber algo más, como hablemos de crackeo, inyección y otros aspectos.

Podríamos hacer algunas prácticas interesantes o lo que quieras ver por aquí.

Gracias por leer el artículo ❤ y recuerda que en dotnetsafer estaremos subiendo artículos sobre seguridad en relación a .NET 🛡.

Tienes la versión web de Dnspy en https://decompiler.dotnetsafer.com para que puedas hacer cómodamente todas las pruebas de este artículo sin necesidad de descargar ningún programa.

Gracias por su atención, ¡esperemos que hayas aprendido mucho!

Adiós
Summary
Decompilar una aplicación .NET de manera sencilla en 5 pasos
Article Name
Decompilar una aplicación .NET de manera sencilla en 5 pasos
Description
¿Sabes lo fácil que es decompilar aplicaciones .NET? Te explico de forma sencilla como decompilar aplicaciones .NET.
Author
Publisher Name
Dotnetsafer
Publisher Logo

0 Comments

Leave a Reply

More great articles

C# 9 características y expectativas de C# 10

Características de C# 9.0 y expectativas de C# 10

La última versión de C#, 9.0, se lanzó oficialmente con .NET 5 en noviembre de 2020. En estos días ya…

Read Story
net 6

.NET 6 Preview 2 (Notas de la versión + Nuevas funciones)

Anuncio de .NET 6 Preview 2 📰 El 11 de marzo de este año .NET 6 Preview 2 fue oficialmente…

Read Story
Conversions C# Implicit Vs Explicit

Conversiones… Implícitas VS Explícitas?

Después de muchos años programando en .NET , es posible que ya te hayas dado cuenta de que el framework…

Read Story
Arrow-up