Hvad er en god Java decompiler og deobfuscator?

Jeg bruger JD-GUI til at dekompilere Java JAR-filer, men problemet er at det efterlader mange fejl, såsom duplikatvariabler, som jeg selv skal rette og kontrollere, om programmet stadig fungerer (hvis jeg har løst fejlene korrekt).

Jeg prøvede også Fernflower, men det efterlader tomt klasser, hvis det mangler en afhængighed.

Jeg vil gerne vide, hvilken dekompilator:

  • giver mindst mulig fejl
  • deobfuscates the mest.

Kommentarer

  • Bare nysgerrig, hvilke funktioner forventer du, at en deobfuscator tilbyder? Bortset fra at omdøbe variablerne manuelt, kan jeg ikke ‘ ikke se nogen måde at faktisk deobfuscere noget kode på.

Svar

Jeg beklager det forsinkede svar.
Jeg har arbejdet på en ny, open source Java decompiler . Du er velkommen til at tjekke det ud.
Jeg har ikke testet det mod nogen forvirret kode, men jeg har set det dekompilere mange metoder, som JD-GUI ikke kunne håndtere. Bemærk, at det “er i gang, og jeg er sikker på, at du finder masser af kode, som den ikke kan dekompilere.

Kommentarer

  • For det første er hans dekompilator Procyon, som du ser i andre svar. For det andet, skønt jeg normalt svæver ved, ” Se på mit bibliotek, der gør dette! ” svar, det ville være en fejl her. Strobel ‘ s readme , som han linker til ovenfor, er værd at læse tæt på. Det ville have været et stort svar i sig selv, men det er ganske vist sandsynligvis lidt for langt til SE.
  • +10000 Dette er virkelig godt arbejde, og det dekompilerede bare en klasse, som jeg brugte timer med at prøve at rekonstruere, efter at JD-GUI kun havde fået halvdelen af det.
  • Selvom jeg personligt hader +1 kommentarerne, er jeg ‘ nødt til at sige det du ‘ har fået et godt projekt derhen, der hjalp mig på et tæt sted. Fortsæt!
  • @Signus Tak, jeg ‘ glæder mig over, at mit arbejde viste sig nyttigt for dig :).
  • @DavidGomes Ah, BitBucket endelig opfyldte deres løfte om at slette Mercurial repos. Rettet.

Svar

Gamle og manglende poster

JAD For nogen tid siden er alles dekompiler af valget var jad. I øjeblikket er projektet dødt (derudover var det ikke open source), men stadig ser du mange mennesker henvise til det.

Java DeObfuscator Også et ældre værktøj fra fileoffset.com, men fungerer stadig mere eller mindre. Interfacet er ret klodset at bruge til større projekter, men værktøjet er open source .

JODE JODE er en java-pakke, der indeholder en decompiler og en optimizer til Java. Denne pakke er frit tilgængelig under GNU GPL. Det er ikke blevet opdateret i nogen tid.

AndroChef Proprietært værktøj til dekompilering af Android-programmer og Java-filer, der er tilgængelige her . Ikke pengene værd, givet alternativene, ligesom DJ Decompiler .

Lys En open source decompiler af Brad Davis. Jeg nævner det for fuldstændighed, men er langt væk fra at være komplet.


Moderne værktøjer

JD-Gui Sandsynligvis et af de mest anvendte værktøjer til Java-dekompilering, da det er let at bruge og giver en grafisk brugergrænseflade, der gør det muligt hurtigt at åbne og inspicere en klassefil eller JAR. Du kan finde det herover .

FernFlower Meget ny og lovende analytisk Java-decompiler (bliver en integreret del af IntelliJ 14).

Det er et kommandolinjeværktøj. Denne er i stand til at vise Unicode-parametrene med deres fulde navn.

Download herfra. Det er et kommandolinjeværktøj. Denne er i stand til at vise Unicode-parametrene med deres fulde navn.
Bemærk at det også allerede er integreret som standard i IntelliJ.

CFR

Gratis og open source . Denne sigter mod at dekompilere moderne Java-funktioner , inklusive Java 12-switch-udtryk, Java 8 lambdas (før og efter Java beta 103-ændringer), Java 7 String-switches osv., men er selv skrevet i Java 6.

Også et kommandolinjeværktøj.Denne gør et endnu bedre job og er lidt hurtigere.

Procyon

Open source og sigter også mod at håndtere Java 8-funktioner (lambdas, :: operator). Har brug for Java 7 til at køre.

Krakatau Krakatau er interessant, fordi det er skrevet i Python. Den indeholder i øjeblikket tre værktøjer: en decompiler og disassembler til Java-klassefiler og en assembler til at oprette klassefiler.

Understøtter endnu ikke Java 8-funktioner.

Sod

Sod er en ramme til analyse og transformation af Java- og Android-applikationer, oprindeligt udviklet af Sable Research Group fra McGill University. Det bruges ikke meget “bare” som en dekompiler, da det også definerer et mellemliggende byte-kodesprog.

Recaf

Et Java Bytecode-redigeringsværktøj og reverse engineering-værktøj med det formål at være intuitivt at bruge. Det kan præsentere bytekode gennem flere dekompilatorer (CFR, FernFlower, Procyon) eller i et tabellayout for at tillade visning af klasseelementer, der ikke kan dekrypteres i standard dekompilatorer. Recaf bruger kontekstafhængige menuer til at interagere med klasser, metoder og felter, så brugerne kan søge efter brugssager, omdøbe elementer og redigere definitioner i et adskilt format.

Det understøtter krukker, krige, klasser, og udtrække klasser fra at køre Java-processer.

