¿Hay alguna forma de obtener el código fuente de un archivo APK?

El disco duro de mi computadora portátil se bloqueó y perdí todo el código fuente de una aplicación en la que he estado trabajando durante los últimos dos meses. Todo lo que tengo es el archivo APK que está almacenado en mi correo electrónico desde que se lo envié a un amigo.

¿Hay alguna forma de extraer mi código fuente de este archivo APK?

preguntado el 29 de agosto de 10 a las 00:08

Para su información, hay una verificación de descompilador en línea aquí -

¿Significa esto que podemos obtener el código fuente de aplicaciones por valor de millones de dólares como Whatsapp o Facebook? ¿Todo esto es de código abierto? -

@Faizan has oído hablar de proguard ?? -

La redacción de la pregunta contiene curiosidades irrelevantes sobre la historia de la vida y, como tal, puede interpretarse como recomendar una herramienta. Sin embargo, la respuesta podría haber sido javac -decompile, que luego se ajustaría a las pautas de SO. Me parece que las respuestas son fuera de tema, no la pregunta. -

in este artículo explican cómo hacen ingeniería inversa en Pokémon Go -

28 Respuestas

Manera simple: use la herramienta en línea https://www.decompiler.com/, cargue apk y obtenga el código fuente.


Procedimiento para decodificar archivos .apk, método paso a paso:

Paso 1:

  1. Cree una nueva carpeta y copie el archivo .apk que desea decodificar.

  2. Ahora cambie el nombre de la extensión de este archivo .apk a .zip (por ejemplo, cambie el nombre de filename.apk a filename.zip) y guárdelo. Ahora puede acceder a los archivos classes.dex, etc. En esta etapa, puede ver los elementos de diseño, pero no los archivos xml y java, así que continúe.

Paso 2:

  1. Ahora extraiga este archivo .zip en la misma carpeta (o NUEVA CARPETA).

  2. Descarga dex2jar y extraerlo a la misma carpeta (o NUEVA CARPETA).

  3. Mueva el archivo classes.dex a la carpeta dex2jar.

  4. Ahora abra el símbolo del sistema y cambie el directorio a esa carpeta (o NUEVA CARPETA). A continuación, escribir d2j-dex2jar classes.dex (para terminal mac o escritura ubuntu ./d2j-dex2jar.sh classes.dex) y presione enter. Ahora tiene el archivo classes.dex.dex2jar en la misma carpeta.

  5. Descargar descompilador de Java, haga doble clic en jd-gui, haga clic en abrir archivo y abra el archivo classes.dex.dex2jar de esa carpeta: ahora obtendrá archivos de clase.

  6. Guarde todos estos archivos de clase (en jd-gui, haga clic en Archivo -> Guardar todas las fuentes) por nombre de src. En esta etapa, obtiene el código fuente de Java, pero los archivos .xml aún no se pueden leer, así que continúe.

Paso 3:

Ahora abre otra carpeta nueva

  1. Coloque el archivo .apk que desea decodificar

  2. Descargue la última versión de apktool Y DE ventana de instalación de apktool (ambos se pueden descargar desde el mismo enlace) y colocarlos en la misma carpeta

  3. Abrir una ventana de comando

  4. Ahora ejecuta un comando como apktool if framework-res.apk (si no lo tienes Consiguelo aqui)y después

  5. apktool d myApp.apk (donde myApp.apk denota el nombre de archivo que desea decodificar)

ahora obtienes una carpeta de archivos en esa carpeta y puedes leer fácilmente los archivos xml del apk.

Paso 4:

No es un paso cualquiera, simplemente copie el contenido de ambas carpetas (en este caso, ambas carpetas nuevas) en la única

y disfruta del código fuente ...

Respondido el 20 de enero de 21 a las 20:01

@prankulgarg, en el punto 5 del paso 3 obtengo el siguiente error: No se puede acceder al archivo jar E: \ apktojava \ testt \\ apktool.jar - user1025050

En lugar de escribir dex2jar clases.dex en cmd probar d2j-dex2jar clases.dex. Debido a que dex2jar classes.dex, este cmd está obsoleto. - Umesh

Para aquellos que no pueden encontrar framework-res.apk. Descárgalo desde aquí - atuljatri

Aquellos que no encontraron d2j-dex2jar.sh, descarguen dex2jar desde aquí: dex2jar.googlecode.com/files/dex2jar-0.0.9.15.zip - Reaz Murió

Para las personas atrapadas en el paso 2: 4 descarguen esta versión y resolverá el problema: sourceforge.net/projects/dex2jar/files/dex2jar-2.0.zip/download lo hizo por mí. @delive - siriusteor77

Esta es una descripción alternativa, en caso de que alguien se quede atascado con la descripción anterior. Sigue los pasos:

  1. descargar apktool.bat (o apktool para Linux) y apktool_<version>.jar del http://ibotpeaches.github.io/Apktool/install/
  2. cambiar el nombre del archivo jar de arriba a apktool.jar y poner ambos archivos en la misma carpeta

  3. abre una caja de DOScmd.exe) y cámbielo a esa carpeta; Verifique que se haya instalado un entorno Java (para Linux, consulte las notas sobre las bibliotecas requeridas también)
  4. Comienzo: apktool decode [apk file]

    Resultado intermedio: archivos de recursos, AndroidManifest.xml

  5. descomprima el archivo APK con un descomprimidor de su elección

    Resultado intermedio: classes.dex

  6. descargar y extraer dex2jar-0.0.9.15.zip del http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.9.15.zip&can=2&q=
  7. drag and drop classes.dex sobre dex2jar.bat (o ingrese <path_to>\dex2jar.bat classes.dex en una caja de DOS; para uso de Linux dex2jar.sh)

    Resultado intermedio: classes_dex2jar.jar

  8. deshacer classes_dex2jar.jar (puede ser opcional dependiendo del descompilador utilizado)
  9. descompilar sus archivos de clase (por ejemplo, con JD-GUI or Descompilador de DJ)

    Resultado: código fuente

Nota: no está permitido descompilar paquetes de terceros; esta guía está destinada a recuperar el código fuente personal de un archivo APK únicamente; finalmente, el código resultante probablemente se ofusque

Respondido 12 Oct 16, 01:10

¡También podría agregar que hay una alternativa moderna a esta ruta APKTool-> dex2jar-> JD-GUI! Simplemente pruebe el descompilador de código abierto APK y DEX llamado Jadx: sourceforge.net/proyectos/jadx/archivos También tiene versión online aquí: javadecompilers.com/apk - andres rukin

Está permitido (léase: legal) descompilar cualquier Archivo APK. Vea la siguiente pregunta: stackoverflow.com/questions/9674557/… - Rakete1111

Porque esos apktool retorno smali archivos? Cómo llegar java ¿expediente? - rminaj

@AndrewRukin Ese enlace redirige a la página dex2jar de sourceforge. - user202729

Si bien es posible que pueda descompilar su APK archivo, es probable que se encuentre con un gran problema:

no devolverá el código que escribió. En su lugar, devolverá lo que sea el compilador en línea, con variables con nombres aleatorios, así como funciones con nombres aleatorios. Podría llevar mucho más tiempo intentar descompilarlo y restaurarlo en el código que tenía, que empezar de nuevo.

Lamentablemente, este tipo de cosas han acabado con muchos proyectos.
Para el futuro, recomiendo encarecidamente aprender un sistema de control de versiones, como CVS, SVN y git etc.

y cómo hacer una copia de seguridad.

Respondido el 14 de junio de 16 a las 12:06

Un servicio como Dropbox también ayudará. - jeremy logan

y siempre hay una forma de grabar CD GorvGoyl

También hay una nueva aplicación en el Play Store con el que es posible descompilar un apk (aplicaciones del sistema también) y ver el código fuente directamente en su teléfono inteligente. Guarda los archivos en su tarjeta SD para que también pueda verlos en su computadora. No requiere root ni nada más.

Simplemente instale y diviértase. Creo que esta es la forma más sencilla de descompilar una aplicación.

Respondido el 11 de enero de 14 a las 12:01

@MidhunVijayakumar ¿podrías convertir la apk a código fuente usando esto? - Sajeev

apktool es lo mejor que puedes probar. He guardado algo de xml con él, pero honestamente no sé cómo funcionará con el código .java.

Te recomendaría tener un repositorio de código incluso si eres el único codificador. He estado usando Casillero de proyectos para mis propios proyectos. Te ofrece repositorios svn y git gratuitos.

Respondido 05 ago 16, 08:08

Encontrará apktool indispensable si desea extraer recursos (es decir, imágenes de una aplicación de Android. En realidad, ¡la herramienta no tiene competidores!). Una versión en línea de apktool está disponible aquí: www.javadecompilers.com/apktool - andres rukin

Estos dos artículos describen cómo combinar el uso de apktool y dex2jar tomar un APK file y cree un proyecto de Eclipse que pueda construirlo y ejecutarlo.

http://blog.inyourbits.com/2012/11/extending-existing-android-applications.html

