IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Java Discussion :

Gros problème : comment rendre une appli Java indécompilable ?


Sujet :

Java

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut Gros problème : comment rendre une appli Java indécompilable ?
    Bonjour à tous,

    j'ai codé une appli en java et il faudrait que les sources de cette appli ne soient pas accessibles or le code java est facilement décompilable, d'où ma question, existe-t'il un moyen de rendre son code indécompilable ?

    Merci à vous

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Bien sûr que non, mais tu peux toujours compliquer la compréhension de cette décompilation avec un obfuscateur. Genre ProGuard ou yGuard.

    Par contre, je te préviens, c'est la porte ouverte à de nombreux ennuis.
    La faute à cette volonté de rendre les choses indécompilables, totalement déraisonnable. Pour l'amour du ciel, la compilation ne consiste pas à cacher le code source, elle consiste à transformer le code source en une chose facilement exécutable. Jamais il n'a été question de cacher le fonctionnement, ce n'était qu'un effet secondaire et gênant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bien sûr que non, mais tu peux toujours compliquer la compréhension de cette décompilation avec un obfuscateur. Genre ProGuard ou yGuard.

    Par contre, je te préviens, c'est la porte ouverte à de nombreux ennuis.
    La faute à cette volonté de rendre les choses indécompilables, totalement déraisonnable. Pour l'amour du ciel, la compilation ne consiste pas à cacher le code source, elle consiste à transformer le code source en une chose facilement exécutable. Jamais il n'a été question de cacher le fonctionnement, ce n'était qu'un effet secondaire et gênant.
    je suis d'accord avec toi sur le but de la compilation mais dans ce cas comment fournir une application à des clients tout en rendant les sources inaccessibles ?

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Ma foi, je dirais que c'est impossible, tout comme faire tenir un éléphant en équilibre sur sa trompe.

    Tout aussi difficile l'un que l'autre, et tout autant à gagner si seulement on y arrivait.


    Non, moqueries à part, pour essayer de faire ça en Java je ne vois que l'obfuscation, qui apporte beaucoup de problèmes et aucun avantage mis à part une certaine tranquillité d'esprit basée sur l'illusion d'avoir accompli un but qui avait l'air nécessaire.
    L'obfuscation complique vraiment la vie de celui qui essaie de lire le code source. Le truc, c'est qu'on se demande bien l'intérêt de lui compliquer la vie. Comme si le fait de ne pas lui donner le code source n'était pas déjà suffisant dans cette poursuite de l'inutile.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ma foi, je dirais que c'est impossible, tout comme faire tenir un éléphant en équilibre sur sa trompe.

    Tout aussi difficile l'un que l'autre, et tout autant à gagner si seulement on y arrivait.


    Non, moqueries à part, pour essayer de faire ça en Java je ne vois que l'obfuscation, qui apporte beaucoup de problèmes et aucun avantage mis à part une certaine tranquillité d'esprit basée sur l'illusion d'avoir accompli un but qui avait l'air nécessaire.
    L'obfuscation complique vraiment la vie de celui qui essaie de lire le code source. Le truc, c'est qu'on se demande bien l'intérêt de lui compliquer la vie. Comme si le fait de ne pas lui donner le code source n'était pas déjà suffisant dans cette poursuite de l'inutile.
    je ne veux pas que mon code source soit lisible car je développe une appli pour mon boulot, elle va être disctribuée à des clients qui auront payé et on souhaite donc la protéger... l'open source c'est très bien je suis d'accord mais là dans mon cas l'appli doit être protégée. C'est normal, il y a des enjeux économiques derrière.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    L'obfuscation empeche de lire du code source qui a été obtenu pas décompilation.

    Avantage:

    - si vous vendez votre logiciel, le client ne pourra pas regarder dans les sources ni revendre les sources
    - le programme peut etre plus rapide (je ne sais pas en fait, il faudrait vérifier)

    Inconvénients:

    - l'obfuscation peut être buggé, il faut tester le logiciel après obfuscation, cela ajoute de la lourdeur
    - quand le logiciel plante, les logs sont difficiles à lire et c'est plus difficile à débugger, mais cela reste faisable

    Si j'ai un conseil à donner, il faut utiliser l'obfuscation pour les parties vraiment stratégique du programme, là où il y a l'algorithmique ou la valeur ajouté du programme par rapport aux concurrents, pas la peine de tout obfusquer

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par toto828 Voir le message
    L'obfuscation empeche de lire du code source qui a été obtenu pas décompilation.

    Avantage:

    - si vous vendez votre logiciel, le client ne pourra pas regarder dans les sources ni revendre les sources
    - le programme peut etre plus rapide (je ne sais pas en fait, il faudrait vérifier)

    Inconvénients:

    - l'obfuscation peut être buggé, il faut tester le logiciel après obfuscation, cela ajoute de la lourdeur
    - quand le logiciel plante, les logs sont difficiles à lire et c'est plus difficile à débugger, mais cela reste faisable

    Si j'ai un conseil à donner, il faut utiliser l'obfuscation pour les parties vraiment stratégique du programme, là où il y a l'algorithmique ou la valeur ajouté du programme par rapport aux concurrents, pas la peine de tout obfusquer
    j'ai entendu dire qu'à chaque obfuscateur il y avait un desobfuscateur, est-ce vrai ? si c'est le cas, mon appli ne sera pas réellement protégée ?

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Peut être oui, mais peut etre que le desobfuscateur est seulement utilisable par qui a obfusqué. En gros, l'obfuscateur change le nom des méthodes par des "a" et des "b" ainsi que le nom des variables, ça rend le code illisible. Je ne vois pas comment on peut revenir en arrière.

    Fait une petite recherche google.

  9. #9
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 557
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 557
    Points : 21 616
    Points
    21 616
    Par défaut
    Citation Envoyé par _LittleFlea_ Voir le message
    je ne veux pas que mon code source soit lisible car je développe une appli pour mon boulot, elle va être disctribuée à des clients qui auront payé et on souhaite donc la protéger... l'open source c'est très bien je suis d'accord mais là dans mon cas l'appli doit être protégée. C'est normal, il y a des enjeux économiques derrière.
    Protéger l'appli est le travail du copyright, pas de la compilation.

    Je comprends qu'on puisse n'avoir aucun intérêt pour l'open source, raison pour laquelle je ne cherche pas à pointer les nombreux avantages à fournir le code source avec l'appli.
    Mais l'obfuscation, et toute autre méthode d'empêcher la tentative de décompilation, est source de gros problèmes, qui eux ont un vrai coût concret, contrairement à la vague possibilité que les clients violent le copyright et le contrat d'utilisation de l'application et qu'une réparation ne puisse pas être exigée en conséquence.
    Je dis les choses comme elles sont, pour protéger tes intérêts et ton retour sur investissement, à toi et à tes employeurs/sponsors/je ne sais quoi. Les mécanismes de protection anti-décompilation sont souvent, et en Java toujours, des escroqueries visant à facturer plus cher un produit de qualité égale ou moindre. Tu me crois ou tu ne me crois pas, peu m'importe, mais je pense que tu as plus besoin de ces explications que d'être encouragé à t'entêter.


    Quant aux désobfuscateurs, il y en a bien plus d'un par obfuscateur, mais ils ne servent qu'à guider le travail, ils ne peuvent pas rétablir les choses comme avant.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Je plussoie ce qui a pu être dit avant: compiler n'a pas pour but d'obfusquer.
    Néanmoins si on veut protéger son code (pour diverses raisons, pas seulement le copyright) ça reste une manière relativement efficace.

    A noter qu'une autre méthode un peu plus radicale est de compiler le programme Java en code natif, avec GCJ par exemple (il existe des solutions payantes qui seraient mieux abouties, paraît-il). Mais ça reste à prendre avec des pincettes et à tester au cas pas cas:

    - non seulement ça ôte de fait la portabilité du programme (un des atouts de Java) car il faudra compiler pour chaque plateforme cible.

    - mais j'ai déjà entendu dire ça et là que GCJ n'était pas parfait et qu'un test approfondi du programme après compilation en code natif s'avérait plus que prudente.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    Ca dépend du logiciel aussi, il faut connaitre le contexte avant de dire si c'est une erreur d'obfusquer. J'ai travaillé chez un éditeur qui obfusquait la partie algorithmique, la ou l'"intelligence" et le plus par rapport aux concurrents se trouvait, c'est pas complétement débile, surtout quand c'est vendu à des pays où le copyright est pas forcément respecté.

    Donc voila, si le programme est révolutionnaire, pourquoi pas obfusquer, sinon c'est vrai que c'est pas mal d'embetements.

  12. #12
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    La compilation en natif n'est certainement pas plus sécurisée... Il est actuellement possible de décompiler des applications natives sans trop de souci. Et si ce n'est pas de la décompilation, c'est au moins du tracing, ce qui est similaire, puisqu'on lance l'application et les instructions natives lancées sont affichées.

    Et rien ne tient vraiment la route pour ceux qui veulent arriver à leurs buts : des logiciels comme SecuROM sont si pas crackés, contournés...

  13. #13
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    précisons aussi que, quand tu compile, les noms des variable locales et champs privés sont déjà supprimés du code compilé (car inutiles), sauf si tu a compilé en ajoutant ces informations de debug (-g:vars dans la ligne de commande javac). Le code décompilé sera donc déjà gorgé de variables appelées a, b, c, d .....

    Sache qu'un IDE incluera souvent un max d'infos de debuggage (après tout ca sert à développer un IDE, pas a faire une release). Dans la pluspart des cas, le code obfusqué restera compréhensible, suffit de lire le code et au fur et à mesure (avec du refactoring dans un IDE par exemple) donner un nom aux méthodes qu'on comprend, en commencant pas les plus simple). Ce sera juste un peu plus long

  14. #14
    Expert éminent sénior
    Avatar de Baptiste Wicht
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    7 431
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Suisse

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 7 431
    Points : 21 324
    Points
    21 324
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    Je plussoie ce qui a pu être dit avant: compiler n'a pas pour but d'obfusquer.
    Néanmoins si on veut protéger son code (pour diverses raisons, pas seulement le copyright) ça reste une manière relativement efficace.

    A noter qu'une autre méthode un peu plus radicale est de compiler le programme Java en code natif, avec GCJ par exemple (il existe des solutions payantes qui seraient mieux abouties, paraît-il). Mais ça reste à prendre avec des pincettes et à tester au cas pas cas:

    - non seulement ça ôte de fait la portabilité du programme (un des atouts de Java) car il faudra compiler pour chaque plateforme cible.

    - mais j'ai déjà entendu dire ça et là que GCJ n'était pas parfait et qu'un test approfondi du programme après compilation en code natif s'avérait plus que prudente.
    En payant, il existe JET qui est beaucoup plus puissant que GCJ mais il est très cher. Il supporte Swing et Java 6 au contraire de GCJ qui est bloqué à la version 1.4 de Java et qui supporte assez mal Swing.

  15. #15
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Points : 2 161
    Points
    2 161
    Par défaut
    Citation Envoyé par dingoth Voir le message
    La compilation en natif n'est certainement pas plus sécurisée...
    Je n'ai jamais dit que le natif était 100% indécompilable ; simplement qu'un programme Java compilé en natif est encore plus dur à décompiler qu'un programme en bytecode obfusqué.

    Reste qu'entre les deux, il y a quand même une bonne différence, de la même façon qu'un programme en C compilé est bien plus ardu à décompiler qu'un programme en bytecode Java :

    - dans un cas (obfuscation) on se retrouve avec un code Java qui a simplement perdu les noms de fonctions/variables/classes/etc... mais qui garde par exemple en clair les appels à toutes les méthodes de l'API standard, genre java.io.File() restera java.io.File

    - dans l'autre cas (compilation en natif), si je ne m'abuse, on se retrouve avec au mieux du code assembleur.
    Mon projet du moment: BounceBox, un jeu multijoueurs sur Freebox, sur PC et depuis peu sur smartphone/tablette Android.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    155
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 155
    Points : 45
    Points
    45
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Protéger l'appli est le travail du copyright, pas de la compilation.

    Je comprends qu'on puisse n'avoir aucun intérêt pour l'open source, raison pour laquelle je ne cherche pas à pointer les nombreux avantages à fournir le code source avec l'appli.
    Mais l'obfuscation, et toute autre méthode d'empêcher la tentative de décompilation, est source de gros problèmes, qui eux ont un vrai coût concret, contrairement à la vague possibilité que les clients violent le copyright et le contrat d'utilisation de l'application et qu'une réparation ne puisse pas être exigée en conséquence.
    Je dis les choses comme elles sont, pour protéger tes intérêts et ton retour sur investissement, à toi et à tes employeurs/sponsors/je ne sais quoi. Les mécanismes de protection anti-décompilation sont souvent, et en Java toujours, des escroqueries visant à facturer plus cher un produit de qualité égale ou moindre. Tu me crois ou tu ne me crois pas, peu m'importe, mais je pense que tu as plus besoin de ces explications que d'être encouragé à t'entêter.


    Quant aux désobfuscateurs, il y en a bien plus d'un par obfuscateur, mais ils ne servent qu'à guider le travail, ils ne peuvent pas rétablir les choses comme avant.
    Merci à tous pour vos réponses
    comment on fait un copyright ? Il faut contacter un organisme ? cela a un cout je suppose, non ?

  17. #17
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Points : 1 419
    Points
    1 419
    Par défaut
    Citation Envoyé par nouknouk Voir le message
    - dans l'autre cas (compilation en natif), si je ne m'abuse, on se retrouve avec au mieux du code assembleur.
    J'ai vu il y a déjà 5 ans une démonstration d'un outil qui recréait du code c basique (le c de k&r) à partir de l'exécution d'un programme.

    Citation Envoyé par _LittleFlea_ Voir le message
    Merci à tous pour vos réponses
    comment on fait un copyright ? Il faut contacter un organisme ? cela a un cout je suppose, non ?
    Faire un copyright est très facile : "(c) copyright 2009 - COMPAGNIE" suffit.

    Après, en cas de conflit, il te suffit de prouver que ton code était là avant (c'est un autre avantage d'utiliser des systèmes de versionnement).

  18. #18
    Expert éminent sénior
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Points : 48 807
    Points
    48 807
    Par défaut
    Citation Envoyé par _LittleFlea_ Voir le message
    Merci à tous pour vos réponses
    comment on fait un copyright ? Il faut contacter un organisme ? cela a un cout je suppose, non ?
    Le copyright est un droit international. Il est lié à toute oeuvre de l'esprit (donc au codes des logiciels) et t'a rien de particulier à faire pour le préserver (mis à part bien indiquer que ce programme est à toi, et que donc tu en est le détenteur des droits). Par défaut, tu conserve tous les droits sur ton oeuvre, a moins d'explicitement en transférer à un tiers (via les termes d'une licence par exemple). T'a rien à faire de particulier. Tout ce qu'il faudra payer, c'est les avocats le jour ou tu voudra intenter un procès pour violation du copyright

  19. #19
    Invité
    Invité(e)
    Par défaut
    L'obfuscation, c'est juste des batons dans les roues.
    Si la JVM arrive à comprendre ton code obfuscé,
    qu'est ce qui empêche quelqu'un de l'interpréter ?

    Une autre piste à suivre d'après moi : Internet
    La majorité des sites web que l'on utilise sont "fermés", et cela définitivement.
    Leur code source et/ou code compilé se trouve côté serveur, et donc quasiment inviolable.
    Tout ce que reçoit le client, c'est le côté "présentation".

    Je ne sais pas si ça peut être utile dans ton cas, mais pour moi, c'est la seule chose "sûre" si tu veux masquer une partie ou totalité de ton code aux utilisateurs.

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    138
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 138
    Points : 172
    Points
    172
    Par défaut
    un programme informatique où les méthodes ont des noms aléatoires, ainsi que les classes est incompréhensible.

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 1
    Dernier message: 17/12/2013, 10h31
  2. Réponses: 1
    Dernier message: 01/05/2010, 17h21
  3. Problème mémoire d'execution d'une appli java en commande shell
    Par Djinner² dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 22/07/2008, 17h34
  4. Comment utiliser une classe Java dans une appli PB ?
    Par bobychezA56 dans le forum Powerbuilder
    Réponses: 0
    Dernier message: 09/04/2008, 18h07
  5. Réponses: 4
    Dernier message: 30/07/2007, 18h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo