Proceso de descompilación de Android y firma de reempaquetado de descompilación de apk

Como desarrollador de Android, a menudo necesito aprender el excelente código de otras personas. Originalmente, hay muchos códigos de proyectos de código abierto en GitHub, pero a veces cuando uso el software encuentro la función que quiero, quiero aprender Al implementar el código, usted Es necesario utilizar la tecnología de descompilación en este momento. En circunstancias normales, después de empaquetar una aplicación de Android en un apk, los archivos de recursos y el código utilizados para desarrollar la aplicación ya no se pueden ver. Sin embargo, proporcionamos algunas herramientas en línea y aún puede descompilar el apk. Una vez descompilado el apk, podemos ver los archivos de recursos (imágenes), el diseño, los estilos, los códigos de implementación relacionados, etc., utilizados para desarrollar esta aplicación. Puede considerarse como una habilidad más práctica en el desarrollo de Android. Cuando estamos interesados ​​​​en aplicaciones desarrolladas por otros, podemos usar este medio técnico para descompilar el apk empaquetado por otros, y luego podemos ver lo que sentimos.Contenido interesante. La descompilación no permite a los desarrolladores descifrar y reinstalar una aplicación. El objetivo principal es promover que los desarrolladores aprendan, aprendan de un buen código y mejoren su nivel de autodesarrollo.

1. Herramientas de descompilación

  1. apktool (adquisición de archivos de recursos), dirección de descarga: https://ibotpeaches.github.io/Apktool/install
  2. dex2jar (adquisición de archivos de código fuente), dirección de descarga: https://github.com/pxb1988/dex2jar
  3. jd-gui (vista de código fuente), dirección de descarga: http://jd.benow.ca

También se divide en dos partes, una es la herramienta de descompilación de código y la otra es la herramienta de descompilación de recursos.

Herramientas para descompilar código:

  • dex2jar y jd-gui : dex2jar convierte el dex en el APK de Android en un archivo jar, que luego se puede ver usando jd-gui y guardar como un archivo java.

  • jadx : jadx es una herramienta de descompilación muy fácil de usar, pero el autor original ya no la mantiene. Pero también podría ser una herramienta clásica.

Herramientas para descompilar recursos:

  • APKTool : utilice APKTool para extraer imágenes de diseño y otros recursos.

2. Proceso de descompilación

1. Primero necesita obtener el software descompilado. El software que obtiene generalmente es xxx.apk, pero a veces el software que obtiene es xxx.apk y xxx.odex. Este último es el producto de la optimización de la plataforma. Acerca de xxx La fusión de .apk y xxx.odex se analizarán en otro artículo. Después de obtener la apk completa, puedes comenzar el trabajo de descompilación.

2. Descompilar archivos de recursos:

java -jar apktool_2.3.1.jar d -f KeyValueTest.apk -o KeyValueTest
  • Después de ejecutar el comando anterior, si no se informa ningún error de la siguiente manera, la descompilación fue exitosa:
    Descompilación exitosa
  • Descripción de parámetros:
    • -f Si la carpeta de destino ya existe, fuerce la eliminación de la carpeta existente (de forma predeterminada, la decodificación falla si la carpeta de destino ya existe).
    • -o especifica el nombre de la carpeta de destino de decodificación (el nombre del archivo APK se usa de forma predeterminada para nombrar la carpeta de destino).
    • -s no descompila el archivo dex, lo que significa que el archivo clases.dex se conservará (el archivo dex se decodificará en un archivo pequeño de forma predeterminada).
    • -r no descompila los archivos de recursos, lo que significa que el archivo resources.arsc se conservará (resources.arsc se descodificará en archivos de recursos específicos de forma predeterminada)
  • En este momento, se genera una carpeta KeyValueTest en la carpeta actual.
    Directorio de archivos
  • Debajo de esta carpeta están los archivos de recursos descompilados, solo necesitamos el directorio res y el archivo AndroidManifest.xml.
    Directorio de descompilación de APKTool
    Comparar diseño:
    Comparar diseño
    Comparar AndroidManifest.xml:
    Comparar el manifiesto de Android
  • A través de la comparación, descubrimos que los archivos de recursos descompilados por APKTool se pueden usar directamente.

