Red de conocimiento informático - Material del sitio web - Cómo descompilar y reempaquetar aplicaciones de Android

Cómo descompilar y reempaquetar aplicaciones de Android

I. Ver el código fuente 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"

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 final

En 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>