Cómo descompilar APK y obtener el código fuente de APK
La última descompilación no utiliza este método. Existe la última herramienta de descompilación automática con un solo clic:
Estoy aprendiendo a desarrollar aplicaciones de Android durante este período y estoy pensando en eso desde entonces. Está desarrollado en Java, debería ser muy fácil. Descompilemos y obtengamos el código fuente. Lo busqué en Google y es realmente simple.
Me gustaría declarar solemnemente que el propósito de publicar esto no es descifrar el software de otras personas. Es puramente una actitud de aprendizaje. Sin embargo, parece que algunos software extranjeros también pueden chinoizarse de esta manera.
Nota: ¡Este tutorial de descompilación de Android pasó la prueba en el sistema operativo Windows7-Ultimate-64bit!
Descargue el siguiente kit de herramientas de descompilación necesario
1. Descompile Apk para obtener el código fuente de Java
Primero, descargue dos herramientas: dex2jar y JD -GUI
El antiguo dex2jar convierte las clases.dex en el apk en un archivo Jar, mientras que JD-GUI es una herramienta de descompilación que puede ver directamente el código fuente del paquete Jar. La siguiente es la dirección de descarga:
dex2jar:/files/dex2jar-0.0.7-SNAPSHOT.zip
JD-GUI:/files/jdgui.zip
Pasos específicos:
Primero cambie el sufijo del archivo apk a zip, descomprímalo y obtenga el class.dex, que se compila mediante archivos java y se empaqueta a través de la herramienta dx;
Descomprima el dex2jar descargado y copie schools.dex al directorio donde se encuentra dex2jar.bat. Localice el directorio donde se encuentra dex2jar.bat en la línea de comando (directorio del CD bajo el comando DOS)
Ejecutar
dex2jar.batclasses.dex
Generar
p>classes.dex.dex2jar.jar
La captura de pantalla del archivo jar generado es la siguiente:
Ejecute JD-GUI (jd-gui.exe ) y abra el paquete jar generado arriba, puede ver el código fuente
El código fuente de HelloAndroid (comparación del código fuente de apk antes de la compilación) es el siguiente:
2. , imágenes y configuración XML del programa de generación de apk, recursos de idioma y otros archivos
Esto será particularmente útil si se trata de un software en idioma chino.
Primero, descargue la herramienta. Esta vez usé apktool
Dirección de descarga: /p/android-apktool/downloads/list
Descarga: apktool1.4.1.tar.bz2 y apktool -. install-windows-r04-brut1.tar.bz2 (descargar ambos paquetes)
Pasos específicos:
Extraiga los dos paquetes descargados a la misma carpeta. Debe haber tres archivos: aapt. .exe, apktool.bat, apktool.jar
Ubique la carpeta apktool.bat en la línea de comando e ingrese el siguiente comando: apktool d C:\*.apk C: \* carpeta, como se muestra a continuación :
Explicación de la línea de comando: apktool d [archivo apk] [carpeta de salida]
El archivo descompilado es el siguiente (AndroidManifest.xml como ejemplo):
Nota especial: el archivo que desea descompilar debe colocarse en el directorio raíz de la unidad C (de hecho, no es necesario colocarlo en el directorio raíz de la unidad C)
Por ejemplo: en directorio de la unidad D D:\apktool1.4.1
cd /d D:\apktool1.4.1 //Cambie al directorio de la unidad D, que contiene tres archivos: HelloAndroid.apk y aapt.exe, apktool.bat, apktool.jar
apktool.bat d -f HelloAndroid.apk HelloAndroid // comando de descompilación de apktool, preste atención a la escritura de d y
-f
El Reempaquetado del archivo descompilado en un apk es muy simple. Simplemente ingrese la carpeta apktool b c:\*** (la carpeta que compiló. El comando es el siguiente: Este es el disco donde se encuentra el archivo). >El archivo después de empaquetar el apk En el directorio C:\HelloAndroid se generan dos carpetas:
build
dist
Entre ellas, el empaquetado y generado HelloAndroid.apk está en la carpeta dist anterior, Ok
Finalmente, presentemos Androidfby, una herramienta de descompilación recientemente lanzada. Es una herramienta de interfaz gráfica que encapsula los pasos anteriores.
Además, como desarrollador de aplicaciones, definitivamente no desea que su código sea descompilado. El próximo blog describirá cómo evitar que otros lo descompilen ofuscando el código.
p>
Cómo evitar que los programas apk se descompilen en Android
Como desarrollador de aplicaciones de Android, tienes que enfrentarte a una situación embarazosa, es decir, la aplicación por la que has trabajado tan duro puede ser otros pueden descompilarlo fácilmente.
Google también parece haber descubierto este problema. A partir del SDK2.3, podemos ver que hay una carpeta proguard adicional en android-sdk-windows\tools\
proguard. una herramienta de ofuscación de código Java, a través de proguard, incluso si otros descompilan su paquete apk, solo verán parte del código que es difícil de entender, logrando así la función de proteger el código.
Hablemos sobre cómo hacer que el archivo proguard.cfg en SDK2.3 funcione. Primero, echemos un vistazo al contenido de android-sdk-windows\tools\lib\proguard.cfg: p >
[html] ver
Plaincopyprint?
1. -optimizaciónpasa 5
2. -dontusemixedcaseclassnames
3. - dontskipnonpubliclibraryclasses
4. -dontpreverify
5. -detallado
6. -optimizaciones !código/simplificación/aritmética, !campo/*, !clase/ fusionando /*
7.
8. -mantener la clase pública * extiende android.app.Activity
9. . Aplicación
10. -mantener la clase pública * extiende android.app.Service
11. -mantener la clase pública * extiende android.content.BroadcastReceiver
12 . -mantener la clase pública * extiende android.content.ContentProvider
13. -mantener la clase pública * extiende android.app.backup.BackupAgentHelper
14. .preferencia.Preferencia
15. -mantener la clase pública com.android.vending.licensing.ILicensingService
16. / p>
18. lt nativo; métodosgt;;
19.
20. >
22. lt público; initgt; (android.content.Context, android.util.AttributeSet); > 25. -keepclasseswithmembernames class * {
26. public lt; initgt; (android.content.Context, android.util.AttributeSet,
27.
}
28.
29. -keepclassmembers enumeración * {
30. valores públicos estáticos ()
31. public static ** valueOf(java.lang.String);
32. }
33. -keep class * implementa android. os.Parcelable {
35. public static final android.os.Parcelable$Creator *;
36.
Como puede ver en el script, confusión Conserva los componentes básicos heredados de Actividad, Servicio,
Aplicación, BroadcastReceiver, ContentProvider y
com.android.vending.licensing.ILicensingService,
y Se conservan todos los nombres de variables y clases nativas, y se conservan algunos constructores, enumeraciones, etc. con formatos de parámetros fijos en todas las clases. (Para obtener más detalles, consulte los ejemplos y comentarios en lt;proguard_pathgt;/examples.)
La forma de hacer que proguard.cfg funcione es muy simple, es decir, agregar una oración a default.properties El archivo generado automáticamente por eclipse "proguard.config=proguard.cfg" es suficiente
El archivo default.properties completo debe ser el siguiente:
vista [html]
Plaincopyprint? p>
1. # Este archivo es generado automáticamente por las herramientas de Android
2. # No modifiques este archivo: ¡SUS CAMBIOS SE BORRARÁN!
3. #
4. # Este archivo debe verificarse en los sistemas de control de versiones
5. #
6. por el uso del sistema de compilación Ant,
7.# "build.properties", y anule los valores para adaptar el script a su
8. >
9.
p>10. # Objetivo del proyecto
11. cfg
Ya terminaste. La firma de compilación normal puede evitar que el código se descompile.
El código obtenido al descompilar el apk con código ofuscado debería ser similar al siguiente efecto, que es difícil de entender:
No importa si estás usando una versión del SDK anterior a la 2.3, simplemente reemplaza el proguard Archivo .cfg de arriba Haga una copia y colóquela en el proyecto, y luego realice la misma operación