Meilleur obfuscateur Java? [fermé]


107

Je développe un logiciel de sécurité et je souhaite masquer mon code java afin qu'il devienne impossible de faire de l'ingénierie inverse. Quel est l'obfuscateur Java le plus fiable?


10
@Xinus "devient impossible de faire de l'ingénierie inverse" - à peine, les meilleurs ont essayé et échoué
fourmi

212
J'ai eu des collègues qui ont créé du code très obscurci. Mais ce n'était pas leur intention.
Steve McLeod

7
It was once said that if you had an infinate amount of monkeys on typewiters and an infinate amount of time, they would write all of the great works of Shakespeare.- Dilbert
fourmi

7
Il est impossible d'éviter la rétro-ingénierie.
Mnementh

11
@Mnementh: il suffit de rendre l'ingénierie inverse d'un coût prohibitif pour votre application particulière.
Dmitry Leskov

Réponses:


99

Tout d'abord, vous devez vraiment garder à l'esprit qu'il n'est jamais impossible de rétroconcevoir quelque chose. Tout est piratable. Un développeur intelligent utilisant un IDE intelligent peut déjà aller assez loin.

Eh bien, vous pouvez trouver ici une liste. ProGuard est plutôt bon. Je l'ai utilisé moi-même, mais uniquement pour «réduire» le code Java.


1
@BalusC: Alors, quel outil utilisez-vous pour masquer le code java? vous obscurcissez votre code java, n'est-ce pas?
Thinhbk

@Thinhbk Obfuscation rend plus difficile l'obtention de traces de pile utiles.
Thorbjørn Ravn Andersen

@ ThorbjørnRavnAndersen: D'accord. OMI, l'obfuscation rendra les traces de pile presque inutiles. Dans ce cas, j'utilise une astuce avec le journal msg, qui peut aider.
Thinhbk

2
@Thinhbk Proguard génère une carte pour traduire les traces de pile obfues vers le code d'origine. Sinon, comme vous l'avez dit, les traces de pile deviendraient inutiles (mais qui obtient quand même des exceptions non interceptées ... ;-))
Matthieu

@Matthieu: Est-il possible de traduire automatiquement la trace de pile sauvegardée en code original? Ce serait génial et nouveau pour moi. Je sais juste que la traduction manuelle peut être difficile si la base de code est énorme.
Thinhbk

33

Si un ordinateur peut le faire fonctionner, un humain suffisamment motivé peut le faire de la rétro-ingénierie.


3
Combien de personnes peuvent lire du code obscurci et comprendre la logique? J'ai beaucoup d'amis ingénieurs et ils ne peuvent pas faire ça. Seul John Nash peut le faire;)
kodmanyagha

5
@kodmanyagha S'ils étaient suffisamment motivés, ils l'apprendraient. Ce n'est pas difficile.
Thorbjørn Ravn Andersen

1
Au sens mathématique, il est possible d'exécuter sans moyen de rétro-ingénierie. C'est ce qu'est le cryptage homomorphique, mais il y a pas mal d'obstacles à résoudre pour le rendre pratiquement utilisable sur un logiciel informatique par opposition au SaaS. Nous y avançons lentement. Les travaux séminaux de Gentry sur le cryptage entièrement homomorphe et les «puzzles mathématiques» par Amit Sahai et al. fait un grand pas en avant dans cette direction. Il y a juste un élément manquant (que j'appelle une "fonction de barrière") qui rendrait l'ensemble du schéma réalisable. Ce qui est impossible maintenant sera possible à l'avenir.
ogggre

30

Consultez mon article Protégez votre code Java - via des obfuscateurs et au-delà [archivé] pour une discussion sur l'obscurcissement par rapport à trois autres moyens de rendre la rétro-ingénierie de vos applications plus coûteuse, ainsi qu'une collection de liens vers des outils et d'autres documents de lecture.


1
C'est ce dont j'ai réellement besoin. Je veux écrire un obfuscator PHP pour mes projets. La logique est la même partout. Merci ...
kodmanyagha

1
Article sympa et complet sur l'obfuscation Java et la collection de logiciels.
m3nda

15

Je pense que Proguard est le meilleur. Il est également possible de l'intégrer à votre IDE (par exemple NetBeans). Cependant, sachez que si vous obscurcissez votre code, il peut être difficile de suivre les problèmes dans vos journaux.


6
+1 pour "considérez que si vous obscurcissez votre code, il pourrait être difficile de suivre les problèmes dans vos journaux". Juste au moment où vous pensiez que le débogage était assez difficile ...
Adam Paynter

7
Un bon obfuscateur qui change les noms et les informations de numéro de ligne devrait produire un journal avec lequel inverser le processus. De cette façon, au moins les traces de pile restent utiles pour les binaires obfusqués.
Joachim Sauer

3
ProGuard crée de tels fichiers inversés pour le débogage. :-)
Malax



7

Il est vrai qu'il est toujours possible de rétroconcevoir du code, tout comme il est impossible de protéger une maison afin que personne ne puisse jamais la voler. Cela ne m'empêche cependant pas de verrouiller la porte. En fait, je ne suis pas dans le monde java, j'utilise BitHelmet pour .net.


7
+1 pour vous ramener au filet 0. Cette réponse n'est pas inutile.
HaloWebMaster

6

J'avais l'habitude de travailler avec Klassmaster dans mon entreprise précédente et cela fonctionne très bien et peut s'intégrer assez bien avec les systèmes de construction (le support maven est excellent). Mais ce n'est pas gratuit.



6

Je ne sais pas avec certitude si la solution est sûre, mais à propos de la solution ClassGuard , il est intéressant de lire l'article et le commentaire sur: http://www.javaworld.com/community/?q=node/1604#comment -12296


Et une autre alternative qui utilise également le code natif au lieu de defineClass est JarCrypt
Renato

Un article expliquant comment cracker ClassGuard : setrst.blogspot.com/2010/04/classguard-unguarded.html . Je ne sais tout simplement pas si cela fonctionne toujours sur la dernière version.
Renato le
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.