3. Descompilar archivos de código:

  • Modifique el sufijo del archivo apk a zip y luego descomprímalo o descomprímalo directamente para obtener el siguiente directorio de archivos:
    Descomprime el APK
  • En lo que nos centramos aquí es en el archivo Classes.dex. Este archivo es similar al archivo de código de bytes (.class) en Java, por lo que primero debemos usar dex2jar para descompilar el archivo .dex en un archivo jar. La estructura de directorios del archivo dex2jar es la siguiente, de la cual se utiliza d2j-dex2jar.bat.
    directorio dex2jar
  • Coloque clases.dex en la carpeta. En la ruta del archivo actual, ingrese d2j-dex2jar.bat clases.dex en la línea de comando.
    dex2jar exitoso
  • Luego genere el archivo jar correspondiente:
    generar frasco
  • Use jd-gui para abrirlo y encontrará que hay un BuildConfig adicional. Este es el archivo de configuración durante la compilación. No se preocupe por eso.
    jd-gui abierto
  • En MainActivity, comparando el código descompilado con el código fuente, son básicamente iguales. En la referencia del recurso, se reemplaza por un número. Este número se puede reemplazar buscando en R.
    Código descompilado
    código fuente
    ID de recurso encontrado en R
    ID de recurso
  • El código se puede guardar a través de la función de guardar de jd-gui (Guardar todo el código fuente)

4. Puede usar dex2jar o jadx para descompilar clases.dex. En comparación con dex2jar, jadx es más conveniente y rápido. Simplemente abra jadx-gui.bat en el archivo bin y seleccione directamente el APK, aunque jadx también se puede descompilar. archivos, pero a veces inexactos.
jax
interfaz jax

5. En resumen, puede utilizar APKTool+JADX o APKTool+dex2jar para descompilar APK. Se recomienda utilizar el primero. Hay un sitio web de descompilación en línea que utiliza JADX.
-> Ir aquí <-

6. En este punto, se puede concluir que sin codificar, básicamente se puede obtener un código que es exactamente el mismo que el código fuente. En el caso de codificar, será muy difícil de leer y no se demostrará aquí. Integre la resolución obtenida con los archivos AndroidManifest.xml y java para obtener un código similar al código fuente.

Artículos de referencia citados: https://www.cnblogs.com/cj5785/p/9892978.html

3. Reempaquetar la firma (entorno Mac)

Recompilar es ejecutar el comando en cmd.apktool b test

Después del éxito, los directorios build y dist se generarán en el directorio de prueba.

Almacenados en el directorio de compilación están los archivos dex empaquetados y los archivos de recursos (lo mismo que después de la descompresión del apk)

El archivo apk reempaquetado se almacena en el directorio dist.

Renunciar

Copie el archivo de firma al directorio dist para facilitar la operación

Ingrese al directorio dist desde la terminal y ejecute el comando jarsigner -verbose -keystore [your_key_store_path] -signedjar [signed_apk_name] [usigned_apk_name] [your_key_store_alias] -digestalg SHA1 -sigalg MD5withRSADescripción del campo:

  • [your_key_store_path]: la ruta absoluta a la ubicación de la clave
  • [signed_apk_name]: nombre del paquete de instalación firmado
  • [usigned_apk_name]: nombre del paquete de instalación sin firmar
  • [your_key_store_alias]: alias de la clave

Debido a que colocamos la clave secreta y test.apk en la misma ruta, la ruta absoluta de la ubicación de la clave se puede completar directamente con testkey. macjenkinskey es el alias de mi clave secreta, no me malinterpretes (evil.jpg)

Ingrese su contraseña. Si no puede ver lo que ingresó, comience a firmar.

Después de firmar, puede ver el apk firmado en el directorio dist.

Epílogo

Al descompilar, también puede cambiar el nombre de la extensión test.apk a test.zip y extraerlo.

Copie clases.dex a la ruta dex2jar-2.0

Ingrese la terminal en la ruta dex2jar-2.0 y ejecute el comando./d2j-dex2jar.sh classes.dex

También puedes obtener clases-dex2jar.jar

Descompile y luego vuelva a compilar, también puede obtener clases.dex, justo debajo de esta ruta

El reempaquetado se refiere al artículo de Tencent Cloud Community. Puede usarlo como referencia. Me gustaría pensar en ello. La descompilación es para permitir a los desarrolladores aprender mejor de tecnologías excelentes. No es para descifrar la apk de otras personas, agregar algunas operaciones ilegales y luego reempaquetado nuevamente.

Supongo que te gusta

Origin blog.csdn.net/weitao_666/article/details/97615961
Recomendado
Clasificación