Wat is een goede Java-decompiler en deobfuscator?

Ik gebruik JD-GUI om Java JAR-bestanden te decompileren, maar het probleem is dat het veel fouten achterlaat, zoals dubbele variabelen die ik zelf moet repareren en controleren of het programma nog werkt (of ik de fouten correct heb opgelost).

Ik heb ook Fernflower geprobeerd, maar dat blijft blanco klassen als er een afhankelijkheid ontbreekt.

Ik zou graag willen weten welke decompiler:

  • geeft het minste aantal fouten
  • verduidelijkt de de meeste.

Reacties

  • Gewoon nieuwsgierig, welke functies verwacht je dat een deobfuscator zal bieden? Afgezien van het handmatig hernoemen van de variabelen, zie ik ‘ geen manier om bepaalde code daadwerkelijk te verduidelijken.

Antwoord

Mijn excuses voor het late antwoord.
Ik heb gewerkt aan een nieuwe, open source Java decompiler . Voel je vrij om het te bekijken.
Ik heb het niet getest met enige versluierde code, maar ik heb gezien dat het veel methoden decompileert die JD-GUI niet aankon. Merk op dat het “een werk in uitvoering is, en ik” weet zeker dat je veel code zult vinden die niet kan worden gedecompileerd.

Reacties

  • Ten eerste is zijn decompiler Procyon die je in andere antwoorden ziet. Ten tweede, hoewel ik er meestal tegen sta, ” Kijk naar mijn bibliotheek die dit doet! ” antwoorden, dat zou hier een vergissing zijn. Strobel ‘ s readme waarnaar hij linkt, hierboven, is het lezen waard. Het zou zelf een geweldig antwoord zijn geweest, maar het is waarschijnlijk iets te lang voor SE.
  • +10000 Dit is echt geweldig werk en het heeft zojuist een les gedecompileerd die ik heb besteed uren proberen te reconstrueren nadat JD-GUI er maar de helft van had gekregen.
  • Hoewel ik persoonlijk een hekel heb aan de +1 opmerkingen, moet ik ‘ zeggen dat je ‘ heb een goed project dat me op een krappe plek heeft geholpen. Ga zo door!
  • @Signus Bedankt, ik ‘ ben blij dat mijn werk nuttig voor je is gebleken :).
  • @DavidGomes Ah, BitBucket kwam eindelijk hun belofte na om Mercurial-repos te verwijderen. Opgelost.

Antwoord

Oude en ontbrekende vermeldingen

JAD Enige tijd geleden was iedereen decompiler van keuze was jad. Momenteel is het project dood (bovendien was het geen open source), maar je ziet nog steeds veel mensen ernaar verwijzen.

Java DeObfuscator Ook een oudere tool van fileoffset.com, maar werkt nog steeds min of meer. De interface is nogal onhandig om te gebruiken voor grotere projecten, maar de tool is open source .

JODE JODE is een Java-pakket met een decompiler en een optimizer voor Java. Dit pakket is gratis beschikbaar onder de GNU GPL. Het is al geruime tijd niet bijgewerkt.

AndroChef Eigen tool om Android-programmas te decompileren en Java-bestanden, hier beschikbaar. Het geld niet waard gezien de alternatieven, net als DJ Decompiler .

Candle Een open source decompiler door Brad Davis. Ik noem het voor de volledigheid, maar het is nog lang niet dat de functie compleet is.


Moderne tools

JD-Gui Waarschijnlijk een van de meest gebruikte tools voor Java decompilatie, omdat het gemakkelijk te gebruiken is en een grafische gebruikersinterface biedt waarmee u snel een klassebestand of JAR kunt openen en inspecteren. U vindt het hier .

FernFlower Zeer nieuwe en veelbelovende analytische Java-decompiler (wordt een integraal onderdeel van IntelliJ 14).

Het is een opdrachtregelprogramma. Deze kan de Unicode-parameters met hun volledige naam weergeven.

Download vanaf hier. Het is een opdrachtregelprogramma. Deze is in staat om de Unicode-parameters met hun volledige naam te tonen.
Merk op dat het ook al standaard geïntegreerd is in IntelliJ.

CFR

Gratis en open source . Deze is bedoeld om moderne Java-functies te decompileren , inclusief Java 12 switch-expressies, Java 8 lambdas (pre en post Java beta 103 wijzigingen), Java 7 String switches etc., maar is zelf geschreven in Java 6.

Ook een command line tool.Deze doet het nog beter en is iets sneller.

Procyon

Open source , en wil ook omgaan met Java 8-functies (lambdas, :: operator). Heeft Java 7 nodig om te kunnen draaien.

Krakatau Krakatau is interessant omdat het in Python is geschreven. Het bevat momenteel drie tools: een decompiler en disassembler voor Java-klassebestanden en een assembler om klassebestanden te maken.

Ondersteunt nog geen Java 8-functies.

Soot

Soot is een raamwerk voor het analyseren en transformeren van Java- en Android-applicaties, oorspronkelijk ontwikkeld door de Sable Research Group van McGill University. Het wordt niet vaak “alleen” als decompiler gebruikt, aangezien het ook een codetaal voor tussenliggende bytes definieert.

Recaf

Een Java Bytecode-editor en reverse engineering-tool die bedoeld is om intuïtief te gebruiken. Het kan bytecode presenteren via meerdere decompilers (CFR, FernFlower, Procyon) of in een tabellay-out om klasse-elementen weer te geven die niet te ontcijferen zijn in standaard decompilers. Recaf gebruikt contextgevoelige menus om te communiceren met klassen, methoden en velden, zodat gebruikers kunnen zoeken naar gebruiksgevallen, items kunnen hernoemen en definities kunnen bewerken in een gedemonteerde indeling.

Het ondersteunt potten, oorlogen, klassen, en het extraheren van klassen uit actieve Java-processen.

Het is volledig geschreven in Java en is volledig open source .

Konlochs Bytecode Viewer

Een geavanceerde lichtgewicht Java Bytecode Viewer, GUI Java Decompiler, GUI Bytecode Editor, 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 en meer.

Volledig geschreven in Java, en het is open source .

Het gebruikt FernFlower, Procyon en CFR voor decompilatie, waardoor dit een geweldig visueel hulpmiddel met behulp van ultramoderne decompilers:

Enigma

Een tool die specifiek bedoeld is voor verduidelijking :

Oorspronkelijk gebruikt om Minecraft-versies te verduidelijken. Gebruikt Procyon intern.

Een meer up-to-date vork is hier te vinden

Het is leuk om merk op dat veel moeite in decompilers en de-obfuscators voor Java het resultaat is van de modding-scene rond Minecraft, een van de meest populaire games geïmplementeerd in Java.

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

Reacties

  • Dit antwoord moet mogelijk worden bijgewerkt. Het lijkt erop dat JD-Gui actief wordt ontwikkeld vanaf maart 2019. java-decompiler.github.io
  • Ik heb wat java 7 code waarvoor ik ‘ m probeer een aantal aspecten te schrijven. De ingebouwde intellij decompiler heeft in sommige gevallen onjuiste variabelenamen en kan codeblokken weglaten. JD-Gui toont die blokken en toont ook wat meer nauwkeurige variabelenamen lijken te zijn. Het toont ook zij aan zij de verschillen tussen een oude versie en een nieuwe versie van JD-Gui. Het ‘ is de moeite waard om naar te kijken als je ‘ serieus achteruitrijdt.

Answer

Ik kan “niet zeggen welke van deze de beste is, maar er zijn een paar Java-decompilers beschikbaar, zoals aangegeven door deze DUS vraag . Geen van deze decompilers lijkt echter actief om te gaan met verduistering en veel van die projecten worden verlaten.

