2015-10-05 4 views
1

Je souhaite vérifier un fichier APK à partir du code Java à l'aide de JarSigner. Je vous écris une application qui installe programatically APK (un peu comme Google Play) et avant de l'installer vérifie les points suivants:Vérification d'un fichier APK à l'aide de JarSigner

  • Vérifiez la signature du fichier .SF itself.Verify le résumé dans la liste chaque entrée dans la Fichier .SF avec chaque section correspondante dans le manifeste .
    Vérifiez le condensé répertorié dans chaque entrée du fichier .SF avec chaque section correspondante dans le manifeste.
    Lit chaque fichier dans le fichier JAR qui a une entrée dans le fichier .SF. Pendant la lecture, calcule le condensé du fichier, puis compare le résultat avec le résumé pour ce fichier dans la section manifeste.

Cela est beaucoup comme la course jarsigner avec option -verify sur la ligne de commande

j'ai regardé la documentation Java, je pense que je pourrais utiliser l'API pour JarSigner.verifyJar() this.But ce n'est pas méthode publique. Est-ce que quelqu'un a essayé de vérifier l'APK du code Java? Appréciera n'importe quels indicateurs.

Répondre

1

Vous pouvez obtenir votre signature comme ceci:

PackageInfo packageInfo = context.getPackageManager().getPackageInfo(
    context.getPackageName(), PackageManager.GET_SIGNATURES); 

List<String> list = new ArrayList<>(); 

for (Signature signature : packageInfo.signatures) { 
    MessageDigest md = MessageDigest.getInstance("SHA"); 
    md.update(signature.toByteArray()); 
    final String currentSignature = Base64.encodeToString(md.digest(), Base64.DEFAULT); 
    list.add(currentSignature); 
} 

Découvrez this article pour plus de détails.

+0

Merci. Cette approche nécessite que l'application soit déjà installée sur l'appareil et que PackageManager en soit conscient. Mais mon cas d'utilisation est différent. J'écris une application personnalisée qui installe des fichiers APK et avant de l'installer, je veux m'assurer qu'il passe la vérification. 1. Vérifiez la signature du fichier .SF lui-même. 2. Vérifiez le condensé répertorié dans chaque entrée du fichier .SF avec chaque section correspondante dans le manifeste. 3. Lisez chaque fichier du fichier JAR contenant une entrée dans le fichier .SF. – Sai

+0

Ahh ok. Je suggère de mettre à jour votre question pour inclure cette information alors! – Buddy

+0

@Sai cette solution devrait encore fonctionner. Cependant, au lieu d'appeler 'getPackageInfo', appelez' getPackageArchiveInfo' et passez le chemin vers l'APK. – dennisdrew