L'exemple spécifique que j'ai en tête concerne le jeu actuellement alpha, Minecraft, mais c'est une question générale qui, je pense, mérite une conversation.
Minecraft est écrit en Java, et les traces de pile ressemblent généralement à ceci (exemple réel):
java.lang.NullPointerException
at d.a(SourceFile:247)
at gi.b(SourceFile:92)
at bd.a(SourceFile:33)
at bn.a(SourceFile:69)
at bn.e(SourceFile:115)
at bn.d(SourceFile:103)
at net.minecraft.client.Minecraft.i(SourceFile:1007)
at net.minecraft.client.Minecraft.run(SourceFile:596)
at java.lang.Thread.run(Unknown Source)
Évidemment, ce ne sont pas les vrais noms de package et de méthode que le développeur utilise lorsqu'il écrit. Puisqu'il est en phase alpha, il semble que le développeur souhaite pouvoir comprendre les traces de sa pile, surtout si quelqu'un est en mesure d'en fournir une pour un rapport de bogue. Dans l'état actuel des choses, cela n'a pratiquement aucun sens.
Quel avantage pourrait-on espérer gagner en obscurcissant son code comme celui-ci qui surmonte les inconvénients d'une identification de bogue plus difficile?
la source
Réponses:
Nous obscurcissons également notre code Java ....
L'avantage est qu'il est plus difficile de procéder à une rétro-ingénierie (si vous craignez que quelqu'un vole votre base de code et l'utilise comme base pour créer un produit concurrent similaire, par exemple, etc.).
Vous pouvez récupérer la trace de pile d'origine: il existe des outils d'obscurcissement qui créent des fichiers de référence spéciaux que vous pouvez utiliser pour exécuter les traces de pile obscurcies, et il sort avec la trace de pile source d'origine. Ceux-ci sont générés par le processus d'obscurcissement lui-même, vous ne pouvez donc pas récupérer la trace de pile d'origine à moins que vous n'ayez les mains sur le fichier de référence que vous avez utilisé pour obscurcir le code en premier lieu.
Cela n'a vraiment aucun inconvénient. :)
la source
La plupart des obscurcisseurs optimisent également votre code , suppriment les métadonnées inutiles ou le code non utilisé, la compression, l'élimination du code mort ou l'élimination des doublons.
la source