2010-07-27 5 views
3

J'ai une bibliothèque android native (.so) Je groupais avec une application. Dans le code natif, je souhaite vérifier le nom du signataire/du package de l'application appelante.Identifier l'application d'appel dans Android NDK

La raison en est, actuellement n'importe qui peut ouvrir le fichier .apk prendre mon fichier .so et l'utiliser pour construire leurs propres applications.

Existe-t-il un moyen d'identifier de manière sécurisée l'application appelante du côté Java? Cela peut être un nom de package, une signature ou tout autre élément permettant d'identifier l'application Android de manière unique.

Répondre

2

Le code JNI est couplé au nom de package Java et peut être appelé uniquement à partir du même package et de la même classe. Pour améliorer davantage la sécurité, vous pouvez vérifier certains champs Java private static final à partir du code JNI.

+0

Une autre application peut simplement utiliser le même package et le même nom de classe pour appeler les fonctions. Ce n'est pas difficile, il suffit de regarder la liste des fonctions exportées depuis le fichier .so. Mais je suppose que le champ final statique privé pourrait ajouter une sécurité supplémentaire. Un attaquant peut encore contourner ce problème en démontant mon application, mais c'est un coup long. Merci pour la réponse! –

+0

Un attaquant pourrait toujours réduire vos défenses. La meilleure sécurité est la défense légale – ognian

+0

Vous pouvez organiser un protocole d'appel et de réponse cryptographique avec l'application, mais toute vérification que vous ajoutez au .so peut être désactivée en modifiant le .so. Vous pouvez rendre la réutilisation de votre code arbitrairement difficile, mais vous ne pouvez pas le rendre impossible. Décidez combien d'effort vous êtes prêt à y mettre. – fadden