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?

Xinus
la source
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.

BalusC
la source
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.

Thorbjørn Ravn Andersen
la source
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.

Dmitry Leskov
la source
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.

andrew0007
la source
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
10

J'ai utilisé Allatori et il a plutôt bien fait son travail.

la perte
la source
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.

Daniel Dolz
la source
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.

Anoop
la source
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

Renato
la source
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