13 jun. 2014

Depurar malware Android con Eclipse

Sí, habéis entendido correctamente: depurar malware para Android con el IDE Eclipse. Normalmente Eclipse se usa para desarrollar aplicaciones como Android, no para depurar aplicaciones compiladas. Con el depurador/desensamblador IDA se puede ver el código Dalvik de una aplicación Android, pero no se puede depurar una aplicación a ese nivel. También existen herramientas para transformar las aplicaciones Android en jar, con dex2jar por ejemplo y luego decompilarlos. Sin embargo, la decompilación no se hace correctamente, especialmente con los bucles. Como a veces el atacante ofusca su código, la ingeniería inversa es más difícil. Entonces, necesitamos de una herramienta para depurar la aplicación ofuscada.

En un foro ruso, hemos descubierto una manera de depurar las aplicaciones Android desensamblando el código Dalvik. Usaba la herramienta apktool para desensamblar las aplicaciones Android y el IDE Netbeans 6.8 para depurar. Esta técnica fue mejorada y adaptada para la nueva versión de Eclipse. En esta entrada del blog, me gustaría compartir ésta técnica, que consideramos merece la pena.

Como ejemplo, usaremos una aplicación que hemos desarrollado llamada SilentSMS y que tiene el nombre de paquete "com.example.silentsms". Admitimos que el usuario tiene la configuración para desarrollar aplicaciones Android con Eclipse, es decir el emulador Android, DDMS para depurar, etc.

El primer paso consiste en desensamblar el APK en código Dalvik para modificar la aplicación y hacerla depurable. Para ello, usamos la herramienta Apktool 2.0 beta. Después del desensamblado, localizamos el archivo "AndroidManifest.xml" que nos permite saber cual es la primera parte del programa interpretada y también nos permite hacer la aplicación depurable. Para ello, añadimos la bandera android:debuggable a "true" a la etiqueta "application". También, nos permite saber que la primera parte del código interpretado se encuentra en la clase "com/example/silentsms/MainActivity".
Sin embargo, haciendo la aplicación depurable no permite a la aplicación esperar a un depurador. Es decir, al ejecutar la aplicación, no podríamos depurar al comienzo. Para forzar a que la aplicación espere al depurador, añadimos la instrucción:

"invoke-static {}, Landroid/os/Debug;->waitForDebugger()V".

Es importante no olvidar el "a = 0;//" delante de ésta instrucción.

¿Por qué añadir un código delante? La razón es que cuando vamos a importar el proyecto desensamblado en Eclipse, no podríamos depurarlo por culpa de los errores de sintaxis generados por Eclipse. Es decir, Eclipse no sabe analizar sintácticamente el código Dalvik. Para evitar esto, comentamos el código Dalvik y ponemos una instrucción. En nuestro caso, incluimos la variable "a" puesta a 0 en cada línea. En otras palabras, Eclipse verá solo las instrucciones "a = 0", mientras que nosotros veremos el código Dalvik correspondiente a esta línea.

Contenido completo en fuente original Hispasec

0 comentarios:

Publicar un comentario

Gracias por dejar un comentario en Segu-Info
Si vas a dejar una consulta, procura tener habilitado tu perfil en Blogger o deja una forma de contacto.

Gracias por comentar!