Reverseando Aplicaciones Móviles Creadas en Xamarin

¿Qué es Xamarin?

Es un software esencial para el desarrollo de aplicaciones móviles, ya que permite a los desarrolladores compartir hasta el 90% del código entre diferentes plataformas, utilizando un único lenguaje de programación C#, y que está ganando cada vez más seguidores tanto por el rendimiento como por la posibilidad de acceso a la API nativa.

Reverseando Apps en Xamarin

Al crearse en C# hay varias herramientas llamadas decompiladores que nos permiten obtener el código fuente de una manera muy fácil. La de-compilación es el proceso utilizado para producir código fuente a partir de código compilado. Para esta acción existen varias herramientas, por ejemplo:

  • dotpeek: El descompilador admite los siguientes formatos, bibliotecas (.dll), ejecutables (.exe) y archivos de metadatos de Windows (.winmd).
  • ILSpy: es el explorador de ensamblados y descompilador de .NET de código abierto.

Conociendo el contenido del archivo APK.

En el siguiente link podrán encontrar un apk el cual vamos a utilizar para pruebas en este pequeño post. Cuando descarguemos este archivo lo vamos a renombrar a .zip y lo vamos a descomprimir.

Al ingresar a la carpeta que se ha creado luego de descomprimir el fichero, podemos observar el siguiente contenido:


En la carpeta "assemblies" se puede encontrar los archivos DLL de la aplicación, aquí se puede encontrar el archivo que contiene la lógica de la aplicación (código). ¿Pero cómo podemos identificar esto?

Primero identifiquemos el nombre del paquete, en este caso com.companyname.helloworld

Lo que nos interesa es el nombre que aparece después del nombre de empresa "helloworld", ya que ese será el nombre del archivo DLL que vamos a analizar.

¿Por qué el post, que tienen de especial los archivos apk creados en este lenguaje?

En un reciente pentest móvil encontré una aplicación creada en este lenguaje, en la que he tenido varios problemas con los decompiladores mencionados anteriormente, no pude abrir de una manera legible los archivos DLL, pero los estos estaban en buena forma y no cifrados.

¿Cuál es el problema, por qué no se interpretan los archivos DLL?

Los desarrolladores de Xamarin habían introducido recientemente un formato personalizado de compresión LZ4 para hacer que los APK sean más pequeños.  Por esta razón, los decompiladores se "negaron" a trabajar con esta compresión.

Para poder trabajar con estos archivos para a utilizar un script desarrollado por x41sec, el cual nos permite realizar una descompresión de este formato para así poder trabajar con los archivos .dll que deseemos.

Al realizar esto volveremos abrir nuestro .dll con nuestro descompilador favorito

Como podemos observar, ahora podemos ver el contenido de nuestro archivo .dll. 

Hasta pronto, Stux.

Comentarios