http://blog.inyourbits.com/2012/12/extending-existing-android-applications.html

Básicamente tu:

  1. Utiliza apktool para sacar los archivos de recursos de la apk
  2. Utiliza dex2jar para obtener un archivo jar que contiene las clases en un formato que le gustará a Eclipse.
  3. Cree un proyecto de Eclipse apúntelo a los archivos de recursos y al nuevo archivo jar
  4. Abra el archivo jar con una utilidad zip y elimine los recursos existentes
  5. Abra el archivo jar con JDGui para ver el código fuente
  6. Tome cualquier código fuente que necesite de JDGui, pégalo en una clase dentro de Eclipse y modifícalo
  7. Elimine esa clase del archivo jar (para que no tenga la misma clase definida varias veces)
  8. Ejecutarlo.

Respondido el 14 de junio de 16 a las 14:06

Sé que esta pregunta aún está respondida, me gustaría pasar una información: hay un descompilador en línea para las aplicaciones de Android decompileandroid.com Cargue apk desde la máquina local, espere unos momentos, descargue el código fuente en formato zip. - snehal masne

Suena bien. ¡Y luego, el sitio web decompileandroid también tiene una copia de todas tus fuentes! ¡Inteligente! - DDDeportes

Una pregunta, tengo una apk descompilada pero en jd gui no sé si existen las clases reales de Java, ¿sabes si una apk se descompila, existen las clases reales de Java? - usuario9049996

apktool funcionará. Ni siquiera necesita conocer el almacén de claves para extraer el código fuente (lo cual da un poco de miedo). El principal inconveniente es que la fuente se presenta en formato Smali en lugar de Java. Sin embargo, otros archivos como el icono y main.xml funcionan perfectamente bien y puede valer la pena al menos recuperarlos. En última instancia, lo más probable es que deba volver a escribir su código Java desde cero.

Puedes encontrar apktool aquí. Simplemente descargue apktool y el ayudante apropiado (para Windows, Linux o Mac OS). Recomiendo usar una herramienta como 7-zip para descomprimirlos.

Respondido 29 ago 10, 05:08

Hay algunas formas de hacer esto:

  1. Utilice la función "Perfil o depuración de APK" en Android Studio 3.0.

    Te permite abrir y explorar APK en Android Studio. Las clases se descompilan en smalli. Los recursos no se extraen y cosas como "Ir a la definición", "Buscar todas las referencias" y la depuración no funcionan sin el código fuente (android studio 3.0 canary 9). Algunas funciones de Smalli adicionales pueden funcionar con pequeña idea.

    android-estudio

    seleccione Archivo

    código

  2. Utiliza jadx.

    Jadx descompila el código de un APK determinado en archivos fuente de Java.

    jdax-img

  3. Utiliza apktool.

    Apktool es una herramienta de línea de comandos que extrae recursos y descompila código en smalli para una aplicación determinada. También puede volver a compilar usando apktool. Aquí tienes un ejemplo en acción:

    $ apktool d test.apk
    I: Using Apktool 2.2.4 on test.apk
    I: Loading resource table...
    I: Decoding AndroidManifest.xml with resources...
    I: Loading resource table from file: 1.apk
    I: Regular manifest package...
    I: Decoding file-resources...
    I: Decoding values */* XMLs...
    I: Baksmaling classes.dex...
    I: Copying assets and libs...
    I: Copying unknown files...
    I: Copying original files...
    $ apktool b test
    I: Using Apktool 2.2.4 on test
    I: Checking whether sources has changed...
    I: Smaling smali folder into classes.dex...
    I: Checking whether resources has changed...
    I: Building resources...
    I: Building apk file...
    I: Copying unknown files/dir...
    

Respondido 11 ago 17, 04:08

Probé jadx, pero incluso con helloworld simple, aunque lo descompila en java, sin embargo, al intentar abrir el proyecto en el estudio de Android y volver a compilarlo en apk, falla por muchas razones (archivos duplicados, etc.). ¿Existe algún método que cree java que se pueda volver a compilar en apk? - ransh

@ransh Normalmente uso jadx para leer el código y luego apktool para modificar el código. apktool no crea java pero permite la compilación. - 0xcafe

0xcaff, gracias por la aclaración. eso tiene sentido ahora. Porque intentar compilar un Java descompilado en Android Studio, no estaba funcionando. - ransh

Puede ser el más fácil de ver la fuente:

En Android Studio 2.3, Build -> Analyze APK -> Select the apk that you want to decompile.
Verá su código fuente.

Enlace de referencia:
https://medium.com/google-developers/making-the-most-of-the-apk-analyzer-c066cb871ea2

contestado el 14 de mayo de 19 a las 02:05

Enumera clases y métodos, pero no proporciona código fuente. - WSS

Puede obtener los archivos anteriores solo cambiando ".apk" a ".zip" - M. Usman Khan

A continuación ONLINE herramienta:

http://www.javadecompilers.com/apk

lo hace TODO con un clic: descompilado archivos .java + recursos + xml (en un archivo .zip) con muy buen descompilador (jadx devuelve el código java en lugares / funciones donde otras compilaciones devuelven comentarios dentro de funciones como "no se puede descompilar" o algún código ensamblador / máquina de Android)

Respondido 24 ago 17, 13:08

sí, esto es genial, pero en lugar de los nombres de las funciones, ha cambiado todos los nombres de las funciones a CS1001 y así sucesivamente. Entonces, ¿cómo reconocerlos? y una cosa más: ¿Podemos usar esta apk descompilada directamente como nuestro proyecto de estudio de Android? ¿Funcionará? - Ziaur Rahman

entonces, ¿con qué propósito descompilamos algunos apk, si no podemos usar su funcionalidad en nuestras aplicaciones? - Ziaur Rahman

@ZiaUrRahman No lo sé. Sin embargo, en mi caso, descompilo el código para analizar el algoritmo. ¿Comprueba si el código descompilado de esa herramienta puede ser compilado por Android Studio de forma totalmente automática, o necesita algún "procesamiento humano"? - Kamil Kielczewski

Importé el proyecto descompilado en Android Studio, pero no hay gradle allí y el proyecto tiene muchos archivos, pero no lo entendí hasta que lo ejecutamos. Simplemente no funcionó. Necesito hacer que el proyecto descompilado sea completamente funcional en Android Studio y luego obtener algunas funciones básicas de algunas, luego quiero usarlo / incrustarlo en mi propio proyecto. Entonces, ¿hay alguna forma de cómo hacer esto? - Ziaur Rahman

Este sitio https://www.apkdecompilers.com/ lo hizo automáticamente.

Primero probé el sitio mencionado en la respuesta aceptada, pero eso no funcionó para mí.

Respondido el 11 de Septiembre de 17 a las 07:09

No pude recuperar mi código fuente de Java ... parece algo como un archivo adjunto y ... iman kazemayni

@imankazemayni en el enlace de arriba, "busque" su archivo APK y haga clic en "Descompilar su APK". Tomará algún tiempo y luego debería darle el código fuente, si el código no está encriptado. - M. Usman Khan

¿Sabes cuál es el impacto multidex en el cifrado? - iman kazemayni

Yo personalmente recomiendo Mostrar aplicación Java para Android para obtener el código fuente. Puedes descargarlo desde Play Store o desde aquí

Respondido el 30 de diciembre de 17 a las 11:12

La mayoría de los compiladores en línea no funcionan, pero esta aplicación sí funciona. Gracias - Sunil

Te mostraré otra forma de descompilar el . Apk archivos.

Puede seguir los 2 primeros pasos desde "bromista garg". Entonces tienes otras oportunidades:

Paso 3':

Descargue "JD-GUI", eso es fácil de encontrar este. Abre tu .jar archivo en "jd-gui.exe". (Archivo> Abrir archivo> 'encontró su .jar expediente'). Después de este procedimiento, puede guardar todos los recursos en un .zip archivo.

¿Entonces

1 ° - Tienes que cambiar el nombre del . Apk presentar a la .zip

2do - Tienes que decodificar .dex archivo (si lo desea, decodifique el . Apk presentar a la dex2jar, eso es posible)

3º - Tienes que decodificar .jar archivo con JD-GUI

Respondido 25 Feb 13, 12:02

¿Qué proporciona esta respuesta que las otras no? - Jørgen R

Realmente no tienes que cambiarle el nombre a zip. Podría abrir el archivo apk directamente con 7-zip. - miva2

Apktool para aplicaciones de Android binarias, cerradas y de terceros de ingeniería inversa.

Puede decodificar recursos a una forma casi original y reconstruirlos después de realizar algunas modificaciones.

Permite depurar código pequeño paso a paso. También facilita el trabajo con una aplicación debido a la estructura de archivos similar a un proyecto y la automatización de algunas tareas repetitivas como la creación de apk, etc.

http://ibotpeaches.github.io/Apktool/

contestado el 15 de mayo de 16 a las 09:05

apktool es el camino a seguir. El servicio online apktool también existe: http://www.javadecompilers.com/apktool

Obviamente, existen algunas limitaciones debido a la 'naturaleza en línea' del servicio: puede extraer e investigar los activos y el archivo de manifiesto, pero es imposible volver a compilar la aplicación en este momento.

Aún así, esta es una forma sencilla de 'abrir' la aplicación de Android.

Respondido 11 Jul 17, 06:07

Puedes probar DexPatcher. Incluso se integra con Android Studio. Usa Apktool y Dex2Jar internamente.
También puede utilizar esas herramientas de forma independiente. Apktool descompila apk y extrae archivos .dex, que luego se pueden convertir a jar usando Dex2Jar. Jar se puede descompilar usando JD-GUI. Puede ver el código Java con la ayuda de esa herramienta. Aunque no se puede garantizar la similitud del código descompilado con el código real. Hay algunos avanzados código de ofuscación herramientas disponibles en el mercado, que estropean el código para dificultar su descompilación / comprensión. p.ej. Proguard

respondido 16 nov., 17:10

Hola ¿Cómo utilizar DexPatcher con Android Studio? - ravi152

No puedo explicar todo en los comentarios. Google es tu amigo :) También hay algunos buenos tutoriales de YouTube. - Lakshmikant Deshpande

según su condición, si su apk de Android:

Condición 1: NO endurecer (por Tencent Legu / Qihoo 360 / ...)

Opción 1: uso del servicio en línea

como:

utilizando www.javadecompilers.com

ir:

para decodificar automáticamente de apk a código fuente java

pasos:

upload archivo apk + clic Run + espera un poco + clic Download para obtener zip + descomprimir ->

sources/com/{yourCompanyName}/{yourProjectName}

es su código fuente java esperado

Choice2: descompilar / crackear usted mismo

use la herramienta relacionada para descompilar / crackear usted mismo:

utilizado jadx/jadx-gui convertir apk a java sourcecode

descargar jadx-0.9.0.zip luego descomprime para obtener bin/jadx, entonces:

  • modo de línea de comando:
    • en ejecución terminal: jadx-0.9.0/bin/jadx -o output_folder /path_to_your_apk/your_apk_file.apk
    • output_folder se mostrará decodificado sources y resources
      • sources/com/{yourCompanyName}/{yourProjectName} es tu esperado java sourcecode
  • Modo GUI
    • doble clic para ejecutar jadx-0.9.0/bin/jadx-gui (Linux jadx-gui.sh / Windows jadx-gui.bat)
    • abiertas apk presentar
    • se decodificará automáticamente -> verá su código fuente java esperado
    • save all or save as Gradle project

p.ej:

Condición 2: endurecimiento (por Tencent Legu / Qihoo 360 / ...)

el método principal de 3 steps:

  1. apk/app to dex
  2. dex to jar
  3. jar to java src

explicación detallada:

Step1: apk/app to dex

usar la herramientaFDex2/ DumpDex) volcado / enganche (uno o varios) dex archivo de la aplicación en ejecución

pasos:

preparar el ambiente

volcar dex desde la aplicación en ejecución

  • corrida FDex2 luego haga clic en el nombre de su apk para habilitar más tarde para capturar / conectar dex

  • (en el teléfono / emulador) ejecuta tu aplicación
  • encontrar y copiar el volcado de recursos completos de apk en /data/data/com/yourCompanyName/yourProjectName
    • en su carpeta raíz normalmente encontrará varios dex presentar

Step2: dex to jar

usar la herramientadex2jar) convertir (la lógica de la aplicación específica que contiene) dex presentar a la jar presentar

descargar dex2jar tiene dex-tools-2.1-SNAPSHOT.zip, descomprimir tengo dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh, entonces

sh dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f your_dex_name.dex

p.ej:

dex-tools-2.1-SNAPSHOT/d2j-dex2jar.sh -f com.xxx.yyy8825612.dex
dex2jar com.xxx.yyy8825612.dex -> ./com.xxx.yyy8825612-dex2jar.jar

Step3: jar to java src

use una de las herramientas:

convertir jar a java src

para el efecto de conversión de jar a java src:

Jadx > Procyon > CRF >> JD-GUI

así que recomiendo usar: Jadx/jadx-gui

pasos:

  • doble clic para ejecutar jadx-gui
  • abiertas dex presentar
  • File -> save all

p.ej:

exportado java src:


Una explicación más detallada puede ver mi libro electrónico en línea Chino tutorial:

Respondido 08 Abr '19, 09:04

Android Studio te ofrece analizar cualquier archivo apk.

1 - Desde el menú de compilación, elija la opción analizar apk y seleccione el archivo apk. 2 - Esto dará como resultado el archivo classes.dex y otros archivos. 3 - Haga clic en classes.dex que le dará la lista de carpetas, paquetes, bibliotecas y archivos. 4 - Desde y la configuración de Android Studio instale un complemento llamado "Dex to Jar" 5 - Haga clic en cualquier archivo de actividad de su proyecto extraído y elija dex to jar en el menú de compilación.

Esto dará como resultado el código real de su archivo java.

Saludos.

contestado el 10 de mayo de 19 a las 20:05

La forma más sencilla es usar Apk OneClick Decompiler. Ese es un paquete de herramientas para descompilar y desensamblar APK (paquetes de Android).

CATEGORIAS

  • Todas las funciones están integradas en el menú contextual de Windows.
  • Descompile clases de APK en códigos fuente de Java.
  • Desmontar APK en el código pequeño y decodificar sus recursos.
  • Instale APK en el teléfono haciendo clic derecho.
  • Vuelva a compilar el APK después de editar el código pequeño y / o los recursos. Durante la recompilación:
  • Optimizar imágenes png
  • Firmar apks
  • tirolesa

REQUISITOS

Se debe instalar Java Runtime Environment (JRE).

Puedes descargarlo desde este enlace Descompilador de apk OneClick

Disfrutalo.

Respondido 16 Feb 19, 13:02

Encontré lo siguiente como el método más simple:

  1. Cambie el nombre de su app.apk a app.zip (cambie la extensión de apk a zip)
  2. Extrae el archivo zip en una carpeta
  3. Utiliza JADX herramienta para leer el código fuente, presente en el archivo classes.dex.

Respondido 25 Feb 19, 22:02

Hay una aplicación para eso y, por lo general, solo requiere unos pocos clics y ya está. https://github.com/Nuvolect/DeepDive-Android

  1. Seleccione Aplicaciones, en "Aplicaciones instaladas", seleccione su aplicación. Si no está allí, puede cargar el APK.
  2. Seleccione "Extraer APK"
  3. Selecciona "Desempaquetar APK".
  4. Seleccione "Descompilar con Jadx". Esto puede tardar unos segundos o unos minutos dependiendo de la velocidad de su dispositivo.

Después de eso, puede navegar por el código fuente, descargarlo a otra computadora con elFinder o buscarlo usando Lucene.

Además de Jadx tiene descompiladores CFR y Fernflower.

Respondido 26 Feb 19, 21:02

Desarrollé una herramienta: analizador de código, se ejecuta en iPhone / iPad / Mac, para analizar archivos Java / Android, https://decompile.io

enter image description here

enter image description here

contestado el 11 de mayo de 20 a las 03:05

1. Extracción de la fuente de una aplicación nativa de Android

El código fuente de una aplicación nativa de Android no es difícil de obtener, pero requiere herramientas adicionales que sean compatibles con Windows, Mac y Linux. Mis favoritos personales cuando se trata de herramientas son dex2jar y JD-GUI.

Si no está familiarizado con estas herramientas, dex2jar leerá los archivos ejecutables de Dalvik y los convertirá al formato JAR estándar. JD-GUI leerá los archivos JAR y descompilará los archivos de clase que se encuentran en ellos.

Para facilitar la comprensión del proceso de extracción, comencemos por crear un nuevo proyecto nativo de Android:

android create project --target 19 --name TestProject --path . --activity TestProjectActivity --package com.nraboy.testproject

El comando anterior lo dejará con un proyecto de Android en su ruta actual del símbolo del sistema.

Dado que nuestro proyecto ya tiene una clase de actividad incluida, vayamos directamente al proceso de compilación. Puede hacerme pasar un mal rato todo el día sobre el uso de Ant en lugar de Gradle o Maven, pero para este tutorial me quedaré con él.

ant debug

El comando anterior creará una compilación de depuración que normalmente se encuentra en bin / TestProject-debug.apk.

Con su herramienta de descompresión favorita, extraiga el archivo APK. 7-zip es una herramienta popular, pero si está en una Mac, puede ejecutar lo siguiente desde la Terminal:

unzip TestProject-debug.apk

Esto nos dejará con un montón de archivos y carpetas, pero uno es importante para nosotros. Tome nota de classes.dex porque contiene todo nuestro código fuente. Para convertirlo en algo legible, necesitamos ejecutar dex2jar en él. Puede usar dex2jar en Mac, Linux y Windows, pero lo explicaré desde la perspectiva de Mac.

Con la classes.dex archivo en su extraído dex2jar directorio, ejecute lo siguiente desde la Terminal:

./dex2jar.sh classes.dex

Abra la aplicación JD-GUI que descargó porque ahora es el momento de decodificar el JAR y los archivos de clase empaquetados. Abra el recién creado clases_dex2jar.jar archivo y debería ver algo como lo siguiente:

enter image description here ¿Ves lo fácil que fue acceder al código fuente de tu APK nativo de Android? Ahora, ¿qué puede hacer para protegerse mejor?

El SDK de Android se envía con guardaespaldas, que es un módulo de ofuscación. ¿Qué es la ofuscación, preguntas?

Ofuscación a través de Wikipedia :

La ofuscación (o el enturbiamiento) es ocultar el significado pretendido en la comunicación, lo que hace que la comunicación sea confusa, deliberadamente ambigua y más difícil de interpretar.

Si bien la ofuscación no cifrará su código fuente, hará que sea más difícil entenderlo. Con Proguard configurado, ejecute Ant en modo de lanzamiento y su código debería ofuscarse en la compilación.

2. Extracción de la fuente de una aplicación híbrida de Android

El código fuente de las aplicaciones híbridas es, con mucho, el más fácil de extraer. No necesita ningún software adicional instalado en su computadora, solo acceda al archivo APK.

Para facilitar la comprensión, creemos primero un nuevo proyecto de Apache Cordova y luego extráigalo. Empiece por hacer lo siguiente:

cordova create TestProject com.example.testproject TestProject
cd TestProject
cordova platform add android

Durante el proceso de creación del proyecto, se quedan con las plantillas CSS, HTML y JavaScript de Apache Cordova predeterminadas. Eso está bien para nosotros en este ejemplo. Sigamos adelante y construyamos nuestro proyecto en un archivo APK distribuido:

cordova build android

Te vas a quedar con plataformas / android / ant-build / CordovaApp-debug.apk o algo parecido a las plataformas / android / ant-build / * - debug.apk.

Aunque se trata de una compilación de depuración, sigue siendo muy útil. Con 7-zip o similar instalado, haga clic derecho en el archivo APK y elija extraerlo o descomprimirlo. En el directorio extraído, ahora debería tener acceso a todos sus archivos fuente basados ​​en web. Digo basado en web porque cualquier archivo Java utilizado por Apache Cordova se habrá compilado en archivos de clase. Sin embargo, los archivos CSS, HTML y JavaScript no se tocan.

Acaba de ver lo deprimentemente fácil que es obtener el código fuente de una aplicación híbrida. Entonces, ¿qué puede hacer para protegerse mejor?

Puede fechar su código, que es una forma de ofuscación.

Hacer esto no cifrará su código, pero hará que sea mucho más difícil de entender.

Si desea mejorar su código, le recomiendo que instale UglifyJS ya que es prácticamente el estándar a partir de ahora. Si prefiere utilizar un ejecutor de tareas, Grunt y Gulp también tienen módulos para UglifyJS.

Respondido el 10 de Septiembre de 20 a las 22:09

Hay muchas aplicaciones y métodos en el mercado para descompilar el archivo apk en una clase java, pero si la aplicación está compilada con la regla ProGuard, entonces estás en un gran problema porque esta regla reducirá todos los archivos dex a un nombre de carácter pequeño y luego no se puede rastrear la implementación. ver https://developer.android.com/studio/build/shrink-code para aclarar el modo.

Codificación feliz ...

Respondido 27 Oct 20, 11:10

Me he estado volviendo loco durante días tratando de hacer que dex2jar funcione en una computadora portátil Fedora 31 contra una aplicación que simplemente no iba a funcionar. Este script de Python 3 hizo el truco en minutos e instalar jd-gui hizo que los archivos de clase fueran legibles por humanos.

http://java-decompiler.github.io/

https://github.com/Storyyeller/enjarify

específicamente, esto es lo que ejecuté:

# i installed apktool before the rest of the stuff, may not need it but here it is
$> cd /opt
$> sudo mkdir apktool
$> cd apktool/
$> sudo wget https://raw.githubusercontent.com/iBotPeaches/Apktool/master/scripts/linux/apktool
$> sudo wget https://bitbucket.org/iBotPeaches/apktool/downloads/apktool_2.4.1.jar
$> sudo mv apktool_2.4.1.jar apktool.jar
$> sudo mv apktool* /usr/bin/
$> sudo chmod a+x /usr/bin/apktool*

# and enjarify
$> cd /opt
$> sudo git clone https://github.com/Storyyeller/enjarify.git
$> cd enjarify/
$> sudo ln -s /opt/enjarify/enjarify.sh /usr/bin/enjarify

# and finally jd-gui
$> cd /opt
$> sudo git clone https://github.com/java-decompiler/jd-gui.git
$> cd jd-gui/
$> sudo ./gradlew build

# I made an alias to kick of the jd-gui with short commandline rather than long java -jar blahblahblah :)
$> echo "jd-gui='java -jar /opt/jd-gui/build/launch4j/lib/jd-gui-1.6.6.jar'" >> ~/.bashrc

Ahora uno debería poder rondar lo siguiente para obtener archivos de clase:

$> enjarify yourapkfile.apk

Y para iniciar jd-gui:

$> jd-gui

¡Entonces solo abre tus archivos de clase!

Respondido el 29 de enero de 20 a las 01:01

Usa esta herramienta http://www.javadecompilers.com/

Pero recientemente, una nueva ola de descompiladores ha incursionado en el mercado: Procyon, CFR, JD, Fernflower, Krakatau, Vela.

Aquí hay una lista de descompiladores presentados en este sitio:

CFR - Gratis, sin código fuente disponible, http://www.benf.org/other/cfr/ Autor: Lee Benfield

¡Un descompilador muy bien actualizado! CFR es capaz de descompilar las características modernas de Java: módulos Java 9, Java 8 lambdas, Java 7 String switches, etc. ¡Incluso hará un buen trabajo al convertir archivos de clases de otros idiomas JVM en Java!

JD - gratis solo para uso no comercial, http://jd.benow.ca/ Autor: Emmanuel Dupuy

Actualizado en 2015. Tiene su propia interfaz visual y complementos para Eclipse e IntelliJ. Escrito en C ++, muy rápido. Soporta Java 5.

Procyon - fuente abierta, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler Autor: Mike Strobel

helecho - fuente abierta, https://github.com/fesh0r/fernflower Autor: Egor Ushakov

Actualizado en 2015. Un descompilador de Java analítico muy prometedor, ahora se convierte en una parte integral de IntelliJ 14. (https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler) Admite Java hasta la versión 6 (anotaciones, genéricos, enumeraciones)

J.A.D. - dado aquí solo por razones históricas. Gratis, sin código fuente disponible, espejo de descarga jad Autor: Pavel Kouznetsov

contestado el 28 de mayo de 20 a las 13:05

Sí, es posible.

Hay toneladas de software disponibles para realizar ingeniería inversa en un archivo .apk de Android.

Recientemente, había compilado una lista definitiva de 47 mejores descompiladores de APK en mi sitio web. Los ordené en 4 secciones diferentes.

  1. Descompiladores de APK de código abierto
  2. Descompiladores de APK en línea
  3. APK Decompiler para Windows, Mac o Linux
  4. Aplicaciones APK Decompiler

Espero que esta colección te sea de utilidad.

Enlace: https://www.edopedia.com/blog/best-apk-decompilers/

Respondido el 11 de junio de 20 a las 12:06

Paso 1: Cree una nueva carpeta y copie el archivo .apk que desea decodificar.

Ahora cambie el nombre de la extensión de este archivo .apk a .zip (por ejemplo, cambie el nombre de filename.apk a filename.zip) y guárdelo. Ahora puede acceder a los archivos classes.dex, etc. En esta etapa, puede ver los elementos de diseño, pero no los archivos xml y java, así que continúe.

Paso 2: Ahora extraiga este archivo .zip en la misma carpeta (o NUEVA CARPETA).

Descargar https://github.com/pxb1988/dex2jar/releases/tag/2.0 : dex2jar-2.0

Ahora abra el símbolo del sistema y cambie el directorio a esa carpeta (o NUEVA CARPETA). Luego ejecuta: d2j-dex2jar.bat classes.dex

Descarga este descompilador http://java-decompiler.github.io/ descompilar classes-dex2jar.jar

Paso 3: ahora abre otra carpeta nueva

Coloque el archivo .apk que desea decodificar

Descargue la última versión de apktool Y apktool (https://ibotpeaches.github.io/Apktool/install/) instalar la ventana (ambos se pueden descargar desde el mismo enlace) y colocarlos en la misma carpeta

Abrir una ventana de comando

Ahora ejecute un comando como apktool if framework-res.apk (si no lo tiene, consígalo aquí) y luego

apktool d myApp.apk (donde myApp.apk denota el nombre de archivo que desea decodificar)

ahora obtienes una carpeta de archivos en esa carpeta y puedes leer fácilmente los archivos xml del apk.

Copie el contenido de ambas carpetas en una sola carpeta

Hecho !

Respondido 10 Feb 21, 14:02

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.