web-dev-qa-db-fra.com

Comment faire apk sécurisé. Protéger de Décompiler

Bonjour Je développe une application pour une entreprise et notre application contient une base de données de sqlite qui contient des informations personnelles que nous souhaitons protéger. Comment pouvons-nous le protéger? Parce qu'un apk se décompile facilement complètement parce que je l'ai fait moi-même ... Alors maintenant, la question est de savoir comment sécuriser un apk? et aussi comment protéger ma base de données qui se trouve dans le téléphone après l'installation de l'application sur le téléphone.

43
Hamdullah shah

En gros, il existe 5 méthodes pour protéger votre APK en train de craquer/inverser/reconditionner:

1. Isoler le programme Java

Le moyen le plus simple est d'empêcher les utilisateurs d'accéder au programme Java Class. C’est le moyen le plus fondamental, et il existe une variété de moyens spécifiques pour y parvenir. Par exemple, les développeurs peuvent placer la clé Java Class sur le serveur. Les clients acquièrent des services en accédant aux interfaces pertinentes du serveur plutôt qu'en accédant directement au fichier Class. Il n’ya donc aucun moyen pour les pirates informatiques de décompiler les fichiers de classe. Actuellement, de plus en plus de services de normes et de protocoles sont fournis via des interfaces, telles que HTTP, Web Service, RPC, etc. Cependant, de nombreuses applications ne conviennent pas à cette protection. Par exemple, les programmes Java des programmes autonomes ne peuvent pas être isolés.

2. Crypter les fichiers de classe

Pour éviter la décompilation directe des fichiers de classe, de nombreux développeurs chiffrent certains fichiers de classe clés, tels que le numéro d'enregistrement, la gestion du numéro de série et d'autres classes associées. Avant d'utiliser ces classes chiffrées, le programme doit d'abord déchiffrer ces classes, puis les charger dans la machine virtuelle Java. Ces classes peuvent être déchiffrées par du matériel ou des logiciels.

