Reempaquetando el archivo APK usando baksmali y smali

Soy un estudiante interesado en la seguridad de Android. Estaba tratando de modificar un archivo APK usando baksmali y smali. Sin embargo, no puedo ejecutar la aplicación reempaquetada en mi móvil. Cuando hago clic en el icono, dice «Desafortunadamente, la prueba se ha detenido» y existe. (Incluso el ícono de la aplicación cambió, ahora veo el ícono predeterminado de Android en lugar del ícono antiguo y colorido de la aplicación)

¿Cuál podría ser la razón de esto? En realidad, ni siquiera modifiqué el código del archivo apk. Simplemente descomprimí el apk para obtener el archivo dex, luego lo convertí a pequeño usando baksmali.jar, y luego volví a dex usando smali.jar. Finalmente comprimido y firmado.

Lo que he hecho en detalle:

  1. Descomprima el archivo apk

    $ Unzip test.apk 
  2. Convierta 1classes.dex1 en pequeño

    $ baksmali -x classes.dex -o smaliClasses 
  3. Convirtió las clases de nuevo a classes.dex (reemplazó la antigua classes.dex, de hecho no agregué ningún código nuevo al archivo pequeño . Quería saber si esto funciona primero).

    $ smali smaliClasses -o classes.dex 
  4. Comprima todos los archivos en test.zip

    $ zip test.zip AndroidManifest.xml classes.dex res META-INF resourses.arsc 
  5. Cambie el nombre de test.zip a test.apk

    $ mv test.zip test.apk 

Ahora creo que tengo que volver a firmar el APK, corrígeme si me equivoco aquí.

Editado

:

  1. java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk

  2. Intenté instalar el nuevo APK reempaquetado. Usando adb shell. Adb shell mostró que se instaló correctamente. Sin embargo, no puedo ejecutar la aplicación reempaquetada en dispositivos móviles. La aplicación se bloquea cuando hago clic en ella. Dice «Desafortunadamente, la prueba se ha detenido».

¿Por qué no se está ejecutando la aplicación reempaquetada? No entiendo lo que me falta aquí.

Editado :

Intenté volver a empaquetar la misma aplicación usando apktool. Extraje los archivos smalli usándolo y los volví a empaquetar. Pero, ¿por qué el reempaquetado no funciona con baksmali, smali, zip y signapk? ¿Es la cremallera el problema real en este procedimiento? Veo que el tamaño de la aplicación se reduce drásticamente cuando la comprimo y le cambio el nombre a .apk en comparación con el archivo apk original: |

Comentarios

  • Debe consultar su logcat para obtener más información, si es posible, publique el registro de fallos también.
  • @xDragonZ , He editado la publicación. Esta vez intenté instalar usando » adb install » y firmé usando signapk.jar. Esta vez la aplicación se instaló en el teléfono. Sin embargo, cuando hago clic en la aplicación, se bloquea y dice » » Desafortunadamente, la aplicación se detuvo «. Una cosa que noté es que el tamaño de la apk reempaquetada es menor que el original, ¿es la herramienta zip la razón de ese cambio es el tamaño? ¿Alguna pista sobre por qué falla la aplicación? ¿Cómo obtengo un registro para esto? Muchas gracias.
  • ¿Quizás también necesita zipalignar el archivo?
  • ¿Está desodexando (baksmali -x option) a propósito? Usted parece que, dado que está realizando esta opción, sin proporcionar una » bootclasspath » usted ‘ Obtendrá algún código pequeño extraño que quizás no pueda volver a convertirse en un archivo dex. Además, simplemente elimine la carpeta META-INF antes de comprimir e intentar hacer zip -r unsigned.apk * dentro del directorio con todo el contenido. Si esto aún falla, intente publicar el resultado de logcat
  • Entonces, de cinco respuestas , ¿ni una sola es aceptable?

Respuesta

Utilizo apktool para este propósito, y un pequeño par de scripts de shell para descompilar y recompilar APK:

  • decompile-apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <file.apk>" exit -1 fi fn=${1%.apk} target_apk=$fn.apk apktool d -f "$target_apk" -o smali echo "Done." 
  • compile-apk

    #!/bin/bash -e if ! [ "$1" ]; then echo "usage: $0 <original.apk>" exit -1 fi fn=${1%.apk} rm -f $fn.unaligned.apk $fn.smali.apk rm -rf smali/build apktool b -f smali/ -o $fn.unaligned.apk jarsigner -verbose -sigalg MD5withRSA -digestalg SHA1 -keystore ~/.android/debug.keystore -storepass android $fn.unaligned.apk androiddebugkey zipalign -v 4 $fn.unaligned.apk $fn.smali.apk rm -rf smali/build 

El uso de apktool tiene la ventaja de poder ver y editar todos los recursos también como el archivo de manifiesto decodificado.

Comentarios

  • Este es el único método que funciona para mí. ‘ he probado docenas, pero ninguna funcionó. Muchas gracias.

Responder

Después de jugar con smali / baksmali lo hice funcionar. Creo que no usó el indicador recursivo al comprimir . Esto provocó que la carpeta res estuviera vacía, lo que provocó el bloqueo. También ejecuto zipalign después de firmar el apk.

Pasos:

  1. Descomprima
    $ unzip test.apk
  2. Baksmali
    $ baksmali classes.dex -o smaliClasses
  3. Smali
    $ smali smaliClasses -o classes.dex
  4. Zip -r
    $ zip -r test.apk AndroidManifest.xml classes.dex res/ resources.arsc
  5. Jarsign
    $ java -jar signapk.jar testkey.x509.pem testkey.pk8 test.apk test-patched.apk
  6. Zipalign
    $ zipalign -v 4 test-patched.apk final-apk.apk
  7. Beneficio 🙂

Responder

No puedo comentar debido a reputación, así que lo publicaré aquí.

Dado que el trabajo se hace correctamente con el uso de apktool, me parece que algo va mal con el proceso zip.

Después Al volver a empaquetar la aplicación, ¿puede verificar que el contenido del nuevo APK sea idéntico (en lo que respecta a los nombres de archivo y la estructura) al contenido del original?

EDITAR: también, ya que el archivo es un archivo .dex, no creo que necesite la opción -x en baksmali.

EDIT2: al volver a empaquetar, no es necesario incluir el directorio META-INF en el archivo zip. se creará al firmar t el archivo.

Respuesta

No es necesario utilizar la opción deodex «-x» ya que no está realizando baksmali en un odex. Simplemente ejecute baksmali en el archivo dex. También puedes usar apktool para descomprimir / empaquetar todo, lo cual creo que es más fácil.

Responder

  • ¿Por qué se redujo el tamaño del archivo?

    Porque apktool lo optimizó mientras se volvía a compilar.

  • ¿Por qué falló?

    Posibles razones del bloqueo:

    1. No puede realizar todos los pasos en el orden correcto.

    2. La aplicación puede tener una CRC comprueba el tamaño del archivo.

Herramienta Totalmente automatizada con GUI .. Está actualizada con el marco de Android reciente, por lo que no hay errores de descompilación de recursos y mejor manejo.

https://www.dropbox.com/s/02ifm4veotiuik1/apkstudio-2.0.3b-windows-Updates-Framework.rar?dl=0

Y este pequeño documento que incluye información sobre cómo revertir las aplicaciones de Android y toda la información básica relacionada con la modificación / manejo de apk.

https://www.dropbox.com/s/nkkmp4ait71kjku/Android%20Application%20Reversing%20Via%20Android%20Mobile.pdf?dl=0

Respuesta

Si está interesado en las aplicaciones de Android RE, encontrará mejores herramientas para usar con regularidad.

Bueno, una de las herramientas es Android Cracker Kit (que desarrollé), te ofrece todo lo que necesitas: Android Cracker Kit (ACK):

Comentarios

Responder

Utilizo APK Editor Pro para editar APK directamente desde mi dispositivo Android.

https://play.google.com/store/apps/details?id=com.gmail.heagoo.apkeditor.pro

Comentarios

  • Excelente consejo. El apk generado no se instala correctamente con el script de (de) compilación anterior (¿por qué?), Pero reemplazó el archivo classes.dex.

Respuesta

Paso 4. Olvidó hacerlo de forma recursiva. No copiará los archivos en / res cuando lo comprima. Agregue la opción -r.

zip -r test.zip AndroidManifest.xml classes.dex res META-INF resources.arsc 

Paso 6. No es necesario que lo firme de nuevo, ya que lo volvió a empaquetar con el directorio META-INF en su apk. La información de firma está dentro de META-INF.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *