Obtenir la sum de contrôle des codes sources dans la bibliothèque Android

Je développe une bibliothèque Android et je souhaite appliquer un mécanisme de détection de sabotage à mon code, car celui-ci appelle des services Web financiers sensibles.

Ce que je vais implémenter, c’est calculer la sum de contrôle de l’apk (ou des parties importantes de celui-ci), par programme lors de l’exécution, afin que je puisse empêcher un apk reconditionné ou recompilé de causer des dommages (prévention des altérations).

Ce que j’ai proposé jusqu’à présent, c’est de calculer la sum de contrôle de applicationInfo.publicSourceDir . mais je ne suis pas sûr de ce qui se passe avec les applications qui ont plusieurs fichiers dex ou plusieurs splitApks.

Quel est le moyen le plus fiable de calculer la sum de contrôle en fonction de la base de code d’une application sous Android, par programme?

Si vous dissortingbuez par le biais du jeu, vous pouvez jeter un coup d’œil à SafetyNet: https://developer.android.com/training/safetynet/index.html

L’approche de la sum de contrôle peut être appliquée à un fichier unique ou à des fichiers zip. Ce sera un long processus de vérifier la sum de contrôle de tous les fichiers. Je pense que vous êtes dans la mauvaise direction.

Tout d’abord, il n’y a pas de solution claire à ce problème. Toute application peut être piratée – vous pouvez simplement rendre difficile le piratage.

C’est ce qui est fait pour rendre les choses difficiles –

  1. Crypter le votre apk – de sorte qu’il est difficile d’obtenir votre code source. refer – APK pour protéger l’apk de la rétroingénierie – Vérifiez les outils obscurcissants.

  2. Utilisez le cryptage des données lors de l’envoi / de la réception de données à partir de WebService. Vous pouvez utiliser HMAC pour protéger les données. Assurez-vous que votre serveur est suffisamment intelligent pour bloquer les applications utilisateur / demandant en cas d’appels incorrects. HMAC est facile à mettre en œuvre et il existe des bibliothèques pour générer des clés HMAC.

Obtenez la signature de l’application qui est liée au certificate utilisé pour signer l’APK

 public static Ssortingng getAppSignature(Context context) { try { for (Signature signature : context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES).signatures) { MessageDigest md = MessageDigest.getInstance("SHA"); md.update(signature.toByteArray()); return Base64.encodeToSsortingng(md.digest(), Base64.DEFAULT); } } catch (Exception e) { /* Do nothing */ } return null; } 

Ceci peut être comparé à une valeur stockée pour vérifier si le certificate de signature est l’original ou non.