Vad är en bra Java-dekompilator och deobfuscator?

Jag använder JD-GUI för att dekompilera Java JAR-filer, men problemet är att det lämnar många fel, till exempel duplicerade variabler som jag måste fixa själv och kontrollera om programmet fortfarande fungerar (om jag fixade felen korrekt).

Jag försökte också Fernflower, men det lämnar tomt klasser om det saknas ett beroende.

Jag vill veta vilken dekompilator:

  • ger minst antal fel
  • deobfuscates the mest.

Kommentarer

  • Bara nyfiken, vilka funktioner förväntar du dig att en deobfuscator kommer att erbjuda? Förutom att byta namn på variablerna manuellt, ser jag ’ inte något sätt att faktiskt avfusa någon kod.

Svar

Jag ber om ursäkt för det sena svaret.
Jag har arbetat med en ny, öppen källkod Java decompiler . Kolla gärna in det.
Jag har inte testat det mot någon fördunklad kod, men jag har sett det dekompilera många metoder som JD-GUI inte lyckades hantera. Observera att den pågår och jag är säker på att du hittar mycket kod som den inte kommer att dekompilera.

Kommentarer

  • Först är hans dekompilator Procyon som du ser i andra svar. För det andra, även om jag vanligtvis strävar efter, ” Titta på mitt bibliotek som gör detta! ” svarar, det skulle vara ett misstag här. Strobel ’ s readme som han länkar till ovan är värt att läsa igenom. Det skulle ha varit ett fantastiskt svar i sig, men det är visserligen förmodligen lite för långt för SE.
  • +10000 Detta är verkligen fantastiskt arbete och det dekompilerade bara en klass som jag tillbringade timmar med att försöka rekonstruera efter att JD-GUI bara hade fått hälften av det.
  • Även om jag personligen hatar +1-kommentarerna måste jag ’ säga det du ’ har fått ett bra projekt där som hjälpte mig på ett trångt ställe. Fortsätt!
  • @Signus Tack, jag ’ är glad att mitt arbete visade sig vara användbart för dig :).
  • @DavidGomes Ah, BitBucket nådde äntligen sitt löfte om att radera Mercurial repos. Fixat.

Svar

Gamla och saknade poster

JAD För en tid sedan är allas dekompilering av valet var jad. För närvarande är projektet dött (dessutom var det inte öppen källkod), men ändå ser du många människor som hänvisar till det.

Java DeObfuscator Också ett äldre verktyg från fileoffset.com, men fungerar fortfarande mer eller mindre. Gränssnittet är ganska klumpigt att använda för större projekt, men verktyget är öppen källkod .

JODE JODE är ett java-paket som innehåller en dekompilator och en optimizer för Java. Detta paket är fritt tillgängligt under GNU GPL. Det har inte uppdaterats på länge.

AndroChef Eget verktyg för att dekompilera Android-program och Java-filer, tillgängliga här . Inte värt pengarna med tanke på alternativen, precis som DJ Decompiler .

Ljus En dekompilator med öppen källkod av Brad Davis. Jag nämner det för fullständighet, men är långt ifrån att vara komplett.


Moderna verktyg

JD-Gui Förmodligen ett av de mest använda verktygen för Java-dekompilering, eftersom det är enkelt att använda och ger ett grafiskt användargränssnitt som gör det möjligt att snabbt öppna och inspektera en klassfil eller JAR. Du hittar den här .

FernFlower Mycket ny och lovande analytisk Java-dekompilator (blir en integrerad del av IntelliJ 14).

Det är ett kommandoradsverktyg. Den här kan visa Unicode-parametrarna med deras fullständiga namn.

Ladda ner härifrån. Det är ett kommandoradsverktyg. Den här kan visa Unicode-parametrarna med deras fullständiga namn.
Observera att det också redan är integrerat som standard i IntelliJ.

CFR

Gratis och öppen källkod . Den här syftar till att dekompilera moderna Java-funktioner , inklusive Java 12-switchuttryck, Java 8 lambdas (före och efter Java beta 103-ändringar), Java 7 Strängbrytare etc., men är i sig själv skrivet i Java 6.

Också ett kommandoradsverktyg.Den här gör ett ännu bättre jobb och är något snabbare.

Procyon

Öppen källkod och syftar också till att hantera Java 8-funktioner (lambdas, :: operator). Behöver Java 7 köras.

Krakatau Krakatau är intressant eftersom det har skrivits i Python. Den innehåller för närvarande tre verktyg: en dekompilator och disassembler för Java-klassfiler och en assembler för att skapa klassfiler.

Stöder ännu inte Java 8-funktioner.

Soot

Soot är ett ramverk för att analysera och omvandla Java- och Android-applikationer, ursprungligen utvecklade av Sable Research Group vid McGill University. Det används inte särskilt ”bara” som en dekompilator, eftersom det också definierar ett mellanliggande byte-kodspråk.

Recaf

En Java Bytecode-redigerare och verktyg för omvänd teknik som syftar till att vara intuitiv att använda. Den kan presentera bytkod genom flera dekompilatorer (CFR, FernFlower, Procyon) eller i en tabelllayout för att tillåta visning av klasselement som inte kan avkodas i standardavkompilatorer. Recaf använder kontextkänsliga menyer för att interagera med klasser, metoder och fält, så att användare kan söka efter användningsfall, byta namn på objekt och redigera definitioner i ett demonterat format.

Det stöder burkar, krig, klasser, och extraherar klasser från att köra Java-processer.

