Comment rendre apk sécurisé. Protéger de Decomstack

Bonjour je développe une application pour une entreprise et notre application contient une firebase database de sqlite qui contient des informations personnelles et nous voulons la protéger. Comment pouvons-nous le protéger? Parce qu’un apk se décomstack facilement 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 firebase database qui se trouve dans le téléphone après avoir installé l’application sur le téléphone.

Fondamentalement, il existe 5 méthodes pour protéger votre APK en craquant / inversant / reconditionnant:

1. Isoler le programme Java

Le moyen le plus simple consiste à 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 classe Java clé sur le serveur, les clients acquièrent des services en accédant aux interfaces pertinentes du serveur plutôt que d’accéder directement au fichier Class. Il n’y a donc aucun moyen pour les pirates de décomstackr les fichiers de classe. Actuellement, il existe de plus en plus de services de normes et de protocoles fournis via des interfaces, tels que HTTP, Web Service, RPC, etc. Mais de nombreuses applications ne sont pas adaptées à cette protection. Par exemple, les programmes Java dans les programmes autonomes ne peuvent pas être isolés.

2. Chiffrer les fichiers de classe

Pour empêcher 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 charger ces classes dans JVM. 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 (Applet ne prend pas en charge le ClassLoader personnalisé en raison de la sécurité). ClassLoader personnalisé trouvera d’abord les classes cryptographiques, puis les déchiffrera. Et enfin, charger les classes décryptées dans JVM. ClassLoader personnalisé est une classe très importante dans cette méthode de protection. Comme 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é éliminés, les classes chiffrées peuvent facilement être déchiffrées.

3. Convertir en codes natifs

Convertir un programme en codes natifs est également un moyen efficace d’empêcher la décompilation. Parce que les codes natifs sont souvent difficiles à décomstackr. Les développeurs peuvent convertir l’application entière en codes natifs ou convertir uniquement les modules clés. Si vous convertissez simplement une partie clé des modules, la technologie JNI sera nécessaire pour appeler lorsque les programmes Java utilisent ces modules. Il a abandonné la fonctionnalité multi-plateforme de Java lors de l’utilisation de ce modèle pour protéger les programmes Java. Pour différentes plates-formes, nous avons besoin de maintenir différentes versions des codes natifs, ce qui augmentera le support logiciel et la charge de travail de maintenance. Mais pour certains modules clés, cette solution est parfois 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 les pirates. Si le contrôle de signature est réussi, les développeurs peuvent appeler les méthodes JNI appropriées.

4. Obfuscation du code

L’obscurcissement du code consiste à réorganiser et à traiter le fichier de classe, en faisant en sorte que les codes traités remplissent la même fonction (sémantique) avec les codes non traités. Mais les codes masqués sont difficiles à décomstackr, c’est-à-dire que les codes décompilés sont très difficiles à comprendre. Par conséquent, les états de décompilation sont difficiles à comprendre. Théoriquement, si les pirates ont suffisamment de temps, les codes masqués peuvent encore être fissurés. Même certaines personnes développent un outil de désembuage. Mais à partir de la situation actuelle, depuis le développement diversifié de l’obscurcissement, la maturité de la théorie de l’obfuscation, les codes Java obscurcis 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 environ 2013. Il fournissait des codes Java et des codes de protection C ++ pour obtenir des effets anti-débogage et décompilé.

J’ai initialement suggéré que vous utilisiez cette dernière méthode car elle pourrait vous faire gagner plus de temps. D’après mon expérience, l’opération était très simple et ne prenait pas beaucoup de temps.

Avec Jellybean, c’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 

S’il vous plaît lire le blog suivant pour plus de détails

Si ce sont des informations secrètes qui ne doivent pas tomber entre les mains de vos utilisateurs, vous ne pouvez pas les sécuriser. Il est fondamentalement impossible de placer des informations sur un périphérique (code ou données) et de demander à votre application d’y accéder, mais de ne pas autoriser une personne disposant de ce périphérique à accéder à ces informations.

Le chiffrement des informations est inutile du sharepoint vue de la sécurité, car votre application doit contenir tout ce qui est nécessaire pour le déchiffrer afin de l’utiliser, et un attaquant suffisamment motivé peut toujours l’extraire et le déchiffrer seul.

Tout ce que vous pouvez faire est de rendre plus ennuyeux et fastidieux l’access à ces informations, ce qui n’est utile que s’il n’ya pas vraiment besoin de garder le secret. Voici comment utiliser proguard pour masquer votre fichier .apk.

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

En ce qui concerne la protection de votre fichier .apk, essayez de masquer votre code en utilisant proguard. Voir http://developer.android.com/guide/developing/tools/proguard.html

Vous pouvez lire mon message sur: http://www.androidpit.com/en/android/forum/thread/567093/An-Analysis-of-Android-APK-Protect-Shell-APKProtect . Le fichier APK ajouté avec protection shell d’ APK Protect semble impossible à décomstackr. Je veux dire, la méthode de cryptage est très avancée. Même un maître pirate a besoin de temps pour le casser.

Vous pouvez essayer ‘Anti Decomstackr (Android) Trial’

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

Cela fait quelque chose que Proguard ne fait pas:

  • Cacher toutes les valeurs const (chaîne, caractère), vous ne verrez jamais de texte clair comme “ma clé”, “mon val” … dans votre fichier apk
  • Nom de fichier obscurci, qui est référencé dans AndroidManifest.xml
  • Ajoutez un faux code à votre code source. Event les puissants décompilateurs aiment: dex2jar, jd-gui, … ne peuvent pas inverser exactement votre fichier apk. La plupart des fonctions seront affichées avec le commentaire “Erreur”.

=====

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

Si c’est la firebase database qui contient des données sensibles, vous pouvez chiffrer les valeurs de plusieurs colonnes ou de la firebase database complète comme mentionné dans l’autre réponse et vous assurer que le mot de passe n’est pas stocké sur le périphérique Les données.

S’il y a des morceaux de code à protéger, il n’y a pas vraiment de 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, ce ne serait pas une option.