jueves, 5 de noviembre de 2015

¿Se puede recompilar un reversing de una APK ?



Una de las partes fundamentales a la hora del estudio de aplicaciones móviles es controlar el reversing de las mismas, con APKTool y Dex2Jar se puede hacer de forma muy sencilla.
Dex2Jar para hacer el reversing a archivos. Jar que seguro os suenan o resultan más familiares de leer.
APKTool es la herramienta que “aglutina” varias herramientas la que nos interesa para este caso es backsmali, hace un reversing de la aplicación a código SMALI, este es el código que entiende la DVM, por decirlo de otro modo, el código que entiende internamente la máquina virtual de Android.
Lo habitual es hacer reversing con el Dex2Jar, abrir los archivos con JD-GUI y después desde la misma se guardan de forma que, ya son más o menos legibles desde tu editor de códigoi habitual (eclipse, Androdi Studio…).
Existe la forma de que, con paciencia, hacer el árbol de directorios de la aplicación Android y meter estos jar en su correspondiente carpeta dando la falsa ilusión de que se podría modificar ese código Java y volver a compilar.
Pues esto es erróneo, no se puede volver a compilar este código. El compilador cuando realiza el compilado (menudo trabalenguas) de las aplicaciones modifica el código optimizándolo y variándolo a su necesidad. El resultado de ello es que cuando estas revisando el código con JD-GUI puede ver casos en que devuelve un error y no muestra el código:
 

Esto es porque no ha podido hacer el reversing completo de ese archivo, en cuanto tengas en el resto del programa alguna referencia al mismo éste devolvería un error. Además de que no tienes la certeza de que el 100% de código Java obtenido por reingeniería es el auténtico. Como os digo el compilador realiza muchos trabajo sobre el mismo.
¿Existe alguna manera entonces de modificar el código fuente de una APK?
Si, tal y como hemos mencionado al principio APKTool incluye BackSmali. El código Smali sí se puede tocar, modificar y volver a compilar.
Para ser un código más cercano al hardware que Java es bastante legible por lo que os invito a que hagáis la prueba, en Smali cambios básicos no son excesivamente complicados de hacer y rápidamente te orientas en el código.
Os dejo un par de enlaces para quienes quieran quieran aprender más sobre Smali:
 

No hay comentarios:

Publicar un comentario

Esperando tu comentario...