Folosesc JD-GUI pentru a decompila fișierele Java JAR, dar problema este că lasă multe erori, cum ar fi variabile duplicat pe care trebuie să le repar eu și să verific dacă programul funcționează în continuare (dacă am remediat erorile corect).
Am încercat și Fernflower, dar asta rămâne necompletat clase dacă lipsește o dependență.
Aș dori să știu care decompilator:
- oferă cea mai mică cantitate de erori
- dezobscurizează majoritatea.
Comentarii
- Doar curios, ce caracteristici aștepți să ofere un dezobuscator? În afară de redenumirea manuală a variabilelor, nu ‘ nu văd nicio modalitate de a dezobscura de fapt un cod.
Răspuns
Scuzele mele pentru răspunsul întârziat.
Am lucrat la un nou, open source decompilator Java . Simțiți-vă liber să o verificați.
Nu l-am testat împotriva vreunui cod ofuscat, dar l-am văzut descompilând multe metode pe care JD-GUI nu le-a reușit. Rețineți că este o lucrare în curs și sunt sigur că veți găsi o mulțime de coduri pe care nu le va putea descompila.
Comentarii
- În primul rând, decompilatorul său este Procyon pe care îl vedeți în alte răspunsuri. În al doilea rând, deși mă gândesc de obicei la, ” Uită-te la biblioteca mea care face acest lucru! ” răspunde, ar fi o greșeală aici. Strobel ‘ s readme la care leagă, mai sus, merită o lectură atentă. Ar fi fost un răspuns grozav în sine, dar este, probabil, un pic prea lung pentru SE.
- +10000 Aceasta este o lucrare cu adevărat grozavă și tocmai a descompilat o clasă pe care am petrecut-o ore încercând să reconstitui după ce JD-GUI a obținut doar jumătate din el.
- Chiar dacă urăsc personal comentariile +1, va trebui să ‘ ‘ ai primit un proiect bun care m-a ajutat într-un loc strâns. Continuă!
- @Signus Mulțumesc, mă ‘ mă bucur că munca mea s-a dovedit utilă pentru tine :).
- @DavidGomes Ah, BitBucket și-a îndeplinit în cele din urmă promisiunea de a șterge repos Mercurial. Fix.
Răspuns
Intrări vechi și lipsă
JAD Acum ceva timp, decompilatorul tuturor a alegerea a fost jad. În prezent, proiectul este mort (în plus, nu era open source), dar totuși vedeți o mulțime de oameni care se referă la el.
Java DeObfuscator De asemenea, un instrument mai vechi de la fileoffset.com, dar funcționează în continuare mai mult sau mai puțin. Interfața este destul de ciudată de utilizat pentru proiecte mai mari, dar instrumentul este open source .
JODE JODE este un pachet Java care conține un decompilator și un optimizator pentru Java. Acest pachet este disponibil gratuit în GNU GPL. Nu a fost actualizat de ceva timp.
AndroChef Instrument proprietar pentru decompilarea programelor Android și Fișiere Java, disponibile aici . Nu merită banii, dat fiind alternativele, la fel ca DJ Decompiler .
Lumânare Un decompilator open source de Brad Davis. O menționez pentru completitudine, dar este departe de a fi completă.
Instrumente moderne
JD-Gui Probabil unul dintre cele mai utilizate instrumente pentru decompilarea Java, deoarece este ușor de utilizat și oferă o interfață grafică pentru utilizator care permite deschiderea rapidă și inspectarea unui fișier de clasă sau JAR. Îl puteți găsi aici .
FernFlower Decompiler analitic Java foarte nou și promițător (devenind o parte integrantă a IntelliJ 14).
Este un instrument de linie de comandă. Acesta poate afișa parametrii Unicode cu numele lor complet.
Descărcați de aici. Este un instrument pentru linia de comandă. Acesta poate afișa parametrii Unicode cu numele lor complet.
Rețineți că este deja integrat implicit în IntelliJ.
CFR
Gratuit și open source . Acesta are ca scop descompilarea caracteristicilor Java moderne , inclusiv expresiile de comutare Java 12, Java 8 lambdas (modificări pre și post Java beta 103), comutatoare Java 7 String etc., deși este scris în Java 6.
De asemenea, un instrument de linie de comandă.Acesta face o treabă și mai bună și este puțin mai rapid.
Procyon
Open source și își propune, de asemenea, să se ocupe de caracteristicile Java 8 (lambdas, :: operator). Necesită Java 7 pentru a rula.
Krakatau Krakatau este interesant deoarece a fost scris în Python. În prezent conține trei instrumente: un decompilator și dezasamblator pentru fișierele de clasă Java și un asamblator pentru a crea fișiere de clasă.
Nu acceptă încă caracteristicile Java 8.
Soot
Soot este un cadru pentru analiza și transformarea aplicațiilor Java și Android, dezvoltat inițial de Sable Research Group de la Universitatea McGill. Nu este foarte frecvent folosit „doar” ca decompilator, deoarece definește și un limbaj intermediar de cod de octet.
Recaf
Un editor Java Bytecode și un instrument de inginerie inversă menit să fie intuitiv de utilizat. Poate prezenta bytecode prin mai multe decompilatoare (CFR, FernFlower, Procyon) sau într-un aspect de tabel pentru a permite afișarea elementelor clasei care sunt indescifrabile în decompilatoarele standard. Recaf folosește meniuri contextuale pentru a interacționa cu clase, metode și câmpuri, permițând utilizatorilor să caute cazuri de utilizare, să redenumească elemente și să editeze definiții într-un format dezasamblat.
Acceptă borcane, războaie, clase, și extragerea claselor din procesele Java care rulează.
Este scris complet în Java și este complet open source .
Vizualizatorul Bytecode Konloch
Un Advanced Lightweight 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 și multe altele.
Scris complet în Java și este open source .
Folosește FernFlower, Procyon și CFR pentru decompilare, face din asta un instrument vizual extraordinar care utilizează decompilatoare de ultimă generație:
Enigma
Un instrument special conceput pentru dezamorsare :
Folosit inițial pentru dezamorsarea versiunilor Minecraft. Folosește Procyon intern.
O furcă mai actualizată poate fi găsită aici
Este distractiv să rețineți că mult efort în decompilatoare și de-obfuscator pentru Java este rezultatul scenei de modding din jurul Minecraft, unul dintre cele mai populare jocuri implementate în Java.
Sursa: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html
Comentarii
- Acest răspuns poate fi necesară actualizarea. Se pare că JD-Gui este dezvoltat activ începând din martie 2019. java-decompiler.github.io
- Am câteva java 7 cod pentru care ‘ încerc să scriu câteva aspecte. În unele cazuri, decompilatorul intellij încorporat are nume de variabile incorecte și poate lăsa blocuri de cod. JD-Gui arată acele blocuri și afișează, de asemenea, ceea ce pare a fi nume de variabile mai precise. De asemenea, arată diferențele dintre o versiune veche și o versiune nouă a JD-Gui. ‘ merită să vă uitați dacă ‘ faceți o inversare serioasă.
Răspuns
Nu pot vorbi cu care dintre acestea este cel mai bun, dar există câțiva decompilatori java acolo, așa cum este indicat de acest SO întrebare . Niciunul dintre aceste decompilatoare nu pare să încerce să gestioneze în mod activ ofuscarea și multe dintre aceste proiecte sunt abandonate.
Nu am încercat Krakatau , dar se pare că vă poate ajuta cu ceea ce căutați.
- Din readme:„ Decompilatorul Krakatau adoptă o abordare diferită majoritatea decompilatoarelor Java. Poate fi gândit mai mult ca un compilator al cărui limbaj de intrare este codul secundar Java și al cărui limbă țintă se întâmplă să fie cod sursă Java. Krakatau acceptă un bytecod arbitrar și încearcă să-l transforme în cod Java echivalent. Acest lucru îl face robust până la ofuscarea minoră, deși are dezavantajul de a nu reconstrui sursa „originală”, ducând la o ieșire mai puțin lizibilă decât ar produce un decompilator de potrivire a modelelor pentru clasele Java neobscurizate. ”
- Acest lucru este deschis sursă și pare a fi activ (încă din această scriere) menținut.
Comentarii
- Acesta este de fapt rezultatul dezasamblatorului. Decompilatorul se descompilează la ieșirea Java. (PSEu ‘ m dezvoltator)
- JD-GUI este unul dintre cele mai bune decompilatoare Java în acest moment, dar trebuie utilizat în conjunctiv cu deobfuscatori pe Bytecode înainte de decompilarea codului. Cei mai buni dezobuscatori pentru java pe care îi cunosc provin fie de la rune-server.org , fie de la moparscape.org/ smf sau moparisthebest.org/smf acestea sunt comunități de hacking pentru jocul Runescape, care este complet scris în Java și foarte neclar.
Răspuns
Încercați să aruncați o privire la Bytecode Viewer https://github.com/Konloch/bytecode-viewer Are opțiunea de a se descompila folosind 5 decompilatoare diferite:
- FernFlower
- Procyon
- CFR
- Krakatau
- JD-GUI
Comentarii
- Aceasta a fost o sugestie foarte bună – mulțumesc, mult mai bine decât să folosești cli-ul de fernflower!
Răspuns
În primul rând, există o soluție pentru problema Fernflower cu clasele lipsă aici . Puteți spune mulțumiri către agaricusb pentru acest lucru.
Deocamdată Fernflower rămâne cel mai bun decompilator Java chiar și nu a fost întreținut în ultimii ani. Am încercat recent să ajung la autor, dar încă nu am noroc.
În ceea ce privește AndroChef Java Decompiler, folosește Fernflower ca motor cu permisiunea autorului. Încă nu sunt sigur dacă folosește patch-uri / modificări versiunea sau este doar o interfață grafică.
Decompilatorul Procyon dezvoltat de @ mike-strobel pare a fi bun, dar Fernflower a obținut în continuare un avantaj UMER și a reușit să descompile aproximativ 95% din aplicația mea (~ 3000 clase) în timp ce procyon a reușit să gestioneze doar 60% (verificat în ianuarie 2014).
Comentarii
- Aplicația dvs. este ” nativ ” Java sau a fost convertit din format Android? Dacă primul, aș fi foarte interesat să pun mâna pe binare pentru a vedea unde se descompune Procyon în comparație cu Fernflower.
- @MikeStrobel It ‘ s ” native ” aplicație Java. ‘ are doar uz intern, așa că nu pot ‘ să îl împărtășesc oricum.
- orice șansă ați putea renunța îmi trimiteți un e-mail care descrie ce fel de probleme ați întâmpinat? Sunt întotdeauna dornic să aud cum Procyon ar putea fi îmbunătățit. Informațiile mele de contact se află pe site-ul BitBucket al proiectului ‘.
- @MikeStrobel vă mulțumim pentru interes. ‘ Voi încerca să vă ofer informații detaliate și exemple de clase, dar fără promisiuni.
Răspuns
I „m using https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Este decompilatorul de la IntelliJ, descompilează codurile în care JD-GUI eșuează.
Este o oglindă neoficială de descărcat: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/
Răspuns
Aș dori să vă recomand AndroChef Java Decompiler AndroChef Java Decompiler descompilează cu succes fișierele .class și .jar Java 6 și Java 7.
Comentarii
- ATENȚIE CU ANDROCHEF! AndroChef este doar un înveliș pentru decompilatorul de flori de ferigă abandonat, nu ‘ nu-ți irosi banii cu el!