Les développeurs chargent souvent des classes cryptographiques via une classe ClassLoader personnalisée (l'applet ne prend pas en charge ClassLoader personnalisé pour des raisons de sécurité). Customed ClassLoader va d'abord trouver des classes cryptographiques, puis les décrypter. Et finalement, chargement des classes déchiffrées sur la machine virtuelle Java. Customed ClassLoader est une classe très importante dans cette méthode de protection. Parce qu'il n'est pas crypté, il peut être la première cible d'un pirate informatique. Si la clé de déchiffrement et l'algorithme pertinents ont été supprimés, les classes chiffrées peuvent facilement être déchiffrées.

3. Convertir en codes natifs

Convertir le programme en codes natifs est également un moyen efficace d’empêcher la décompilation. Parce que les codes natifs sont souvent difficiles à décompiler. Les développeurs peuvent convertir l’application entière en codes natifs ou ne convertir que des modules clés. Si vous ne faites que convertir une partie clé des modules, il faudra faire appel à la technologie JNI lorsque les programmes Java utilisent ces modules. Il a abandonné la fonctionnalité multiplate-forme de Java lors de l'utilisation de cette méthode pour protéger les programmes Java. Pour différentes plates-formes, nous devons maintenir différentes versions des codes natifs, ce qui augmentera la charge de travail liée à l'assistance et à la maintenance logicielles. Mais pour certains modules clés, cette solution est parfois souvent nécessaire. Afin de garantir que ces codes natifs ne seront ni modifiés ni remplacés, les développeurs doivent souvent signer numériquement ces codes. Avant d'utiliser ces codes natifs, les développeurs doivent souvent authentifier ces codes locaux pour s'assurer que ces codes n'ont pas été modifiés par des pirates. Si la vérification de la signature est réussie, les développeurs peuvent appeler les méthodes JNI appropriées.

4. Obfuscation de code

L'obfuscation de code consiste à réorganiser et à traiter le fichier de classe, ce qui permet aux codes traités de remplir la même fonction (sémantique) avec les codes non traités. Mais les codes obfusqués sont difficiles à décompiler, c’est-à-dire qu’ils sont très difficiles à comprendre. Par conséquent, les portées de décompilation sont difficiles à comprendre. Théoriquement, si les hackers disposent de suffisamment de temps, les codes obfusqués peuvent toujours être déchiffrés. Même certaines personnes développent un outil de dé-obscurcissement. Mais de la situation actuelle, depuis le développement diversifié de l'obscurcissement, la théorie mature de l'obscurcissement, les codes Java obfusqués peuvent bien empêcher la décompilation.

5. Cryptage en ligne

APK Protect était un site Web de cryptage en ligne pour APK, mais l'activité a apparemment été interrompue depuis 2013 environ. Il fournissait des codes Java et des codes C++ pour obtenir des effets anti-débogage et de décompilation.

Au départ, j'avais suggéré que vous utilisiez cette dernière méthode car cela pourrait vous faire gagner plus de temps. D'après mon expérience, il était très simple à utiliser et cela ne prendrait pas beaucoup de temps.

30
classc_abc

Avec Jellybean, cela est devenu une possibilité.

$ openssl enc -aes-128-cbc -K 000102030405060708090A0B0C0D0E0F 
-iv 000102030405060708090A0B0C0D0E0F -in my-app.apk -out my-app-enc.apk

$ adb install --algo 'AES/CBC/PKCS5Padding' --key 000102030405060708090A0B0C0D0E0F 
--iv 000102030405060708090A0B0C0D0E0F my-app-enc.apk
        pkg: /data/local/tmp/my-app-enc.apk
Success

Veuillez lire le blog suivant pour plus d'informations details

8
Corvusoft

S'il s'agit d'informations confidentielles qui ne doivent pas tomber entre les mains de vos utilisateurs, vous ne pouvez pas les sécuriser. Il est fondamentalement impossible de mettre des informations sur un périphérique (code ou données) et de laisser votre application y accéder, sans toutefois permettre à une personne possédant le périphérique d'avoir accès à ces informations.

Le cryptage des informations est inutile du point de vue de la sécurité, car votre application doit contenir tout le matériel nécessaire pour le déchiffrer afin de l’utiliser, et un attaquant suffisamment motivé peut toujours extraire ces informations et les déchiffrer elles-mêmes.

Tout ce que vous pouvez faire, c'est rendre l'accès à cette information plus fastidieux et fastidieux, ce qui n'aidera que s'il n'est pas vraiment nécessaire de garder cette information secrète. C’est ce que vous pouvez faire avec proguard pour masquer votre fichier .apk.

5
Ben

Avez-vous envisagé le cryptage sqlite? Voir ce fil - sqlite encryption pour Android

En ce qui concerne la protection de votre .apk, essayez d’obscurcir votre code avec proguard. Voir http://developer.Android.com/guide/developing/tools/proguard.html

4
Vino

Vous pouvez essayer 'Anti Decompiler (Android) Trial'

https://play.google.com/store/apps/details?id=com.tth.AntilDecompilerTrial

Proguard ne fait pas quelque chose:

  • Cachez toutes les valeurs const (chaîne, caractère), vous ne verrez jamais de texte clair comme "ma clé", "mon val" ... dans votre fichier apk
  • Obfuscate nom de fichier, qui est référencé dans AndroidManifest.xml 
  • Ajoutez du faux code à votre code source. Évidemment, les puissants décompilateurs aiment: dex2jar, jd-gui, ... ne peuvent pas inverser exactement votre fichier apk. La plupart des fonctions s'afficheront avec le commentaire 'Erreur'. 

=====

  • Après la transformation, si vous donnez votre projet source à quelqu'un, il sera presque impossible à lire et à comprendre. 
  • Cette solution n’exclut pas Proguard, vous pouvez les combiner ensemble. (fonction, le champ Obfuscation de Proguard est meilleur que les fonctionnalités Obfuscation de cette solution)
3
Son tung

Vous pouvez lire mon message sur: http://www.androidpit.com/en/Android/forum/thread/567093/An-Analysis-of-Android-APK-Protect-Shell-APKProtect . L'APK ajouté avec protéger Shell de APK Protect semble incapable de décompiler. Je veux dire, la méthode de cryptage est très avancée. Même un pirate informatique maître a besoin de beaucoup de temps pour le résoudre.

3
Jack Shaw

Si la base de données contient des données sensibles, vous pouvez chiffrer les valeurs de plusieurs colonnes ou la base de données complète comme indiqué dans l’autre réponse et vous assurer que le mot de passe n’est pas stocké sur le périphérique mais doit être saisi par l’utilisateur pour accéder à Les données.

S'il existe des éléments de code que vous devez protéger, il n'y a vraiment aucun moyen de le sécuriser. Tout ce que vous pouvez pour un nombre limité de cas d'utilisation est de créer une dépendance à un service en ligne et de sécuriser le serveur. Mais pour beaucoup d'applications, cela ne serait pas une option.

0
Beanow