Firma digital de una biblioteca compartida en Android

Estoy buscando una forma de firmar digitalmente una biblioteca compartida para poder verificar la autenticidad de dicha biblioteca. Mi solución propuesta fue hash la biblioteca y almacenar esto en el archivo Java que carga y llama a la biblioteca, pero el problema es que esto fallará si la biblioteca se actualiza en el futuro (a menos que todas las aplicaciones que utilizan la biblioteca también se actualizan).

Yo estaba pensando que podría ser posible insertar un hash de la biblioteca que se ha firmado con una clave privada, por ejemplo, al final del archivo .so para que este hash firmado se puede confiar y no necesita ser almacenado En la aplicación de llamada para la verificación. ¿Hay algún soporte para esto en las API de Android e insertar los datos en la biblioteca de esta manera potencialmente causar problemas para el cargador de la biblioteca?

Si su biblioteca no está siendo instalada en /system/lib , normalmente es usada por una aplicación – la que tenía la biblioteca empaquetada en su APK, y el típico proceso de actualización involucrará tanto la biblioteca C ++ como la aplicación Java. Por lo tanto, su verificación no necesita sobrevivir a las actualizaciones.

Por otro lado, las técnicas de autenticación estándar también se aplican a la firma de bibliotecas. Por ejemplo, agregue una nueva API "GetVersion (int salt)" que devolverá el secreto compartido (que puede ser el hash del mismo archivo), "salted" con la entrada aleatoria. Ahora, usted hace la ingeniería inversa su firma más difícil, porque ningún hombre en el medio de análisis no puede darles una pista.

Esto puede ser más fácil de implementar que buscar una firma en offset fijo del archivo de biblioteca y más difícil de evitar.

En cualquier caso, anexar un blob arbitrario al final de un objeto compartido no causará problemas con el cargador. Puede agregar el paso personalizado de modificar los archivos .so en los archivos de Android.mk . Debe hacerlo durante o después del paso de install , lo que quita la información de depuración de la biblioteca.

  • Uso de Fluidsynth para reproducir notas de SoundFonts en Android
  • OpenCV 2.4.1: UnsatisfiedLinkError
  • Error de segmentación en la biblioteca nativa cuando se ejecuta bajo Android antes de 4.0.3
  • Bloquear el cuadro de diálogo desde el código JNI
  • Pasar un objeto Java a C ++ a través de JNI y luego volver a Java, a través de void *
  • java.lang.UnsatisfiedLinkError: No se ha encontrado ninguna implementación debido a que la biblioteca no está cargando
  • ¿Debería evitarse también el finalizador de Java para la gestión del ciclo de vida de los objetos nativos?
  • Mantener los métodos Java llamados desde Android JNI
  • UnsatisfiedLinkError (Método nativo no encontrado)
  • ¿Cómo puedo modificar un mapa de bits de Android en el NDK para que pueda utilizarlo en Java?
  • ¿Puedes detectar un error de JNI en una biblioteca de terceros antes de un duro choque?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.