Hva er en god Java dekompiler og deobfuscator?

Jeg bruker JD-GUI for å dekompilere Java JAR-filer, men problemet er at det etterlater mange feil, for eksempel duplikatvariabler som jeg må fikse selv og sjekke om programmet fremdeles fungerer (hvis jeg har løst feilene riktig).

Jeg prøvde også Fernflower, men det blir tomt klasser hvis det mangler en avhengighet.

Jeg vil vite hvilken dekompilator:

  • gir minst mulig feil
  • deobfuscates the mest.

Kommentarer

  • Bare nysgjerrig, hvilke funksjoner forventer du at en deobfuscator vil tilby? Bortsett fra å gi nytt navn til variablene manuelt, ser jeg ikke ‘ ingen måte å faktisk deobfusere noen kode på.

Svar

Jeg beklager det forsinkede svaret.
Jeg har jobbet med en ny, åpen kildekode Java decompiler . Sjekk den gjerne.
Jeg har ikke testet den mot noen forvirret kode, men jeg har sett den dekompilere mange metoder som JD-GUI ikke klarte å håndtere. Merk at det pågår, og jeg er sikker på at du finner nok kode som den ikke vil dekompilere.

Kommentarer

  • For det første er dekompilatoren hans Procyon som du ser i andre svar. For det andre, selv om jeg vanligvis hiver meg på, svarer » på biblioteket mitt som gjør dette! «, det ville være en feil her. Strobel ‘ s readme som han lenker til, over, er verdt å lese nøye. Det hadde vært et flott svar i seg selv, men er riktignok sannsynligvis litt for lenge for SE.
  • +10000 Dette er virkelig flott arbeid, og det dekompilerte bare en klasse jeg brukte timer på å prøve å rekonstruere etter at JD-GUI bare hadde fått halvparten av det.
  • Selv om jeg personlig hater +1 kommentarene, må jeg ‘ si det du ‘ har fått et godt prosjekt dit som hjalp meg på et trangt sted. Fortsett!
  • @Signus Takk, jeg ‘ er glad for at arbeidet mitt viste seg å være nyttig for deg :).
  • @DavidGomes Ah, BitBucket endelig gjorde sitt løfte om å slette Mercurial repos. Rettet.

Svar

Gamle og manglende oppføringer

JAD For en tid tilbake er alles dekompilator av valget var jad. For øyeblikket er prosjektet dødt (i tillegg var det ikke åpen kildekode), men fremdeles ser du mange mennesker som refererer til det.

Java DeObfuscator Også et eldre verktøy fra fileoffset.com, men fungerer fremdeles mer eller mindre. Grensesnittet er ganske klumpete å bruke til større prosjekter, men verktøyet er åpen kildekode .

JODE JODE er en java-pakke som inneholder en dekompilator og en optimizer for Java. Denne pakken er fritt tilgjengelig under GNU GPL. Den har ikke blitt oppdatert på ganske lang tid.

AndroChef Proprietært verktøy for å dekompilere Android-programmer og Java-filer, tilgjengelig her . Ikke verdt pengene gitt alternativene, akkurat som DJ Decompiler .

Stearinlys En dekompilator med åpen kildekode av Brad Davis. Jeg nevner det for fullstendighet, men er langt borte fra å være funksjonen komplett.


Moderne verktøy

JD-Gui Sannsynligvis et av de mest brukte verktøyene for Java-dekompilering, siden det er enkelt å bruke og gir et grafisk brukergrensesnitt som gjør det mulig å raskt åpne og inspisere en klassefil eller JAR. Du finner den her .

FernFlower Veldig ny og lovende analytisk Java-dekompilator (blir en integrert del av IntelliJ 14).

Det er et kommandolinjeverktøy. Denne kan vise Unicode-parametrene med fullt navn.

Last ned herfra. Det er et kommandolinjeverktøy. Denne kan vise Unicode-parametrene med fullt navn.
Merk at den også allerede er integrert som standard i IntelliJ.

CFR

Gratis og åpen kildekode . Denne tar sikte på å dekompilere moderne Java-funksjoner , inkludert Java 12-bryteruttrykk, Java 8 lambdas (pre og post Java beta 103-endringer), Java 7 strengbrytere osv., men er selv skrevet i Java 6.

Også et kommandolinjeverktøy.Denne gjør en enda bedre jobb og er litt raskere.

Procyon

Åpen kildekode , og har også som mål å håndtere Java 8-funksjoner (lambdas, :: operator). Trenger Java 7 til å kjøre.

Krakatau Krakatau er interessant fordi det er skrevet i Python. Den inneholder for tiden tre verktøy: en dekompilator og demonterer for Java-klassefiler og en assembler for å lage klassefiler.

Støtter ennå ikke Java 8-funksjoner.

Soot

Soot er et rammeverk for å analysere og transformere Java- og Android-applikasjoner, opprinnelig utviklet av Sable Research Group ved McGill University. Det brukes ikke veldig «bare» som dekompilator, da det også definerer et mellomliggende byte-kodespråk.

Recaf

Et Java Bytecode-redigeringsverktøy og reverse engineering-verktøy som er ment å være intuitivt å bruke. Den kan presentere bytekode gjennom flere dekompilatorer (CFR, FernFlower, Procyon) eller i en tabelloppsett for å tillate visning av klasseelementer som ikke kan dekrypteres i standard dekompilatorer. Recaf bruker kontekstsensitive menyer til å samhandle med klasser, metoder og felt, slik at brukerne kan søke etter brukstilfeller, endre navn på elementer og redigere definisjoner i et demontert format.

Den støtter krukker, kriger, klasser, og trekke ut klasser fra å kjøre Java-prosesser.

Den er skrevet fullstendig i Java og er fullt åpen kildekode .

Konlochs Bytecode Viewer

En avansert lett 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 mer.

Skrevet helt i Java, og det er åpen kildekode .

Den bruker FernFlower, Procyon og CFR for dekompilering, gjør dette til et fantastisk visuelt verktøy ved hjelp av toppmoderne dekompilatorer:

Enigma

Et verktøy spesielt rettet for deobfuscation :

Opprinnelig brukt til å deobfuscate Minecraft-versjoner. Bruker Procyon internt.

En mer oppdatert gaffel finner du her

Det er morsomt å Vær oppmerksom på at mye innsats i dekompilatorer og av-obfuscatorer for Java er resultatet av modding-scenen rundt Minecraft, et av de mest populære spillene implementert i Java.

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

Kommentarer

  • Dette svaret må kanskje oppdateres. Det ser ut til at JD-Gui utvikles aktivt fra mars 2019. java-decompiler.github.io
  • Jeg har litt java 7 kode som jeg ‘ prøver å skrive noen aspekter for. Den innebygde intellij dekompileren har i noen tilfeller feil variabelnavn og kan utelate kodeblokker. JD-Gui viser disse blokkene og viser også det som ser ut til å være mer nøyaktige variabelnavn. Det viser også forskjellene mellom en gammel versjon og ny versjon av JD-Gui side om side. Det er ‘ det er verdt å se på hvis du ‘ gjør alvorlig reversering.

Svar

Jeg kan ikke snakke med hvilken av disse som er best, men det er noen få Java-dekompilatorer der ute som indikert av denne SÅ spørsmål . Ingen av disse dekompilatorene ser ut til å prøve å aktivt håndtere forvirring, og mange av disse prosjektene blir forlatt.

Jeg har ikke prøvd Krakatau , men det høres ut som om det kan hjelpe med det du leter etter.

  • Fra readme:» Krakatau-dekompilatoren tar en annen tilnærming til de fleste Java dekompilatorer. Det kan tenkes mer på som en kompilator hvis inngangsspråk er Java bytecode og hvis målspråk tilfeldigvis er Java-kildekode. Krakatau tar inn vilkårlig bytekode, og prøver å transformere den til tilsvarende Java-kode. Dette gjør den robust mot mindre forvirring, selv om den har ulempen med å ikke rekonstruere den «originale» kilden, noe som fører til mindre lesbar utgang enn en mønstermatchende dekompilator ville gi for ikke-forvirrede Java-klasser. «
  • Dette er åpent kilde og ser ut til å opprettholdes aktivt (i skrivende stund).

Kommentarer

  • Det er faktisk utgangen fra demontereren. Dekompileren dekompileres til Java-utgang. (PSJeg ‘ m utvikleren)
  • JD-GUI er en av de beste Java Decompilers for øyeblikket, men den må brukes sammen med deobfuscators på Bytecode før dekompilering av koden. De beste deobfuscatorene for java som jeg vet om kommer fra enten rune-server.org eller moparscape.org/ smf eller moparisthebest.org/smf de er hackingsamfunn for Runescape Game som er fullstendig skrevet på Java og sterkt forvirret.

Svar

Prøv å se på Bytecode Viewer https://github.com/Konloch/bytecode-viewer Det har muligheten til å dekompilere ved hjelp av 5 forskjellige dekompilatorer:

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

Kommentarer

  • Dette var et veldig godt forslag – takk, mye bedre enn bare å bruke fernflower cli!

Svar

Først og fremst er det en løsning for Fernflower-utgave med manglende klasser her . Du kan si takk til agaricusb for dette.

For nå er Fernflower fortsatt den beste Java-dekompilatoren selv den ble ikke vedlikeholdt de siste årene. Jeg har prøvd å nå forfatteren nylig, men fremdeles ikke lykke.

Når det gjelder AndroChef Java Decompiler, bruker den Fernflower som motor med forfatterens tillatelse. Fremdeles ikke sikker på om den bruker patched / modifisert versjon eller det er bare en brukergrensesnitt.

Procyon dekompiler utviklet av @ mike-strobel ser ut til å være bra, men Fernflower fikk likevel en ENORM fordel og klarte å dekompilere omtrent 95% av applikasjonen min (~ 3000 klasser) mens procyon bare klarte 60% (sjekket i januar 2014).

Kommentarer

  • Er applikasjonen din » native » Java, eller ble den konvertert fra Android-format? Hvis førstnevnte, ville jeg være veldig interessert i å få tak i binærfilene dine for å se hvor Procyon bryter sammen sammenlignet med Fernflower.
  • @MikeStrobel Det ‘ s » native » Java-applikasjon. Det ‘ er kun til intern bruk, så jeg kan ‘ ikke dele det uansett.
  • enhver sjanse for at du kan slippe meg en e-post som beskriver hva slags problemer du fikk? Jeg er alltid opptatt av å høre hvordan Procyon kan forbedres. Kontaktinformasjonen min er på prosjektet ‘ s BitBucket-side.
  • @MikeStrobel takk for interessen. Jeg ‘ Jeg prøver å gi deg utvidet informasjon og eksempelklasser, men ingen løfter.

Svar

Jeg bruker m https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Det er dekompileren fra IntelliJ, den dekompilerer koder der JD-GUI mislykkes.

Det er et uoffisielt speil å laste ned: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Svar

Jeg vil anbefale deg AndroChef Java Decompiler AndroChef Java Decompiler dekompilerer vellykket Java 6- og Java 7. .klass- og .jar-filer.

Kommentarer

  • VÆR OPPMERKT MED ANDROCHEF! AndroChef er bare en innpakning for den forlatte fernflower-dekompilatoren, ikke ‘ t kast bort pengene dine med det!

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *