Decompilador de Dex a Java

Como la mayoría ya sabréis, .dex es el formato de fichero ejecutable que la máquina virtual Dalvik. Y cómo muchos ya también sabéis, aunque las aplicaciones Android las escribamos en Java (a menos que uses NDK, o algún framework de terceros que te permita codificar en algún otro lenguaje), pero no es el código Java o más bien el bytecode de Java lo que se ejecuta en el sistema, sino que hay un paso intermedio que convierte el bytecode de Java (.
Leer más

Androguard, ingeniería inversa para Android

Con esta aplicación Androguard (hecha en Python) podrás realizar ingeniería inversa a las aplicaciones Android. Algunas cosas que puedes hacer: Mapear y manipular (escritura y lectura) DEX/CLASS/APK/JAR Acceso al análisis del código (instrucciones, bloques, etc) Volcar las clases JVM a memoria ... y mucho más. Puedes descargarla desde aquí.
Leer más

Dalvik VM: Ficheros .dex

En esta entrada vamos a hablar de la estructura interna de los ficheros .dex. Lo primero, decir que, los ficheros .dex se encuentran empaquetados dentro los archivos .apk (Android Package). A continuación podemos ver una imagen con la estructura interna de estos ficheros:

dex_structure

Como podemos apreciar, un fichero .dex esta divido en distintas secciones llamadas “pools”. El pool de strings contiene todos los Strings que las clases dentro del .dex usan. En pool de tipos (type_ids) se guardan los distintos tipos datos usados en la aplicación, etc. Además de las secciones mostradas en la imagen, en la estructura actual de los ficheros dex existe una sección más por debajo de la de datos (data) llamada link_data o enlace de datos. En este momento dicha sección no está documentada. Todo lo que dice la documentación oficial es que en ella se guarda información sobre los ficheros enlazados estáticamente. Si el fichero no es enlazado esta sección permanece vacía y dicha documentación concluye diciendo que dicha sección se use como mejor se adecue a nuestra implementación.

Veamos la estructura de cada sección.


Leer más

Dalvik VM: Optimización

Una de las tareas críticas de Dalvik es la optimización del código (byte code) para maximizar los recursos del sistema. Recordemos que Dalvik es una máquina virtual para correr sobre sistemas ligeros y con recursos escasos. Esta fase es realmente crítica, especialmente cuando el byte code de Dalvik es generado a partir del de Java, lenguaje con fama de lento y pesado. Este proceso de optimización se lleva a cabo justo antes de que la aplicación es ejecutada por primera vez.
Leer más