Excepción al descompilar apk

Estoy tratando de hacer una aplicación segura de Android. He activado proguard en mi aplicación. Pero no ocultar ninguno de los archivos xml o manifiesto mientras se descompila. Sólo cambia los archivos .java.

Intenté descompilar el apk de otra aplicación de la tienda del juego usando apktool . Entonces recibí la siguiente excepción

Exception in thread "main" brut.androlib.AndrolibException: brut.directory.Direc toryException: java.util.zip.ZipException: error in opening zip file at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:199) at brut.androlib.ApkDecoder.decode(ApkDecoder.java:83) at brut.apktool.Main.cmdDecode(Main.java:146) at brut.apktool.Main.main(Main.java:77) Caused by: brut.directory.DirectoryException: java.util.zip.ZipException: error in opening zip file at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:55) at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:38) at brut.androlib.res.util.ExtFile.getDirectory(ExtFile.java:55) at brut.androlib.ApkDecoder.hasSources(ApkDecoder.java:197) ... 3 more Caused by: java.util.zip.ZipException: error in opening zip file at java.util.zip.ZipFile.open(Native Method) at java.util.zip.ZipFile.<init>(Unknown Source) at java.util.zip.ZipFile.<init>(Unknown Source) at brut.directory.ZipRODirectory.<init>(ZipRODirectory.java:53) ... 6 more 

Entonces los archivos xml y el manifiesto no fueron revelados. También me gustaría asegurar mi aplicación como esta. ¿Cómo es esto posible?

Para responder a su pregunta, es simplemente imposible hacer su APK totalmente seguro. Los archivos XML se analizan fácilmente sin apktool .

Le pregunté a Ben Gruver / JesusFreke (el tipo que desarrolló smali) y dijo que es imposible asegurar completamente un archivo APK, pero puede hacer que sea más difícil para otros decompilar. Siempre y cuando Android puede leer los recursos / código en su proyecto .. entonces lo pueden hacer las herramientas.

La excepción que está viendo al intentar descompilar Gmail es porque apktool necesita actualizarse para Lollipop ( que está trabajando activamente ).

La respuesta de @classc_abc es la mejor que encontré para hacer más difícil descompilar un APK:

Básicamente, hay 5 métodos para proteger su APK que está agrietando / revirtiendo / reenvasado:

  1. Aislar el programa Java

La forma más sencilla es que los usuarios no puedan acceder al programa Java Class. Esta es la forma más fundamental, y tiene una variedad de formas específicas de lograr esto. Por ejemplo, los desarrolladores pueden colocar la clave Clase Java en el servidor, los clientes adquieren servicios mediante el acceso a interfaces relevantes del servidor en lugar de acceder al archivo Clase directamente. Así que no hay forma de que los hackers descompilen los archivos de clase. En la actualidad, hay cada vez más estándares y protocolos de servicios prestados a través de interfaces, tales como HTTP, Servicio Web, RPC, etc Pero hay un montón de aplicaciones no son adecuados para esta protección. Por ejemplo, los programas Java en programas independientes no pueden aislar.

  1. Cifrar archivos de clase

Para evitar que los archivos de clase se descompilen directamente, muchos desarrolladores cifrarán algunos archivos clave de clase, como el número de registro, la gestión del número de serie y otras clases relacionadas. Antes de usar estas clases cifradas, el programa necesita descifrar estas clases primero, luego cargar estas clases en JVM. Estas clases pueden ser descifradas por hardware o software.

Los desarrolladores a menudo cargan clases de criptografía a través de una clase ClassLoader personalizada (Applet no admite ClassLoader personalizado debido a la seguridad). Customed ClassLoader encontrará las clases criptográficas primero, luego las descifrará. Y finalmente cargar las clases descifradas a JVM. Customed ClassLoader es una clase muy importante en este método de protección. Debido a que no está cifrado, puede ser el primer objetivo de un hacker. Si se han superado la clave de descifrado y el algoritmo relevantes, entonces las clases cifradas se pueden descifrar fácilmente.

  1. Convertir a códigos nativos

Convertir programas a códigos nativos también es una manera efectiva de prevenir la descompilación. Debido a que los códigos nativos a menudo son difíciles de descompilar. Los desarrolladores pueden convertir toda la aplicación a códigos nativos, o también pueden convertir sólo módulos clave. Si acaba de convertir la parte clave de los módulos, se necesitará la tecnología JNI para llamar cuando los programas Java utilizan estos módulos. Se abandonó la característica multiplataforma de Java cuando se utiliza este método para proteger los programas Java. Para diferentes plataformas, necesitamos mantener diferentes versiones de los códigos nativos, lo que aumentará el soporte de software y la carga de trabajo de mantenimiento. Pero para algunos módulos clave, a veces esta solución es a menudo necesaria. Con el fin de garantizar que estos códigos nativos no serán modificados o reemplazados, los desarrolladores a menudo necesitan firmar digitalmente estos códigos. Antes de usar estos códigos nativos, los desarrolladores a menudo necesitan autenticar estos códigos locales para asegurarse de que estos códigos no han cambiado por los hackers. Si se pasa la comprobación de firma, los desarrolladores pueden llamar a métodos relevantes de JNI.

  1. Obfuscation del código

La ofuscación de código es reorganizar y procesar el archivo de clase, haciendo que los códigos tratados cumplan la misma función (semántica) con los códigos no tratados. Pero los códigos ofuscados son difíciles de descompilar, es decir, los códigos descompilados son muy difíciles de entender, por lo que el personal de descompilación es difícil de entender realmente la semántica. Teóricamente, si los hackers tienen tiempo suficiente, los códigos ofuscados aún pueden ser agrietados. Incluso algunas personas están desarrollando una herramienta de obfuscate. Pero a partir de la situación real, ya que el desarrollo diversificado de la ofuscación, la madurez de la teoría de ofuscación, ofuscado códigos Java puede prevenir la descompilación.

  1. Cifrado en línea

APK Protect es un sitio web de cifrado en línea para APK. Proporciona códigos Java y protección de códigos C ++ para lograr efectos anti-depuración y descompilación. El proceso de operación es simple y fácil.

Le sugiero que utilice este último método para que le puede ahorrar más tiempo. He intentado. Es muy simple de operar y no tomará mucho tiempo.

  • Android.content.res.Resources $ NotFoundException: Cadena de recursos ID # 0x1 Error
  • JNetPcap en Android: problema con el método findAllDevs!
  • Cómo capturar una Firebase Auth excepciones específicas
  • MUPDF UnsupportedOperationException al abrir el pdf
  • Problema de MediaRecorder en Android Lollipop
  • ¿Cómo puedo enviar una excepción manualmente con Crittercism?
  • ¿Es posible reemplazar el cuadro de diálogo "Forzar cierre" por defecto en Android?
  • Configuración Dibujable como color de texto alza una excepción 'El valor de color debe comenzar con #'
  • Android Exception: ¿Te olvidaste de llamar a 'public void setup (LocalActivityManager activityGroup)'
  • SQLiteException no se captura
  • ¿Por qué estoy recibiendo la excepción HttpHostConnectException?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.