Den är skriven helt i Java och är helt öppen källkod .

Konlochs Bytecode Viewer

En avancerad lättvikts 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 och mer.

Skrivet helt i Java och det är öppen källkod .

Den använder FernFlower, Procyon och CFR för dekompilering, gör detta till en fantastiskt visuellt verktyg med avancerade dekompilatorer:

Enigma

Ett verktyg som är särskilt anpassat för deobfuscation :

Används ursprungligen för att avfuska Minecraft-versioner. Använder Procyon internt.

En mer uppdaterad gaffel hittar du här

Det är kul att notera att mycket ansträngning för dekompilatorer och avförväxlare för Java är resultatet av moddingscenen runt Minecraft, ett av de mest populära spelen som implementeras i Java.

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

Kommentarer

  • Detta svar kan behöva uppdateras. Det verkar som om JD-Gui utvecklas aktivt i mars 2019. java-decompiler.github.io
  • Jag har lite Java 7 kod som jag ’ försöker skriva några aspekter för. Den inbyggda intellij-dekompilatorn har i vissa fall felaktiga variabelnamn och kan utelämna kodblock. JD-Gui visar dessa block och visar också vad som verkar vara mer exakta variabelnamn. Det visar också skillnaderna mellan en gammal version och en ny version av JD-Gui sida vid sida. Det är ’ värt att titta på om du ’ gör en seriös reversering.

Svar

Jag kan inte prata med vilken av dessa som är bäst, men det finns några Java-dekompilatorer där ute som indikeras av denna SO fråga . Ingen av dessa dekompilatorer verkar dock försöka aktivt hantera fördunkling och många av dessa projekt överges.

Jag har inte försökt Krakatau , men det låter som om det kan hjälpa till med det du letar efter.

  • Från readme:” Krakatau-dekompilatorn tar en annan inställning till de flesta Java-dekompilatorer. Det kan ses mer som en kompilator vars ingångsspråk är Java bytecode och vars målspråk råkar vara Java-källkod. Krakatau tar in godtycklig bytkod och försöker omvandla den till motsvarande Java-kod. Detta gör den robust till mindre fördunkling, även om den har nackdelen att inte rekonstruera den ”ursprungliga” källan, vilket leder till mindre läsbar utdata än en mönstermatchande dekompilator skulle ge för obeflekterade Java-klasser. ”
  • Detta är öppet källa och verkar upprätthållas aktivt (när detta skrivs).

Kommentarer

  • Det är faktiskt utdata från demonteraren. Dekompilatorn dekompileras till Java-utdata. (PSJag ’ m utvecklaren)
  • JD-GUI är en av de bästa Java Decompilers för tillfället, men den måste användas tillsammans med deobfuscators på Bytkod innan du dekompilerar koden. De bästa deobfuscatorerna för java som jag känner till kommer från rune-server.org eller moparscape.org/ smf eller moparisthebest.org/smf de är hackingsamhällen för Runescape Game som är helt skrivet i Java och mycket fördunklat.

Svar

Försök ta en titt på Bytecode Viewer https://github.com/Konloch/bytecode-viewer Det har möjlighet att dekompilera med 5 olika dekompilatorer:

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

Kommentarer

  • Detta var ett riktigt bra förslag – tack, mycket bättre än att bara använda fernflower cli!

Svar

Först och främst finns det en fix för Fernflower-problem med saknade klasser här . Du kan säga tack till agaricusb för detta.

För närvarande är Fernflower fortfarande den bästa Java-dekompilatorn, även om den inte har underhållits de senaste åren. Jag har försökt nå författaren nyligen, men fortfarande ingen tur.

När det gäller AndroChef Java Decompiler använder den Fernflower som motor med författarens tillstånd. Fortfarande inte säker på om den använder lappad / modifierad version eller det är bara ett GUI.

Procyon-dekompilator utvecklad av @ mike-strobel verkar vara bra, men Fernflower fick fortfarande en ENORM fördel och kunde dekompilera ungefär 95% av min ansökan (~ 3000 klasser) medan procyon bara kunde hantera 60% (kontrolleras i januari 2014).

Kommentarer

  • Är din ansökan ” native ” Java, eller konverterades det från Android-format? Om den förra skulle jag vara väldigt intresserad av att få tag på dina binärer för att se var Procyon går sönder jämfört med Fernflower.
  • @MikeStrobel Det ’ s ” native ” Java-applikation. Det är ’ endast internt, så jag kan ’ inte dela det ändå.
  • någon chans att du kan släppa mig ett e-postmeddelande som beskriver vilka typer av problem du stötte på? Jag är alltid angelägen om att höra hur Procyon kunde förbättras. Min kontaktinformation finns på projektet ’ s BitBucket-webbplats.
  • @MikeStrobel tack för intresset. Jag ’ Jag försöker ge dig utökad information och exempelklasser, men inga löften.

Svar

I ”m using https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Det är dekompilern från IntelliJ, det dekompilerar koder där JD-GUI misslyckas.

Det är en inofficiell spegel för nedladdning: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Svar

Jag skulle vilja rekommendera dig AndroChef Java Decompiler AndroChef Java Decompiler dekompilerar framgångsrikt fördunklade Java 6- och Java 7. .klass- och .jar-filer.

Kommentarer

  • BETALA MED ANDROCHEF! AndroChef är bara ett omslag för den övergivna fernflower-dekompilatorn, slipp inte ’ slösa bort dina pengar med det!

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *