Quest-ce quun bon décompilateur et désobfuscateur Java?

Jutilise JD-GUI pour décompiler les fichiers JAR Java, mais le problème est quil 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 toujours (si jai corrigé les erreurs correctement).

Jai aussi essayé Fernflower, mais cela laisse vide classes sil manque une dépendance.

Jaimerais savoir quel décompilateur:

  • donne le moins derreurs
  • désobfusque le la plupart.

Commentaires

  • Juste curieux, quelles fonctionnalités attendez-vous dun déobfuscateur? En plus de renommer les variables manuellement, je ne ‘ aucun moyen de désobfusquer du code.

Réponse

Mes excuses pour la réponse tardive.
Jai travaillé sur un nouveau décompilateur Java open source. Nhésitez pas à le vérifier.
Je ne lai testé avec aucun code obscurci, mais je lai vu décompiler de nombreuses méthodes que JD-GUI na pas réussi à gérer. Notez que cest « un travail en cours, et je » suis sûr que vous trouverez beaucoup de code quil ne parviendra pas à décompiler.

Commentaires

  • Tout dabord, son décompilateur est Procyon que vous voyez dans dautres réponses. Deuxièmement, bien que je rechigne habituellement,  » Regardez ma bibliothèque qui fait ça!  » répond, ce serait une erreur ici. Le ‘ s readme auquel il renvoie, ci-dessus, vaut la peine dêtre lu de près. Cela aurait été une réponse géniale en elle-même, mais cest certainement un peu trop long pour SE.
  • +10000 Cest vraiment un excellent travail et il vient de décompiler une classe que jai passée heures à essayer de reconstruire après que JD-GUI nen ait eu que la moitié.
  • Même si je déteste personnellement les +1 commentaires, je ‘ dois dire que vous ‘ avez un bon projet qui ma aidé dans une situation difficile. Continuez comme ça!
  • @Signus Merci, je ‘ je suis heureux que mon travail vous ait été utile :).
  • @DavidGomes Ah, BitBucket a finalement tenu sa promesse de supprimer les dépôts Mercurial. Corrigé.

Réponse

Entrées anciennes et manquantes

JAD Il y a quelque temps, le décompilateur de le choix é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 Également un outil plus ancien de fileoffset.com, mais qui fonctionne toujours plus ou moins. Linterface est plutôt compliquée à utiliser pour les projets plus importants, mais loutil 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 na pas été mis à jour depuis un certain temps.

AndroChef Outil propriétaire pour décompiler les programmes Android et Fichiers Java, disponibles ici . Cela ne vaut pas la peine étant donné les alternatives, tout comme DJ Decompiler .

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


Outils modernes

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

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

Cest un outil en ligne de commande. Celui-ci est capable dafficher les paramètres Unicode avec leur nom complet.

Téléchargez ici. Cest un outil de ligne de commande. Celui-ci est capable dafficher les paramètres Unicode avec leur nom complet.
Notez quil est aussi 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 commutateur Java 12, les lambdas Java 8 (avant et après les modifications de Java beta 103), les commutateurs Java 7 String, etc., bien quil soit lui-même écrit en Java 6.

Aussi 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 les fonctionnalités de 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 danalyse et de transformation dapplications Java et Android, développé à lorigine par le Sable Research Group de lUniversité McGill. Il nest pas très couramment utilisé « simplement » comme décompilateur, car il définit également un langage de code doctet intermédiaire.

Recaf

Un éditeur de bytecode Java et un outil de rétro-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 dafficher 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 dutilisation, 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 extraire les classes des processus Java en cours dexécution.

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

Visionneuse de bytecode de Konloch

Une visionneuse de bytecode Java légère avancée, un décompilateur Java GUI, un éditeur de bytecode GUI, une interface graphique 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, Visionneuse hexadécimale, recherche de code, débogueur et plus.

Écrit entièrement en Java, et il 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

Cest amusant de notez que beaucoup defforts dans les décompilateurs et désobfuscateurs pour Java sont le résultat de la scène de modding autour de Minecraft, lun des jeux les plus populaires implémentés en Java.

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

Commentaires

  • Cette réponse peut avoir besoin dêtre mis à jour. Il semble que JD-Gui soit activement développé depuis mars 2019. java-decompiler.github.io
  • Jai du java 7 code pour lequel je ‘ essaie décrire certains aspects. Le décompilateur intellij intégré dans certains cas a 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.

Réponse

Je ne peux pas dire lequel de ceux-ci est le meilleur, mais il existe quelques décompilateurs java, comme indiqué par ce Question SO . Aucun de ces décompilateurs ne semble tenter de gérer activement lobfuscation et beaucoup de ces projets sont abandonnés.

Je nai pas essayé Krakatau , mais il semble que cela puisse vous aider avec ce que vous recherchez.

  • Daprès le fichier readme: » Le décompilateur de Krakatau adopte une approche différente pour la plupart des décompilateurs Java. Il peut être davantage considéré comme un compilateur dont le langage dentrée est le bytecode Java et dont le langage cible se trouve être le code source Java. Krakatau prend un bytecode arbitraire et tente de le transformer en code Java équivalent. Cela le rend robuste à lobscurcissement mineur, bien quil présente linconvénient de ne pas reconstruire la source « originale », ce qui conduit à une sortie moins lisible quun décompilateur de correspondance de modèle produirait pour des classes Java non dissimulées. « 
  • Cest ouvert source et semble être activement (au moment décrire ces lignes) maintenue.

Commentaires

  • Cest en fait la sortie du désassembleur. Le décompilateur se décompile en sortie Java. (PSJe ‘ suis le développeur)
  • JD-GUI est lun des meilleurs décompilateurs Java pour le 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 proviennent de rune-server.org ou de moparscape.org/ smf ou moparisthebest.org/smf ce sont des communautés de piratage pour Runescape Game qui est entièrement écrit en Java et hautement obscurci.

Réponse

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

Commentaires

  • Cétait une très bonne suggestion – merci, bien mieux que dutiliser simplement le cli de fougère!

Réponse

Tout dabord, il y a un correctif pour un problème de Fernflower avec des classes manquantes ici . Vous pouvez dire merci à agaricusb pour cela.

Pour linstant, Fernflower reste le meilleur décompilateur Java même Il na pas été maintenu ces dernières années. Jai essayé de joindre lauteur récemment, mais toujours pas de chance.

Quant à AndroChef Java Decompiler, il utilise Fernflower comme moteur avec la permission de lauteur. Toujours pas sûr sil utilise patché / modifié ou Cest juste une interface graphique.

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

Commentaires

  • Votre application est-elle  » natif  » Java, ou a-t-il été converti à partir du format Android? Si cétait le cas, je serais très intéressé à mettre la main sur vos binaires pour voir où Procyon se décompose par rapport à Fernflower.
  • @MikeStrobel It ‘ s  » Application Java native « . Il est ‘ à usage interne uniquement, donc je ne peux ‘ pas le partager de toute façon.
  • toute chance que vous pourriez laisser tomber moi un e-mail décrivant quels types de problèmes vous avez rencontrés? Je suis toujours impatient dentendre comment Procyon pourrait être amélioré. Mes coordonnées se trouvent sur le site BitBucket du projet ‘.
  • @MikeStrobel merci pour lintérêt. Je ‘ vais essayer de vous fournir des informations détaillées et des exemples de classes, mais pas de promesses.

Réponse

Jutilise https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Cest le décompilateur dIntelliJ, il décompile les codes où JD-GUI échoue.

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

Réponse

Je voudrais vous recommander AndroChef Java Decompiler AndroChef Java Decompiler décompile avec succès les fichiers .class et .jar Java 6 et Java 7.

Commentaires

  • FAITES ATTENTION AVEC ANDROCHEF! AndroChef nest quun wrapper pour le décompilateur de fleurs de fougère abandonné, ‘ ne gaspillez pas votre argent avec!

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *