Comprobar la integridad de los activos de Android

En mi carpeta assets/data , hay una gran cantidad de archivos XML que contienen datos estáticos para mi aplicación.

Es muy fácil para alguien recuperar un APK, modificar una parte de él e instalarlo en un dispositivo.

Me gustaría impedir que los usuarios alteren mis datos estáticos comprobando la integridad de mi carpeta de assets/data .

Inicialmente, estaba pensando en usar MD5 checksum , pero probablemente será demasiado lento para la cantidad de archivos que voy a tener (50-100).

¿Tienes alguna sugerencia?

Editar:

Esta aplicación es un juego con un archivo XML que describe cada nivel.

Voy a describir cómo se puede proteger eficazmente contra la modificación y reembalaje, no cómo puede proteger los activos por su cuenta, aunque en última instancia, podría aplicar la misma técnica para cifrarlos. Es imperfecto, pero puedes hacer las modificaciones mucho más difíciles.

Firmas la aplicación con un certificado. A pesar de que pueden quitar el suyo, nadie más puede producir el mismo certificado cuando lo vuelve a poner juntos. Por lo tanto, puede comprobar la firma de la aplicación en tiempo de ejecución, para asegurarse de que es lo que espera.

Aquí hay algunos códigos baratos y desagradables para hacer esto:

  PackageManager pm = context.getPackageManager(); PackageInfo info = pm.getPackageInfo( context.getPackageName(), PackageManager.GET_SIGNATURES ); if ( info.signatures[ 0 ].toCharsString().equals( YOUR_SIGNATURE ) ) { //signature is OK } 

Donde YOUR_SIGNATURE es una constante, obtenida al ejecutar este código en la aplicación firmada.

Ahora, hay dos problemas restantes que ya han insinuado:

  1. ¿Cómo puede detener a alguien simplemente modificando la constante en el código fuente para que coincida con su certificado, luego volver a empaquetar y volver a firmar la aplicación?

  2. ¿Cómo puede usted detener a alguien para encontrar el método de verificación y eliminarlo?

Respuesta a ambos: no se puede, no absolutamente, pero se puede hacer un trabajo bastante bueno a través de la ofuscación. El Proguard libre, pero más útil el Dexguard comercial, son herramientas para hacer esto. Usted puede baulk en el coste actual € 350 de este último; Por otro lado, he intentado hacer ingeniería inversa de aplicaciones que están protegidas de esta manera, ya menos que las apuestas fueran muy altas, no vale la pena el problema.

Hasta cierto punto, también podría hacer la ofuscación para (1) usted mismo; Tienen la firma 'constante' montada en tiempo de ejecución a través de algún método programático complicado que hace que sea difícil de encontrar y reemplazar.

(2) es realmente un problema de diseño de software; Lo que lo suficientemente complicado o molesto para eliminar el cheque. La ofuscación sólo hace que sea más difícil de encontrar en primer lugar.

Como nota adicional, es posible que desee ver si las cosas como Google Licensing le dan alguna protección en esta área. No tengo ninguna experiencia de ello, así que usted está en su propio allí.

Es una respuesta aunque está en negativo.

Si la persona tiene su apk y lo ha descodificado, incluso si ha utilizado una suma de comprobación, puede actualizar la parte del código con la nueva suma de comprobación. No creo que puedas ganar esta. Usted puede poner un gran esfuerzo en su protección, pero si usted asume que alguien puede obtener y modificar el apk, también pueden deshacer la protección. En mis cosas comerciales, sólo trato de hacer la decodificación no es obvio, pero no a prueba de balas. Sé que algo más no vale la pena el esfuerzo o incluso posible.

Tal vez usted podría cerrar los archivos xml y ponerlo en la carpeta assets / data; Y luego hacer una suma de comprobación en ese .zip. En la primera ejecución, podría descomprimir los archivos para obtener los diseños .xml. Consulte Descomprimir archivo de archivo zip de varios archivos utilizando la clase ZipFile para descomprimir un archivo.

Probablemente la forma más confiable sería que los datos XML de nivel se descarguen de un servidor cuando se inicia la aplicación con una comprobación de la marca de tiempo y los tamaños de los archivos de nivel. Eso también le permite proporcionar actualizaciones a los datos de nivel con el tiempo. Por supuesto esto significa que usted tiene el costo adicional de un servidor para el host que puede ser otro problema.

  • ¿Cómo ejecutar la solicitud web en su propio hilo?
  • Android Studio no me deja usar el interruptor en una cadena?
  • SQLiteDatabase 'no implementa interfaz'
  • Cómo obtener el valor de la columna Timestamp en android mediante cursor
  • Obtenga el contexto de aplicación de la clase singleton de no actividad
  • Archivos de lista de android contenidos en la subcarpeta de activos
  • Qué es stringentity en android y su uso
  • Objeto de matriz Iterate JSON
  • Eliminar los activos no utilizados de la biblioteca de terceros
  • Spannable en android para textView
  • AVD No se puede probar ninguna aplicación usando AVD
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.