Den er skrevet fuldstændigt i Java og er fuldt ud open source .

Konlochs Bytecode Viewer

En avanceret letvægts 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 og mere.

Skrevet fuldstændigt i Java, og det er open source .

Det bruger FernFlower, Procyon og CFR til dekompilering, gør dette til et fantastisk visuelt værktøj ved hjælp af avancerede decompilere:

Enigma

Et værktøj, der er specielt beregnet til deobfuscation :

Oprindeligt brugt til at deobfuscate Minecraft-versioner. Bruger Procyon internt.

En mere opdateret gaffel kan findes her

Det er sjovt at bemærk, at en stor indsats i decompilere og de-obfuscators for Java er resultatet af modding-scenen omkring Minecraft, et af de mest populære spil implementeret i Java.

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

Kommentarer

  • Dette svar skal muligvis opdateres. Det ser ud til, at JD-Gui udvikles aktivt fra marts 2019. java-decompiler.github.io
  • Jeg har noget java 7 kode, som jeg ‘ forsøger at skrive nogle aspekter til. Den indbyggede intellij decompiler har i nogle tilfælde forkerte variabelnavne og kan udelade kodeblokke. JD-Gui viser disse blokke og viser også, hvad der synes at være mere nøjagtige variabelnavne. Det viser også side om side forskellene mellem en gammel version og en ny version af JD-Gui. Det er ‘ værd at se på, hvis du ‘ laver en seriøs omvendelse.

Svar

Jeg kan ikke tale med hvilken af disse der er bedst, men der er et par java-dekompilatorer derude som angivet af denne SÅ spørgsmål . Ingen af disse dekompilatorer ser ud til at forsøge at aktivt håndtere obfuscation, og mange af disse projekter opgives.

Jeg har ikke prøvet Krakatau , men det lyder som om det kan hjælpe med det, du leder efter.

  • Fra readme:” Krakatau-dekompilatoren tager en anden tilgang til de fleste Java-dekompilatorer. Det kan betragtes mere som en kompilator, hvis inputsprog er Java bytecode, og hvis målsprog tilfældigvis er Java-kildekode. Krakatau modtager vilkårlig bytekode og forsøger at omdanne den til tilsvarende Java-kode. Dette gør det robust til mindre tilsløring, skønt det har den ulempe, at den ikke “rekonstruerer” den “originale” kilde, hvilket fører til mindre læselig output, end en mønstermatchende dekompiler ville producere for ikke-forvirrede Java-klasser. “
  • Dette er åbent kilde og ser ud til at være aktivt (i skrivende stund).

Kommentarer

  • Det er faktisk output fra disassembler. Dekompileren dekompileres til Java-output. (PSJeg ‘ m udvikleren)
  • JD-GUI er en af de bedste Java Decompilers i øjeblikket, men det skal bruges sammen med deobfuscators på Bytecode inden dekompilering af koden. De bedste deobfuscatorer til java, som jeg kender til, kommer fra enten rune-server.org eller moparscape.org/ smf eller moparisthebest.org/smf de er hackingsamfund til Runescape Game, som er fuldstændig skrevet i Java og stærkt tilsløret.

Svar

Prøv at se på Bytecode Viewer https://github.com/Konloch/bytecode-viewer Det har mulighed for at dekompilere ved hjælp af 5 forskellige decompilere:

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

Kommentarer

  • Dette var et rigtig godt forslag – tak, langt bedre end bare at bruge fernflower cli!

Svar

Først og fremmest er der en løsning for Fernflower-udgave med manglende klasser her . Du kan sige tak til agaricusb for dette.

For nu er Fernflower fortsat den bedste Java-dekompiler selv Den blev ikke vedligeholdt i de sidste par år. Jeg har forsøgt at nå forfatteren for nylig, men stadig ikke held.

Hvad angår AndroChef Java Decompiler, bruger den Fernflower som motor med forfatterens tilladelse. Stadig ikke sikker på, om den bruger patched / modificeret version eller det er bare en GUI.

Procyon decompiler udviklet af @ mike-strobel ser ud til at være god, men Fernflower fik stadig en Kæmpe fordel og var i stand til at dekompilere ca. 95% af min applikation (~ 3000 klasser), mens procyon kun var i stand til at håndtere 60% (kontrolleret i januar 2014).

Kommentarer

  • Er din applikation ” native ” Java, eller blev det konverteret fra Android-format? Hvis førstnævnte, ville jeg være meget interesseret i at få fat i dine binære filer for at se, hvor Procyon bryder sammen sammenlignet med Fernflower.
  • @MikeStrobel Det ‘ s ” native ” Java-applikation. Det ‘ er kun til intern brug, så jeg kan ‘ ikke dele det alligevel.
  • enhver chance for at du kan droppe mig en e-mail, der beskriver, hvilke slags problemer du stødte på? Jeg er altid opsat på at høre, hvordan Procyon kunne forbedres. Mine kontaktoplysninger findes på projektet ‘ s BitBucket-side.
  • @MikeStrobel tak for interessen. Jeg ‘ Jeg prøver at give dig udvidede oplysninger og eksempelklasser, men ingen løfter.

Svar

I “m using https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Det er dekompileren fra IntelliJ, det dekompilerer koder, hvor JD-GUI fejler.

Det er et uofficielt spejl at downloade: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Svar

Jeg vil anbefale dig AndroChef Java Decompiler AndroChef Java Decompiler dekompilerer vellykket Java 6 og Java 7 .class- og .jar-filer.

Kommentarer

  • BEMÆRK MED ANDROCHEF! AndroChef er kun en indpakning til den forladte fernflower decompiler, don ‘ t spilde dine penge med det!

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *