59 votes

Est-il vraiment impossible de protéger les applications Android contre l'ingénierie inverse ?

Comme nous le savons, les applications Android sont écrites en Java. En Java, peu importe ce que vous faites il est impossible de protéger le code compilé de la décompilation ou de l'ingénierie inverse, comme le montre la question de Stack Overflow Comment verrouiller les classes Java compilées pour empêcher leur décompilation ? suggère.

Comment protéger une application contenant des secrets commerciaux algorithmiques contre la rétro-ingénierie ?

Par "comment", j'entends non seulement les techniques logicielles, mais aussi d'autres aspects de la vie quotidienne. créatif approches.

72voto

willjcroz Points 1331

Le premier arrêt pour moi serait d'optimiser et d'obscurcir le code avec ProGuard qui est connu pour fonctionner avec du code d'octet ciblé sur Android Dalvik VM (via Dex). C'est un outil vraiment génial qui peut augmenter la difficulté de "renverser" votre code tout en réduisant son empreinte (dans certains cas de façon spectaculaire : une de mes applets récentes est passée d'environ 600 Ko à environ 50 Ko).

Comme d'autres l'ont dit, vous n'obtiendrez jamais une sécurité à 100% des détails de votre algorithme lorsque sa mise en œuvre est distribuée aux clients. Pour cela, vous devez garder le code sur vos seuls serveurs. Les tentatives de sécurisation à près de 100% du code client reviennent en fait à DRM et peut rendre votre code client fragile face aux pannes de réseau et, de manière générale, frustrer les utilisateurs (légitimes).

Le blog des développeurs Android a quelques utile articles sur la question des applications Android "inviolables" (et ils recommandent l'utilisation de ProGuard dans le cadre de l'approche globale).

En ce qui concerne les approches " créatives ", certains développeurs emploient techniques de détection du débogueur pour empêcher l'analyse en cours d'exécution et combiner cela avec le cryptage de portions de code binaire (pour décourager l'analyse statique), mais pour être honnête, un attaquant suffisamment déterminé peut contourner ces derniers, alors qu'il peut causer une frustration légitime des utilisateurs, comme l'illustre l'article de la KB de Windows Jeux : Message d'erreur : Un débogueur a été détecté : Déchargez le débogueur et réessayez . Le logiciel DVD "Apprendre à conduire" de ma copine ne fonctionne pas sous Windows. VirtualBox pour cette raison, mais elle blâme Linux bien sûr !

OpenRCE y Article de Wikipedia sur le code obfusqué peuvent être de bons points de départ si vous souhaitez approfondir la question. Mais attention, vous risquez de perdre plus par une utilisation trop zélée de ces techniques frustrant vos utilisateurs que par la perte de secrets commerciaux par rétro-ingénierie. Comme Anton S dit Si l'on veut être créatif, l'approche la plus "créative" consiste peut-être à modifier le modèle économique plutôt que la technologie.

La dernière version d'Android Mise à jour du SDK le 6 décembre 2010 (coïncidant avec la sortie d'Android 2.3 Gingerbread) :

Support ProGuard intégré : ProGuard est maintenant emballé avec les outils SDK. Les développeurs peuvent maintenant obscurcir leur code en tant que partie intégrante d'une version.

14voto

jcomeau_ictx Points 15736

Si c'est possible : appels de procédure à distance vers un serveur bien protégé (le serveur possède le code que vous voulez protéger).

7voto

Anton S Points 9675

Faites en sorte qu'il soit si peu coûteux de s'en préoccuper et ne construisez pas votre modèle économique sur des secrets qui sont exécutés du côté du client. En d'autres termes, ne partagez pas vos secrets.

5voto

CodesInChaos Points 60274

Il est impossible de protéger tout code côté client contre la rétro-ingénierie. Vous pouvez simplement utiliser des moyens plus ou moins efficaces pour obscurcir votre code. Et l'assembleur x86 optimisé s'avère être un assez bon moyen d'obfuscation.

Donc si vous avez des secrets algorithmiques, mettez-les du côté du serveur.

3voto

Stephen C Points 255558

Comment verrouiller les classes Java compilées pour empêcher leur décompilation ?

Vous ne pouvez pas. N'importe quel stratagème peut être déjoué par quelqu'un qui a suffisamment de compétences, de temps et de motivation.

(Incidemment, cela s'applique également aux logiciels compilés en binaire. La seule différence réside dans la quantité d'effort nécessaire à la décompilation).

Ma question est de savoir comment protéger une application qui contient des secrets commerciaux algorithmiques contre la rétro-ingénierie.

Il suffit de ne pas installer l'application sur le téléphone de l'utilisateur. Ou (plus utilement), exécutez le code qui contient les secrets commerciaux sur un serveur distant (correctement sécurisé).

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