Recuperar el código de un proyecto borrado desde el APK

224 views
Skip to first unread message

jh

unread,
Oct 12, 2012, 4:08:04 PM10/12/12
to android...@googlegroups.com
Hola,

Perdí el código de un proyecto y menos mal que tenía la última versión instalada en una tablet y lo pude recuperar, pongo los pasos por si ha alguien le ocurre lo mismo. Es para un proyecto que no utilice ProGuard.

Herramientas

OS - Fedora 17 64 bits

JAD - 'yum install jad' - Jad v1.5.8e.

dex2jar - http://code.google.com/p/dex2jar/  Ver. 0.0.9.9


Paso 1
Descargar la aplicación desde el dispositivo Android:  adb pull /data/app/<nombre-del-package>

Paso 2
El anterior paso nos habrá creado un archivo comprimido en formato .zip, ahora creamos una carpeta para hacer las operaciones dentro de ella y copiamos ahí el archivo descargado.

# mkdir carpeta
# cd carpeta/
[carpeta/]# scp <ruta_archivo/nombre_archivo.zip> .
[carpeta/]# unzip nombre_archivo.zip


Paso 3
Ahora tenemos la estructura de un proyecto Android pero no está la carpeta /src/ con las clases, está todo en el archivo .dex. Para obtener los archivos .class utilizamos la herramienta dex2jar, la podemos descargar en la misma carpeta:

[carpeta/]#  unzip dex2jar-0.0.9.9.zip
[carpeta/]#  sh dex2jar-0.0.9.9/d2j-dex2jar.sh  classes.dex

Esto genera un archivo .jar nombrado así "classes-dex2jar.jar" para descomprimirlo podemos usar este comando:

unzip -d classes-dex2jar.jar.tmp classes-dex2jar.jar


Paso 4
Ahora ya solo queda decompilar las clases Java, lo haremos con JAD

(En mi caso tenía varias librerías y me daba algunas excepciones, lo que hice fue borrar todas las carpetas que no tuvieran que ver con el código que quería obtener y no dio más excepciones.)
[carpeta/]# cd classes-dex2jar.jar.tmp/
[carpeta/]# rm -rf android/ javax/ myjava/ org/
[carpeta/]# cd ..
[carpeta/]# jad -o -r -sjava -dsrc classes-dex2jar.jar.tmp/**/*.class

Y listo, ya tenemos los archivos .java en el directorio 'src'.



















Alex Irmel Oviedo Solis

unread,
Oct 12, 2012, 4:13:18 PM10/12/12
to android...@googlegroups.com

Y así el código estuviera ofuscado?

jh

unread,
Oct 12, 2012, 4:22:00 PM10/12/12
to android...@googlegroups.com
También se podría pero es un poco más complicado, también depende de como se haya hecho la ofuscación. En mi caso no lo necesité porque no es una app sin firmar ni ofuscar ni optimizada con zipalign ni nada así, con eso me fue suficiente.

Saludos
Message has been deleted

jh

unread,
Oct 22, 2012, 7:22:41 PM10/22/12
to android...@googlegroups.com
Hola de nuevo,

Una manera que me ha sido más sencilla es con apkTool, 

Se hace el pull del apk y luego simplemente esto 'java -jar apktool.jar d <nombre del apk>' esperas un poco y lo tienes todo en una carpeta decompilado, es más sencillo de utilizar.

Decompilé sin problemas la app de un banco, la versión para España, pero no hay problema en hacer lo mismo con la oficial (en ingĺés). 

Saludos

jh

unread,
Oct 22, 2012, 8:24:09 PM10/22/12
to android...@googlegroups.com
Me equivoqué ahí porque apkTool no decompila nada, solo desambla. Los xml del manifest y los recursos quedan bien pero el código java está en formato smali, lo tengo hecho con jad pero con baskmali creo que queda mejor pero no lo he probado aún.
Reply all
Reply to author
Forward
0 new messages