Cómo descompilar y reempaquetar aplicaciones de Android
1) Use zip para descomprimir Apkd.apk y aparecerá el archivo Classes.dex
2014/02/19 19:42
..
2014/02/19 19:42
...
2014/02/19 15:35 1.656 AndroidManifest.xml
2014/02/19 15:35 687,024 clases.dex
2014/02/19 15:49
META-INF
.2014/ 02/19 15:49
res
2014/02/19 15:35 2,200 resources.arsc
2) Ir al dex2jar directorio y ejecute lo siguiente:
D:\developer\tools\test_apk \dex2jar-0.0.9.15>dex2jar.bat "... \Apkd(d2j)\classes.d
ex" p>
Este cmd está obsoleto, utilice d2j-dex2jar si es posible
versión de dex2jar: traductor-0.0.9.15
dex2jar ...\Apkd(d2j)\ classs.dex -> ...\Apkd(d2j)\classes_dex2jar.jar
Listo.
El archivo Classes_dex2jar.jar aparecerá en el mismo directorio que el apk.
3) Utilice JD-GUI en el paquete jar para ver el archivo fuente.
II. Descompilar apk
1. Descargue los tres archivos en APKTOOL (apt. .exe, apktool.bat, apktool.jar) y extráigalo al directorio de instalación de Windows para facilitar el uso de los comandos de Dos.
2012/12/06 11:44 854,016 aapt.exe
2014/02/19 17:15 277,372 Apkd.apk //Ejemplo con archivo apk
2012/12/23 23:39 92 apktool.bat
2013/02/03 02:37 2,655,843 apktool.jar
2 Vaya al directorio donde se encuentra apktool.bat. y luego ejecute:
apktool d Apkd.apk decode_dir
Después de la descompilación, el contenido del directorio decode_dir es el siguiente:
2014/02/19 17:16 716 AndroidManifest.xml
2014/02/19 17:16 237 apktool.yml
2014/02/19 17:18
compilación
2014/02/19 17:16
res
2014/02/19 17:16
pequeño
esto puedo ver el archivo original, AndroidManifest.xml, y puedo ver el archivo fuente pequeño (que está escrito en el lenguaje pequeño, por lo que puedes compararlo con Java).
3. Uso de APKTOOL
1).decode
Este comando se utiliza para descompilar archivos apk, generalmente use
apktool d
Representa la ruta del archivo apk descompilado. Es mejor escribir una ruta absoluta, como C:\MusicPlayer.apk/p>
Representa la ubicación de almacenamiento del archivo apk descompilado. archivo, como C:\ MusicPlayer
Si el archivo que proporciona ya existe, aparecerá un mensaje después de escribir el comando y no se ejecutará, lo que requiere que modifique el comando para incluir -f comando
apktool d -f
Esto forzará la sobrescritura de archivos existentes
2).build
Este comando se usa para compilar el archivo modificado. El uso general es
apktool b
Aquí
es lo que acaba de escribir al descompilar
(por ejemplo, C:\MusicPlayer), escriba esta línea Después de ejecutar el comando, si todo es normal, encontrará que hay dos carpetas más build y dist en C:\MusicPlayer, que almacenan los archivos compilados uno por uno durante el proceso de compilación y el archivo apk empaquetado final respectivamente.
3).install-framework
Este comando se utiliza para instalar un archivo framework-res.apk específico para APKTool para facilitar la descompilación de algunos archivos APK que dependen de la ROM.
id.test) ;
a.setText("raoliang");
}
@Override
público booleano onCreateOptionsMenu(Menú menu) {
// Inflar el menú; esto agrega elementos a la barra de acciones si está presente.
getMenuInflater().main, menu);
return true;
}
}
Código fuente pequeño correspondiente:
.class public Lali/text/apkd/MainActivity;
.super Landroid/app/Activity;
.source "MainActivity.java"
# métodos directos
.method constructor público ()V
locales 0
.Prologue
.Línea 8
invocar-directo {p0}, Landroid/ app/ Actividad;->()V
return-void
.método final
#métodoVirtual
.método protegido onCreate (Landroid /os/Bundle;)V
.locals 2
.parameter "savedInstanceState"
.prologue
Capítulo 12 Línea<. /p>
invocar-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V
. high16 v1, 0x7f08
invocar-virtual {p0, v1}, Lali/text/apkd/MainActivity;->findViewById(I)Landroid/view/View;
mover-resultado - objeto v0
check-cast v0, Landroid/widget/TextView;
.Línea 15
.local v0, a:Landroid/widget/TextView;
const-string v1, "raoliang"
invocar-virtual {v0, v1}, Landroid/widget/TextView;->setText(Ljava/lang/CharSequence ;)V
.Línea 16
return-void
.método final
.método público onCreateOptionsMenu(Landroid/view/ Menu;)Z
.locals 2
.parámetro "menú"
.prologue
.línea 21
invocar-virtual {p0},Lali/text/apkd/MainActivity;->getMenuInf
más tarde()Landroid/view/MenuInflater;.
mover-resultado-objeto v0
const/high16 v1, 0x7f07
invocar-virtual {v0, v1, p1}, Landroid/view/MenuInflater; ->inflar(ILandroid/view/Menu;)V
Línea 22
const/4 v0, 0x1
regresar v0
< p. >.Método finalEn comparación, puede ver que no hay cambios obligatorios en las constantes y se pueden modificar de acuerdo con la sintaxis pequeña. Modificaciones correspondientes
V.3. Empaquetar, firmar e instalar el apk modificado
Después de la modificación, puede empaquetar el apk. Ejecute el siguiente comando:
apktool b decode_dir
Verá el apk empaquetado en el dist del directorio mygame.
Por supuesto, generalmente es imposible instalarlo ahora porque el apk aún no está firmado. Aquí se explica cómo firmar. La firma requiere un archivo de almacén de claves. Ya tengo un almacén de claves dedicado. Si no tiene uno, consulte aquí para generar uno.
Ejecute el siguiente comando para firmar my_game.apk recompilado:
jarsigner -verbose -keystore demo.keystore Apkd.apk demo.keystore
Finalmente, en El teléfono móvil debe instalarlo primero porque si las firmas son diferentes, no se puede sobrescribir y generará un error de "Aplicación no instalada".
El proceso de ejecución completo es el siguiente:
D:\developer\tools\test_apk\new\decode\dist>keytool -genkey -alias demo.keystore -keyalg RSA -validity 40000 - demostración del almacén de claves. keystore demo.keystore
Ingrese la contraseña del almacén de claves:
Ingrese la nueva contraseña nuevamente:
¿Cuáles son su nombre y apellido?
[Desconocido]: RAO
¿Cómo se llama tu unidad organizativa?
[Desconocido]: rao
¿Cómo se llama tu organización?
[Desconocido]:
¿Cómo se llama tu ciudad o región?
[Desconocido]:
¿Cómo se llama tu estado o provincia?
[Desconocido]:
¿Cuál es el código de país de dos letras de esta unidad?
[Desconocido]:
CN= rao, OU =rao, O=desconocido, L=desconocido, ST=desconocido, C=desconocido ¿correcto?
[No]: y
Ingrese la contraseña maestra
(Si es la misma que la contraseña del almacén de claves, presione Enter):
D:\developer\tools\test_apk\new\decode\dist>jarsigner -verbose - keystore demo.keystore Apkd.apk demo.keystore
Ingrese la contraseña del almacén de claves:
Agregado: META-INF/MANIFEST.MF
Ya agregado: META-INF/DEMO_KEY.SF
Agregando: META-INF/DEMO_KEY.RSA
Actualmente Firma: res/drawable-hdpi/ic_launcher.png
Firma: res/drawable-mdpi/ic_launcher.png
Firma: res/drawable-xhdpi/ic_launcher.png
Firma: res/drawable-xhdpi/ic_launcher.png
Firma: res/layout/activity_main.xml
Firma: res/menu/main .xml
Firmado: AndroidManifest.xml
Firmado: clases.dex
Firmado: resources.arsc
D:\developer\ tools\test _apk\ new\decode\dist>
En este punto, el apk modificado se puede instalar normalmente, sin embargo, antes de la instalación, el apk anterior debe desinstalarse y no se puede reemplazar directamente (porque las firmas son diferentes)
p>