Est-il vraiment impossible de protéger les applications Android de 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 la rétro-ingénierie, comme la question de débordement de la pile comment verrouiller les classes Java compilées pour prévenir la décompilation? suggère.

Comment protéger une application qui contient des secrets commerciaux algorithmiques de la rétroingénierie?

par" comment "je veux dire non seulement les techniques logicielles, mais aussi d'autres approche créative .

55
demandé sur Community 2010-12-02 18:30:58

10 réponses

la première étape pour moi serait d'optimiser et d'obscurcir le code avec ProGuard qui est connu pour fonctionner avec le code byte ciblé sur Android Dalvik VM (via Dex). C'est un outil vraiment génial et peut augmenter la difficulté d'inverser votre code tout en réduisant l'empreinte de votre code (dans certains cas de façon spectaculaire: une récente applet de la mine est passée d'environ 600 KB à environ 50 KB).

Comme disent les autres, vous n'obtiendrez jamais 100% de sécurité des détails de votre algorithme pendant que sa mise en œuvre est distribuée aux clients. Pour cela, vous devez garder le code sur vos serveurs seuls. Les tentatives de près de 100% de sécurité pour le code client s'élèvent effectivement à DRM et peuvent rendre votre code client fragile face aux pannes de réseau et juste généralement frustrer les utilisateurs (légitimes).

le blog des développeurs Android a quelque utile articles sur la question de la "inviolable' applications Android (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 de débogueur pour empêcher l'analyse du temps d'exécution et de combiner cela avec le cryptage de portions de code binaire (pour décourager l'analyse statique), mais pour être honnête, un attaquant assez déterminé peut contourner ceux-ci, alors qu'il peut causer une frustration légitime de l'utilisateur comme illustré par L'article de Windows KB jeux: Message d'erreur: un débogueur a été détecté: décharger le Débogueur et essayer à nouveau . Le logiciel de DVD "apprendre à conduire" de ma copine ne fonctionnera pas sous VirtualBox pour cette raison, mais elle blâme Linux bien sûr!

ouverture et L'article de Wikipedia sur le code obscurci peut être de bons points de départ si vous voulez regarder plus loin. Mais soyez averti, vous pouvez perdre plus par l'utilisation trop zélée de ces techniques frustrant vos utilisateurs que vous le feriez par la perte de secrets commerciaux par la rétro-ingénierie. Comme dit Anton , peut-être que l'approche la plus "créative" réside dans la modification du modèle d'affaires plutôt que de la technologie.

Le Dernier Androïde SDK update le 6 Décembre 2010 (coïncidant avec Android 2.3 pain d'épice de presse):

prise en charge intégrée de ProGuard: ProGuard est maintenant emballé avec les outils SDK. Les développeurs peuvent maintenant masquer leur code en tant que partie intégrée d'une construction de version.

70
répondu willjcroz 2017-05-23 12:09:20

si c'est une possibilité: la procédure à distance appelle vers un serveur bien protégé (le serveur a le code que vous voulez protéger).

13
répondu jcomeau_ictx 2013-02-18 21:39:59

faites-le si bon marché de déranger et ne construisez pas votre modèle d'affaires sur les secrets qui sont exécutés du côté du client. En d'autres termes, ne partagez pas vos secrets.

6
répondu Anton S 2013-02-18 21:39:16

il est impossible de protéger un code client contre la rétro-ingénierie. Vous pouvez simplement utiliser des moyens plus ou moins efficaces d'obscurcir votre code. Et l'assembleur x86 optimisé se trouve être un assez bon brouillage.

donc si vous avez des secrets algorithmiques, mettez-les sur le côté serveur.

5
répondu CodesInChaos 2010-12-02 15:35:54

comment verrouiller les Classes Java compilées pour prévenir la décompilation

vous ne pouvez pas. Tout projet peut être rejeté par quelqu'un qui possède les compétences, le temps et la motivation nécessaires.

(soit dit en passant, cela s'applique aussi aux logiciels qui sont compilés en binaire. La seule différence réside dans la quantité d'effort nécessaire à la décomposition.)

ma question Est de savoir comment on protégerait une application qui contient des secrets commerciaux algorithmiques de 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écuter le code qui contient les secrets commerciaux sur un serveur distant (correctement sécurisé).

3
répondu Stephen C 2010-12-02 15:36:15

vous ne pouvez pas protéger complètement votre application, car il y aura toujours quelqu'un qui la déchiffrera...

cependant, vous pourriez les empêcher de le faire en rendant votre application gratuite, ou au moins la saleté bon marché afin que les gens ne seront pas dérangés.

Alternative, essayer de garder votre application Android "muet", comme dans garder toute la logique commerciale secrète sur un serveur d'arrière-plan, et juste avoir vous les données d'affichage de l'application en utilisant une certaine forme de service exposé.

2
répondu Jimmy 2010-12-02 15:39:39

peu importe ce que vous faites, peut-être au moins vous pouvez le rendre très difficile à décompiler, mais: si quelque chose est exécuté/calculé dans un programme, l'information sur l'algorithme doit être là, et il y aura toujours une possibilité de trouver comment obtenir que (assez de compétence et de motivation sur vous adversaires côté supposé). Toujours.

1
répondu oezi 2013-02-18 21:41:26

j'ai mon algorithme sur un serveur et j'invoque ce service depuis mon application pour smartphone. Un agresseur peut rétrograder mon application pour voir mon protocole avec mon serveur. Je peux protéger mon algorithme mais je ne peux pas me protéger contre une utilisation non autorisée de mon service. Je dois accepter cette réalité sans solution. Je dois être content que tant que je gagne de l'argent avec mon propre service, alors je dois vivre avec le potentiel des autres siphonnant mon service.

0
répondu David 2011-10-06 21:02:18

Vous voulez une approche créative, en voici une.

Quel est le programme principal sur les téléphones qui n'ont pas été décompilés aujourd'hui? Radio firmwares. Pourquoi? Il ne fonctionne pas sur le chipset bras du téléphone, mais plutôt sur un Qualcomm Hexagon qui est de plus en plus présent dans les smartphones. Ce n'est pas x86, ce n'est pas ARM, il utilise une architecture propriétaire Qualcomm et des instructions.

  • Java la décompilation est facile.

  • BRAS à la décompilation est plus difficile (Hex-Rays Decompiler licences à partir de 1129 USD... et le mélange entre le code du pouce et le code du bras standard dans les binaires est une douleur) = > vous pouvez essayer de compiler avec le Android NDK.

  • il n'y a actuellement aucun décompileur D'Hexagone! Et les spécifications QDSP ne sont pas accessibles au public, même les versions piratées.

la Question est, un vendeur de logiciel indépendant peut-il utiliser le micrologiciel hexagonal inclus dans les téléphones de masse? On dirait la direction que prend Qualcomm. Consultez leur site web et les produits SnapDragon.

NB: Je ne suis ni Pro-Qualcomm ni pro-closed-source. Mais ce fil fait appel à ce genre de solution.

0
répondu KrisWebDev 2014-04-27 18:54:09

vous ne pouvez pas sécuriser à 100% votre code android de la rétroingénierie. Si vous voulez sécuriser une clé, alors vous pouvez prendre l'aide d'intégrer le serveur qui vous donne la clé cryptée tout en appelant le service web et utiliser cette clé dans votre code.

0
répondu M.Noman 2016-09-05 12:24:24