Ik heb Krakatau , maar het klinkt alsof het kan helpen bij wat je zoekt.

  • Uit het leesmij-bestand:” De Krakatau-decompiler heeft een andere benadering van de meeste Java-decompilers. Het kan meer worden gezien als een compiler waarvan de invoertaal Java-bytecode is en waarvan de doeltaal de Java-broncode is. Krakatau neemt een willekeurige bytecode over en probeert deze om te zetten in gelijkwaardige Java-code. Dit maakt het robuust voor kleine versluiering, hoewel het het nadeel heeft dat het de “originele” bron niet reconstrueert, wat leidt tot minder leesbare uitvoer dan een decompiler voor patroonaanpassing zou produceren voor onversluierde Java-klassen. “
  • Dit is open broncode en lijkt actief (op het moment van schrijven) te worden onderhouden.

Reacties

  • Dat is eigenlijk de output van de disassembler. De decompiler decompileert naar Java-uitvoer. (PSI ‘ m de ontwikkelaar)
  • JD-GUI is een van de beste Java-decompilers op dit moment, maar het moet worden gebruikt in combinatie met deobfuscators op de Bytecode voordat de code wordt gedecompileerd. De beste deobfuscators voor java die ik ken, zijn afkomstig van rune-server.org of moparscape.org/ smf of moparisthebest.org/smf dat zijn hackcommunitys voor Runescape Game, dat volledig in Java is geschreven en zeer onduidelijk is.

Antwoord

Kijk eens naar Bytecode Viewer https://github.com/Konloch/bytecode-viewer Het heeft de optie om te decompileren met 5 verschillende decompilers:

  • FernFlower
  • Procyon
  • CFR
  • Krakatau
  • JD-GUI

Reacties

  • Dit was echt een goede suggestie – bedankt, veel beter dan alleen de fernflower cli te gebruiken!

Antwoord

Allereerst is er een oplossing voor Fernflower-probleem met ontbrekende klassen hier . Je kunt agaricusb hiervoor bedanken.

Voorlopig blijft Fernflower de beste Java-decompiler, zelfs al werd het de afgelopen jaren niet onderhouden. Ik heb onlangs geprobeerd de auteur te bereiken, maar nog steeds geen geluk.

Wat betreft AndroChef Java Decompiler, het gebruikt Fernflower als engine met toestemming van de auteur. Ik weet nog steeds niet zeker of het gepatcht / gewijzigd gebruikt versie of het is maar een GUI.

Procyon decompiler ontwikkeld door @ mike-strobel lijkt goed te zijn, maar Fernflower kreeg nog steeds een ENORM voordeel en was in staat om ongeveer 95% van mijn applicatie te decompileren (~ 3000 klassen) terwijl procyon slechts 60% aankon (gecontroleerd in januari 2014).

Reacties

  • Is uw applicatie ” native ” Java, of is het geconverteerd vanuit Android-indeling? Als het eerste het geval is, zou ik heel graag uw binaire bestanden willen bemachtigen om te zien waar Procyon het begeeft in vergelijking met Fernflower.
  • @MikeStrobel It ‘ s ” native ” Java-applicatie. Het ‘ is alleen voor intern gebruik, dus ik kan het ‘ toch niet delen.
  • elke kans die je zou kunnen laten vallen mij een e-mail waarin wordt beschreven wat voor soort problemen je tegenkwam? Ik ben altijd benieuwd hoe Procyon kan worden verbeterd. Mijn contactinformatie betreft de ‘ s BitBucket-site.
  • @MikeStrobel bedankt voor de interesse. Ik ‘ zal proberen je uitgebreide informatie en voorbeeldlessen te geven, maar ik beloof het niet.

Antwoord

Ik “gebruik https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Het is de decompiler van IntelliJ, het decompileert codes waar JD-GUI faalt.

Het is “een onofficiële mirror om te downloaden: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Antwoord

Ik zou je willen aanbevelen AndroChef Java Decompiler AndroChef Java Decompiler decompileert met succes versluierde Java 6 en Java 7 .class- en .jar-bestanden.

Reacties

  • LET OP MET ANDROCHEF! AndroChef is slechts een wrapper voor de verlaten fernflower decompiler, niet ‘ verspil je geld ermee!

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *