Question:
Qu'est-ce qu'un bon décompilateur et désobfuscateur Java?
user56
2013-03-29 20:44:07 UTC
view on stackexchange narkive permalink

J'utilise JD-GUI pour décompiler les fichiers Java JAR, mais le problème est qu'il laisse de nombreuses erreurs, telles que des variables en double que je dois réparer moi-même et vérifier si le programme fonctionne (si j'ai corrigé les erreurs correctement).

J'ai aussi essayé Fernflower, mais cela laisse des classes vides s'il manque une dépendance.

J'aimerais savoir quel décompilateur:

  • donne le moins d'erreurs
  • désobfusque le plus.
Curieux, quelles fonctionnalités attendez-vous d'un désobfuscateur? En dehors de renommer les variables manuellement, je ne vois aucun moyen de désobfusquer du code.
Sept réponses:
#1
+33
Mike Strobel
2013-05-30 19:26:11 UTC
view on stackexchange narkive permalink

Mes excuses pour la réponse tardive.
J'ai travaillé sur un nouveau décompilateur Java open source. N'hésitez pas à le vérifier.
Je ne l'ai testé avec aucun code obscurci, mais je l'ai vu décompiler de nombreuses méthodes que JD-GUI n'a pas réussi à gérer. Notez que c'est un travail en cours, et je suis sûr que vous trouverez beaucoup de code qu'il ne parviendra pas à décompiler.

Premièrement, son décompilateur est Procyon que vous voyez dans d'autres réponses. Deuxièmement, bien que je rechigne d'habitude, "Regardez ma bibliothèque qui fait ça!" réponses, ce serait une erreur ici. Le [readme] de Strobel (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler) auquel il renvoie, ci-dessus, vaut la peine d'être lu de près. Cela aurait été une * excellente * réponse en elle-même, mais c'est sans doute un peu trop long pour SE.
+10000 C'est vraiment un excellent travail et il vient de décompiler une classe que j'ai passé des heures à essayer de reconstruire après que JD-GUI n'en ait eu que la moitié.
Même si je déteste personnellement les commentaires +1, je dois dire que vous avez un bon projet en cours qui m'a aidé dans une situation difficile. Continuez!
@Signus Merci, je suis heureux que mon travail vous ait été utile :).
#2
+14
Alexandre Dumont
2016-08-26 02:49:18 UTC
view on stackexchange narkive permalink

Entrées anciennes et manquantes

JAD Il y a quelque temps, le décompilateur de choix de tout le monde était jad. Actuellement, le projet est mort (en plus, il n'était pas open source), mais vous voyez quand même beaucoup de gens y faire référence.

Java DeObfuscator Aussi un outil plus ancien de fileoffset.com, mais fonctionne toujours plus ou moins. L'interface est plutôt compliquée à utiliser pour les projets plus importants, mais l'outil est open source.

JODE JODE est un package java contenant un décompilateur et un optimiseur pour Java. Ce paquet est disponible gratuitement sous la GNU GPL. Il n’a pas été mis à jour depuis un certain temps.

AndroChef Outil propriétaire pour décompiler les programmes Android et les fichiers Java, disponible ici. Cela ne vaut pas l'argent compte tenu des alternatives, tout comme DJ Decompiler.

Candle Un décompilateur open source de Brad Davis. Je le mentionne par souci d'exhaustivité, mais il est loin d'être complet.


Outils modernes

JD-Gui Probablement l'un des outils les plus largement utilisés pour la décompilation Java, car il est facile à utiliser et fournit une interface utilisateur graphique qui permet d'ouvrir et d'inspecter rapidement un fichier de classe ou JAR. Vous pouvez le trouver ici.

FernFlower Décompilateur Java analytique très nouveau et prometteur (devenant une partie intégrante d'IntelliJ 14).

C'est un outil de ligne de commande. Celui-ci est capable d'afficher les paramètres Unicode avec leur nom complet.

Téléchargez à partir d'ici. C'est un outil de ligne de commande. Celui-ci est capable d'afficher les paramètres Unicode avec leur nom complet.
Notez qu'il est également déjà intégré par défaut dans IntelliJ.

CFR

Gratuit et open source. Celui-ci vise à décompiler les fonctionnalités Java modernes, y compris les expressions de commutation Java 12, les lambdas Java 8 (modifications pré et post Java beta 103), les commutateurs Java 7 String, etc.

Également un outil de ligne de commande. Celui-ci fait un travail encore meilleur et est légèrement plus rapide.

Procyon

Open source, et vise également à traiter Fonctionnalités Java 8 (lambdas, :: opérateur). Nécessite Java 7 pour fonctionner.

Krakatau Krakatau est intéressant car il a été écrit en Python. Il contient actuellement trois outils: un décompilateur et désassembleur pour les fichiers de classe Java et un assembleur pour créer des fichiers de classe.

Ne prend pas encore en charge les fonctionnalités de Java 8.

Soot

Soot est un cadre d'analyse et de transformation d'applications Java et Android, développé à l'origine par le Sable Research Group de l'Université McGill. Il n'est pas très couramment utilisé "juste" comme décompilateur, car il définit également un langage de code d'octet intermédiaire.

Recaf

Un éditeur de bytecode Java et inversé outil d'ingénierie visant à être intuitif à utiliser. Il peut présenter du bytecode via plusieurs décompilateurs (CFR, FernFlower, Procyon) ou dans une mise en page de table pour permettre d'afficher des éléments de classe indéchiffrables dans les décompilateurs standard. Recaf utilise des menus contextuels pour interagir avec les classes, les méthodes et les champs, permettant aux utilisateurs de rechercher des cas d'utilisation, de renommer des éléments et de modifier des définitions dans un format désassemblé.

Il prend en charge les jars, les guerres, les classes, et l'extraction de classes à partir de processus Java en cours d'exécution.

Il est entièrement écrit en Java et est entièrement open source.

Konloch's Bytecode Viewer

Un visualiseur de bytecode Java léger avancé, un décompilateur GUI Java, un éditeur de bytecode GUI, GUI Smali, GUI Baksmali, GUI APK Editor, GUI Dex Editor, GUI APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger et plus.

Écrit entièrement en Java, et c'est open source.

Il utilise FernFlower, Procyon et CFR pour la décompilation, ce qui en fait un outil visuel génial utilisant des décompilateurs de pointe:

Enigma

Un outil spécialement conçu pour la désobfuscation:

Initialement utilisé pour désobfusquer les versions de Minecraft. Utilise Procyon en interne.

Un fork plus à jour peut être trouvé ici

C'est amusant de constater que beaucoup d'efforts dans les décompilateurs et de-obfuscators for Java est le résultat de la scène de modding autour de Minecraft, l'un des jeux les plus populaires implémentés en Java.

Source: http://blog.macuyiko.com /post/2015/a-quick-look-at-java-decompilers.html

Cette réponse devra peut-être être mise à jour. Il semble que JD-Gui soit activement développé à partir de mars 2019. https://java-decompiler.github.io/
J'ai du code java 7 pour lequel j'essaye d'écrire quelques aspects. Le décompilateur intellij intégré a dans certains cas des noms de variables incorrects et peut omettre des blocs de code. JD-Gui montre ces blocs et affiche également ce qui semble être des noms de variables plus précis. Il montre également côte à côte les différences entre une ancienne version et une nouvelle version de JD-Gui. Cela vaut la peine de regarder si vous faites une sérieuse inversion.
#3
+10
amccormack
2013-03-29 23:20:27 UTC
view on stackexchange narkive permalink

Je ne peux pas dire lequel de ceux-ci est le meilleur, mais il existe quelques décompilateurs java, comme indiqué par cette question SO. Cependant, aucun de ces décompilateurs ne semble tenter de gérer activement l’obscurcissement et nombre de ces projets sont abandonnés.

Je n’ai pas essayé Krakatau, mais il semble que cela puisse vous aider recherchent.

  • Extrait du readme: "Le décompilateur Krakatau adopte une approche différente de la plupart des décompilateurs Java. Il peut être davantage considéré comme un compilateur dont le langage d'entrée est le bytecode Java et dont le langage cible se produit être du code source Java. Krakatau prend un bytecode arbitraire et tente de le transformer en code Java équivalent. Cela le rend robuste à l'obscurcissement mineur, bien qu'il présente l'inconvénient de ne pas reconstruire la source "originale", ce qui conduit à une sortie moins lisible qu'un modèle le décompilateur correspondant produirait des classes Java non masquées. "
  • Ceci est open source et semble être activement (au moment de la rédaction de cet article) maintenu.
C'est en fait la sortie du désassembleur. Le décompilateur se décompile en sortie Java. (P.S. Je suis le développeur)
JD-GUI est l'un des meilleurs décompilateurs Java du moment, mais il doit être utilisé en conjonction avec des déobfuscateurs sur le Bytecode avant de décompiler le code. Les meilleurs deobfuscators pour java que je connaisse viennent de http://www.rune-server.org ou http://www.moparscape.org/smf ou http://www.moparisthebest.org/smf ceux qui piratent communautés pour Runescape Game qui est entièrement écrit en Java et hautement obscurci.
#4
+4
Konloch
2014-11-19 17:45:58 UTC
view on stackexchange narkive permalink

Essayez de jeter un œil à Bytecode Viewer https://github.com/Konloch/bytecode-viewer Il a la possibilité de décompiler en utilisant 5 décompilateurs différents:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI
#5
+3
Vladimir Protasov
2014-03-04 02:10:49 UTC
view on stackexchange narkive permalink

Tout d'abord, il existe un correctif pour le problème de Fernflower avec des classes manquantes ici. Vous pouvez dire merci à agaricusb pour cela.

Pour l'instant, Fernflower reste le meilleur décompilateur Java même Il n'a pas été maintenu ces dernières années. J'ai essayé de joindre l'auteur récemment, mais toujours pas de chance.

Quant à AndroChef Java Decompiler, il utilise Fernflower comme moteur avec l'autorisation de l'auteur. Je ne sais toujours pas s'il utilise une version corrigée / modifiée ou si c'est juste une interface graphique.

Le décompilateur Procyon développé par @ mike-strobel semble être bon, mais Fernflower a toujours un énorme avantage et a pu décompiler environ 95 % de ma candidature (~ 3000 classes) alors que procyon n'a pu gérer que 60% (vérifié en janvier 2014).

Votre application est-elle Java "native" ou a-t-elle été convertie au format Android? Si c'est le premier, je serais très intéressé à mettre la main sur vos binaires pour voir où Procyon se décompose par rapport à Fernflower.
@MikeStrobel C'est une application Java "native". C'est un usage interne uniquement, donc je ne peux pas la partager de toute façon.
une chance que vous puissiez me laisser un e-mail décrivant les types de problèmes que vous avez rencontrés? J'ai toujours hâte d'entendre comment Procyon pourrait être amélioré. Mes coordonnées se trouvent sur le site BitBucket du projet.
Merci @MikeStrobel pour l'intérêt, je vais essayer de vous fournir des informations étendues et des exemples de cours, mais pas de promesses.
#6
+3
David Kennedy
2018-06-29 20:24:15 UTC
view on stackexchange narkive permalink

J'utilise https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine C'est le décompilateur d'IntelliJ, il décompile les codes où JD -GUI échoue.

C'est un miroir non officiel à télécharger: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

#7
+1
Atanas
2013-10-27 16:15:14 UTC
view on stackexchange narkive permalink

Je voudrais vous recommander AndroChef Java Decompiler AndroChef Java Decompiler a réussi à décompiler les fichiers .class et .jar Java 6 et Java 7.

ATTENTION AVEC ANDROCHEF! AndroChef n'est qu'un wrapper pour le décompilateur de fougères abandonné, ne gaspillez pas votre argent avec!


Ce Q&R a été automatiquement traduit de la langue anglaise.Le contenu original est disponible sur stackexchange, que nous remercions pour la licence cc by-sa 3.0 sous laquelle il est distribué.
Loading...