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?
- ¿Cómo puedo llamar al código C / C ++ de Android usando JNA?
- ¿Las funciones de Android JNI se ejecutan en el hilo principal?
- Cambiar Actividad con JNI Llamar o usar Openfeint provoca App-Crash
- No se puede obtener el valor JNIEnv * en contexto arbitrario
- No se pudo cargar la biblioteca libopencv_java.so
- ¿El enlace JavaScript de JNI de Android pasa eficientemente TypedArray / ArrayBuffer a Java como una matriz?
- JNA para android
- Cómo capturar UnsatisifiedLinkError cuando se utiliza biblioteca NDK-construida en una aplicación para Android?
- Escriba a stdout en JNI Android? Sin <android / log.h>
- Android ffmpeg simple JNI envoltorio
- Cómo arreglar Eclipse CDT Error "La función 'isdigit' no pudo ser resuelta" con Android NDK?
- Cómo depurar una aplicación en Android con GDBSERVER?
- Cómo devolver una matriz de JNI a Java?
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.
- ¿Cómo evitar mostrar la pantalla de consentimiento en nuestras propias aplicaciones nativas cuando la autenticación externa?
- Cómo utilizar la API de malla experimental con Project Tango