Ingeniería inversa de un archivo APK a un proyecto

244

Accidentalmente borré mi proyecto de Eclipse , y todo lo que me queda es el archivo APK que transferí a mi teléfono. ¿Hay alguna manera de revertir el proceso de exportación de una aplicación al archivo .apk, para que pueda recuperar mi proyecto?

Marko Cakic
fuente
2
¿sabes que eclipse tiene un historial de versiones propio?
EIS
44
Si está escribiendo algo importante para usted, debe usar un VCS. Bitbucket tiene repositorios privados gratuitos.
lxknvlk
github.com/skylot/jadx
Saurabh Bhoomkar

Respuestas:

287

Hay dos herramientas útiles que generarán código Java (aproximado pero lo suficientemente bueno) a partir de un archivo APK desconocido.

  1. Descargue la herramienta dex2jar de dex2jar .
  2. Use la herramienta para convertir el archivo APK a JAR :

    $ d2j-dex2jar.bat demo.apk
    dex2jar demo.apk -> ./demo-dex2jar.jar
  3. Una vez que se genera el archivo JAR, use JD-GUI para abrir el archivo JAR. Verá los archivos Java.

La salida será similar a:

JD GUI

rahul
fuente
66
cómo obtener los archivos de recursos
srini
26
cmd está en desuso, use d2j-dex2jaren su lugar (v0.0.9.15).
Fredrick Gauss
1
@sri solo cambia el nombre del archivo apk para comprimirlo y extraerlo, tendrás los archivos de recursos en la rescarpeta
Hoang Huynh
8
@HoangHuynh tendrá una rescarpeta con archivos xml ilegibles
S.Thiongane
66
En Macsi no puedes usar dex2jar: permission deniedentonces haz esto $sudo chmod +x d2j-dex2jar.sh
Min2
81

En primer lugar, recomiendo el thisvideo, que esto aclare todas tus dudas

Si no, por favor revísalo

Procedure for decoding .apk files, step-by-step method:

Step 1:

Cree una nueva carpeta y coloque el archivo .apk en ella (que desea decodificar). Ahora cambie el nombre de la extensión de este .apkarchivo a .zip(por ejemplo: cambiar el nombre de filename.apk a filename.zip) y guárdelo.

Si hay problemas en la conversión a .zip, consulte link

Después de obtener .zip ahora obtienes archivos classes.dex, etc. En esta etapa puedes ver archivos dibujables pero no xml y java, así que continúa. Si no ve las extensiones, verifique la configuración

Step 2:

Ahora extraiga este archivo zip apk en la misma carpeta. Ahora descargue dex2jar de estolink

y extraerlo a la misma carpeta. Ahora abra el símbolo del sistema y cambie el directorio a esa carpeta.

Luego escriba dex2jar classes.dexy presione enter. Ahora obtienes el classes.dex.dex2jararchivo en la misma carpeta.

Luego descargue el descompilador de Java

Y ahora haga doble clic en jd-gui y haga clic en abrir archivo. Luego abra el classes.dex.dex2jararchivo de esa carpeta. Ahora obtiene archivos de clase y guarda todos estos archivos de clase (haga clic en el archivo y luego haga clic en "guardar todas las fuentes" en jd-gui) por nombre de src. Extraiga ese archivo zip (classes_dex2jar.src.zip)y obtendrá todos los archivos java de la aplicación.

En esta etapa, obtienes la fuente de Java, pero los archivos xml aún no se pueden leer, así que continúa.

Step 3:

Ahora abra otra carpeta nueva y coloque estos archivos

  1. poner el archivo .apk que desea decodificar

  2. descargar Apktool para windows v1.xAndApktool

instalar ventana usando google y poner en la misma carpeta

  1. descargue el archivo framework-res.apk usando google y colóquelo en la misma carpeta (no todos los archivos apk necesitan el archivo framework-res.apk)

  2. Abrir una ventana de comando

  3. Navegue al directorio raíz de APKtool y escriba el siguiente comando: apktool if framework-res.apk.

El comando anterior debería resultar en Framework installed ....

  1. apktool d "appName" .apk ("appName" indica la aplicación que desea decodificar) ahora obtiene una carpeta de archivos en esa carpeta y ahora también puede leer fácilmente archivos xml.

Step 4: Finalmente obtuvimos el res/código de proyecto, así como Java, que es nuestro objetivo al comenzar.

P.S. Si no puede obtener la carpeta res mediante los pasos anteriores, instale una nueva apktool

  • ¿Está instalado Java 1.7? Instale Apktool 2.x
  • ¿Está instalado Java 1.6 o superior? Instale Apktool 1.x

Enjoy and happy coding

Sonda Swapnil
fuente
realmente útil Es algo que no ha mencionado: apktool.jarno está en el mismo paquete, lo obtuve de un paquete anterior y lo pegué en el mismo directorio que apktool.
S. Thhiongane
1
invertí diseñar el código pero ¿por qué es el nombre de la clase, variables son como AA, AC, etc y también muchos errores
user2934930
1
no puede hacer eso en cmd
Meghal Agrawal
alguna otra forma de hacer eso?
Meghal Agrawal
2
@ user2934930 Esto significa que el código se ha ofuscado con ProGuard.
cascal
58

Sin software y sin demasiados pasos.

Simplemente cargue su APK y obtenga todos sus recursos de este sitio.

https://www.apkdecompilers.com/

Este sitio web descompilará el código incrustado en los archivos APK y extraerá todos los demás activos en el archivo.

nota: descompilo mi archivo APK y obtengo el código en un minuto desde este sitio web

Actualización 1 :

Encontré otro sitio de descompilación en línea,

http://www.javadecompilers.com/apk/ - No funciona continuamente solicitando bloqueo de ventanas emergentes

Actualización 2:

Encontré la aplicación descompilador apk en Play Store,

https://play.google.com/store/apps/details?id=com.njlabs.showjava

Podemos descompilar los archivos apk en nuestro teléfono Android. y también podemos ver los archivos java y xml en esta aplicación

Actualización 3:

Podemos usar otra opción Analizar la función APK de la versión Android studio 2.2

Compilación -> Analizar APK -> Seleccione su APK -> da resultados

ingrese la descripción de la imagen aquí

Ranjith Kumar
fuente
3
en el último método no podemos abrir la clase java, solo muestra nombres de métodos
Choletski
@Choletski, ¿estás probando el ShowJava? si hay intento actualizar & Me
Ranjith Kumar
@RanjithKumar está limitado a un tamaño de APK de 50 MB. Tengo un APK de 85 MB para descompilar.
Ravi Sharma
1
¿Cómo ejecutar ese proyecto descompilado en Android Studio? ¿Alguien puede escribir sobre esto?
mayur kukadiya
4

Realmente no. Hay una serie de conjuntos de desensamblador / descompilador dex , como smali , o dex2jar que generarán una salida semihumana (en el caso de dex2jar, puede obtener código java mediante el uso de algo como JD-GUI, pero el proceso es no es perfecto y es muy poco probable que pueda recrear al 100% su código fuente. Sin embargo, podría darle un lugar para comenzar a reconstruir su árbol fuente.

Chris Thompson
fuente
@MAC: ¡Necesita la fuente, no el archivo APK!
Shashank Kadne
2
@ShashankKadne puede ser que no recupere mis palabras
MAC
3

Sí, puedes recuperar tu proyecto. Simplemente cambie el nombre del yourproject.apkarchivo yourproject.zipy obtendrá todos los archivos dentro de ese archivo ZIP. Estamos cambiando la extensión del archivo de .apk a .zip. De ese archivo ZIP, extraiga elclasses.dex archivo y descompílelo de la siguiente manera.

Primero, necesita una herramienta para extraer todas las clases (compiladas) en el DEX a un JAR. Hay uno llamado dex2jar , que está hecho por un estudiante chino.

Luego, puede usar JD-GUI para descompilar las clases en el JAR al código fuente. El código fuente resultante debería ser bastante legible, ya que dex2jar aplica algunas optimizaciones.

Estrella
fuente
3

Para la plataforma Android, puedes probar ShowJava , disponible en Play Store.

Puede consultar el código generado a través de la interfaz de la aplicación y los archivos java generados y la estructura de carpetas se almacenan en la ShowJavacarpeta /sdcard, junto con el resultado.jar archivo de la conversión.

La aplicación es gratuita con un banner publicitario en la parte inferior de la vista principal, pero hay una opción de compra en la aplicación ($ 3,99) para eliminarla. La compra en la aplicación no agrega ninguna funcionalidad además de eliminar el banner del anuncio.

Divulgación: no soy el desarrollador de la aplicación ni estoy afiliado a él de ninguna manera.

Stephane Piriou
fuente
Usualmente lo uso para ... Buena aplicación
Rahul Kushwaha
2

Siga los pasos a continuación para hacer esto o simplemente use la gema apkToJava para este proceso, incluso se encarga de instalar las herramientas necesarias para que funcione.

  • convertir el archivo apk a zip
  • descomprimir el archivo
  • extraer clases.dex de ella
  • use dex to jar para convertir classes.dex en archivo jar
  • use jadx gui para abrir el archivo jar como código fuente de java
Ajit Singh
fuente
2

Si está buscando una alternativa profesional, eche un vistazo a JEB Decompiler de PNF Software.

Existe una versión demo que le permitirá descompilar la mayoría del código.

Mella
fuente
2

A continuación se presentan algunas de las herramientas que puede utilizar para realizar ingeniería inversa desde un archivo APK al código fuente:

  1. Dex2jar
  2. Descompilador de Java
  3. Apktool
  4. Analizador Apk
Mandeep Yadav
fuente
2

En Android Studio 3.5, es muy fácil que puedas lograrlo en un minuto. El siguiente es un proceso paso a paso.

1: Abra Android Studio, presione el botón de la ventana -> Escriba Android Studio -> haga clic en el icono para abrir la pantalla de inicio de Android Studio que se verá así.

ingrese la descripción de la imagen aquí

2: Aquí puede ver la opción "Perfil o depurar APK", haga clic en ella, seleccione su archivo apk y presione OK.

ingrese la descripción de la imagen aquí

3: abrirá todas sus clases de manifiesto y Java en un minuto, dependiendo del tamaño de apk.

ingrese la descripción de la imagen aquí

Eso es.

Imran Qamer
fuente