8 votes

Recommandation de sécurité in-app Android - qu'est-ce que cela signifie ?

Le développeur Android dit ce qui suit à propos du stockage de la clé publique de votre application dans votre projet :

Recommandation de sécurité : Il est fortement recommandé de ne pas de ne pas coder en dur la valeur exacte de la chaîne de la clé de licence publique fournie par Google Play. Au lieu de cela, vous pouvez construire l'intégralité de la chaîne de la clé de licence publique au moment de l'exécution à partir de sous-chaînes, ou la récupérer à partir d'une chiffrée, avant de la transmettre au constructeur. Cette approche rend plus difficile pour les tiers malveillants de modifier la chaîne de dans votre fichier APK.

Cela devrait-il être explicite ? Je ne comprends pas ce qu'ils veulent que je fasse.

Ils disent la même chose dans les commentaires de l'exemple, mais qu'importe, ils ne démontrent pas réellement ce qu'ils entendent par leurs instructions. Voici ce qu'ils disent :

Au lieu de stocker l'ensemble de la l le * programme, construire la clé au moment de l'exécution à partir de morceaux ou * utiliser la manipulation de bits (par exemple, XOR avec une autre chaîne) pour cacher * la clé réelle. La clé elle-même n'est pas une information secrète, mais nous ne voulons pas la rendre emberlificotée. * nous ne voulons pas qu'il soit facile pour un attaquant de remplacer la clé publique par une * par la sienne et de falsifier les messages du serveur.

Alors, comment faire exactement ?

2voto

skygeek Points 940

Les développeurs Android veulent dire la "clé publique" que vous devez synchroniser avec Google Play pour n'importe quel paiement que vous voulez faire avec votre application. Elle ne doit pas être utilisée directement dans le code source de votre application parce qu'elle peut être facilement piratée par n'importe qui. L'une des solutions consiste donc à stocker votre clé publique sur le serveur et, une fois que vous avez reçu la réponse de Google Play pour vérifier la clé, à envoyer cette réponse au serveur et à effectuer votre opération sur le serveur.

       /**
       * String transformation by XOR-ing all characters by value.
       */
       static String stringTransform(String s, int i) {
       char[] chars = s.toCharArray();
       for(int j = 0; j<chars.length; j++)
        chars[j] = (char)(chars[j] ^ i);
         return String.valueOf(chars);
       }

1voto

Milan Points 1211

Il s'agit d'une information très élémentaire qu'ils essaient de communiquer. Voyons cet exemple :

Certains développeurs peuvent stocker leur licence sous la forme d'une chaîne de caractères :

private static final String LICENSE_1="xxx-yyy-zzz"
private static final String LICENSE_2="xxz-yyz-zzz"
private static final String LICENSE_N="xxz-yyz-zzz"

private ArrayList<String> licenseList=new ArrayList<String>();

licenseList.add(LICENSE_N);

Il se peut qu'ils veuillent que l'utilisateur entre son numéro de licence, et ils feront donc quelque chose comme ceci :

if(licenseList.contains(ExitText.getText().toString())
    //allow
else
   //disallow

Maintenant je peux décompiler cette application et obtenir toutes les licences :D

Si vous n'avez rien de tel dans votre code, la seule façon de contourner votre licence est : si c'est fait localement, cela pourrait être en piratant la mémoire comme le fait GameCIH. Le piratage de la mémoire n'est qu'un exemple, il y a plusieurs choses que les attaquants peuvent faire. Vous ne pouvez pas les arrêter mais vous pouvez leur rendre la vie plus difficile.

1voto

user2768 Points 36

Comme nous l'avons déjà indiqué , la sécurité par l'obscurité ne fonctionne pas, vous pouvez donc ignorer la documentation.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X