2011-12-31 3 views
1

J'essaie de mettre en œuvre un système d'invalidation de version pour les applications basées sur le serveur. Avec le modèle suivant:Récupérer des informations basées sur la signature apk

Dans certaines pétitions au serveur, le client ajoute un mot-clé et si ce mot de passe ne figure pas dans une liste blanche, le serveur répond par une erreur et les applications affichent un message indiquant qu'une mise à jour du marché est requis (généralement parce que c'est une version piratée ou un mot de passe qui a été utilisé pour une version légitime mais a été mis sur liste noire parce qu'une version fissurée utilise le même code). Pour générer ce mot de passe, j'aimerais qu'une clé récupérée en cours d'exécution identifie la version compilée (ainsi, si l'apk est recompilée, cela ne fonctionnera pas)

Initialement, j'ai envisagé d'utiliser la signature apk récupérée par un code comme ceci:

public static int getSignature() { 
    try { 
     Signature sigs[] = getPackageManager().getPackageInfo(getPackageName(), PackageManager.GET_SIGNATURES).signatures; 
     return sigs[0].hashCode(); 
    } catch (NameNotFoundException ignore) { 
    } 
    return 0; 
} 

Mais est-ce est assez stupide car le pirate peut récupérer la signature de mon apk (l'installer dans un dispositif et l'exécution d'un programme avec le code ci-dessus (en utilisant le nom my.apk.package au lieu de getPackageName())

Ensuite, modifiez la méthode getSignature() pour retourner un code falsifié au lieu de e vraie signature. Donc, ma question est de savoir s'il y a un type d'information (dépendante de la signature ou similaire) mais pas facilement accessible depuis l'extérieur de l'application, de cette façon si le code est recompilé avec une autre signature dont la valeur est changée. facilement deviner

Merci

Répondre

2

Je pense que vous n'avez pas de chance depuis quoi que ce soit à l'intérieur de votre .apk peut être lu par presque tout le monde, esp. sur les appareils enracinés.

Vous devriez certainement envisager d'obfuscation de votre application, par ex. en utilisant ProGuard.

Questions connexes