Co je dobrý dekompilátor a deobfuscator Java?

K dekompilaci souborů Java JAR používám JD-GUI , ale problém je že zanechává mnoho chyb, například duplicitní proměnné, které musím opravit sám a zkontrolovat, zda program stále funguje (pokud jsem chyby opravil správně).

Zkoušel jsem také Fernflower, ale to nechávám prázdné třídy, pokud chybí závislost.

Chtěl bych vědět, který dekompilátor:

  • dává nejmenší množství chyb
  • deobfuscates většina.

Komentáře

  • Zajímalo by mě, jaké funkce nabízí deobfuscator? Kromě ručního přejmenování proměnných nevidím ‚ žádný způsob, jak deobfuskovat nějaký kód.

Odpovědět

Omlouvám se za opožděnou odpověď.
Pracoval jsem na novém otevřeném zdrojovém dekompilátoru jazyka Java . Neváhejte to zkontrolovat.
Netestoval jsem to proti žádnému zmatenému kódu, ale viděl jsem, jak dekompiloval mnoho metod, které JD-GUI nedokázalo zpracovat. Všimněte si, že to právě probíhá a jsem si jist, že najdete spoustu kódu, který se nepodaří dekompilovat.

Komentáře

  • Za prvé, jeho dekompilátor je Procyon, který vidíte v dalších odpovědích. Zadruhé, i když se obvykle bráním, “ Podívejte se na mou knihovnu, která to dělá! “ odpovědi, to by zde byla chyba. Strobel ‚ s readme , na který odkazuje, stojí za přečtení. Byla by to skvělá odpověď sama o sobě, ale pro SE je to pravděpodobně příliš dlouhá.
  • +10000 To je opravdu skvělá práce a prostě dekompilovalo třídu, kterou jsem strávil hodiny, které se snažím rekonstruovat poté, co JD-GUI dostalo jen polovinu.
  • I když já osobně nenávidím komentáře +1, musím ‚ říci, že ‚ jste tam dostali dobrý projekt, který mi pomohl v úzkých. Pokračujte!
  • @Signus Díky, jsem ‚ rád, že se vám moje práce osvědčila :).
  • @DavidGomes Ah, BitBucket nakonec splnil svůj slib, že odstraní repozitáře Mercurial. Opraveno.

Odpověď

Staré a chybějící položky

JAD Před nějakou dobou dekompilátor každého volba byla jad. Aktuálně je projekt mrtvý (navíc to nebyl open source), ale stále vidíte spoustu lidí, kteří na něj odkazují.

Java DeObfuscator Také starší nástroj z fileoffset.com, ale stále funguje víceméně. Rozhraní je poměrně neohrabané pro použití u větších projektů, ale nástrojem je otevřený zdroj .

JODE JODE je balíček java obsahující dekompilátor a optimalizátor pro Javu. Tento balíček je volně dostupný pod GNU GPL. Již nějakou dobu nebyl aktualizován.

AndroChef Proprietární nástroj pro dekompilaci programů pro Android a Soubory Java, dostupné zde . Vzhledem k alternativám nestojí za peníze, stejně jako DJ Decompiler .

Svíčka Dekompilátor open source od Brada Davise. Zmíním to pro úplnost, ale zdaleka to není úplná funkce.


Modern Tools

JD-Gui pravděpodobně jeden z nejpoužívanějších nástrojů pro dekompilaci Javy, protože se snadno používá a poskytuje grafické uživatelské rozhraní, které umožňuje rychle otevřít a zkontrolovat soubor třídy nebo JAR. Najdete jej zde .

FernFlower Velmi nový a slibný analytický dekompilátor jazyka Java (stává se nedílnou součástí IntelliJ 14).

Je to nástroj příkazového řádku. Ten dokáže zobrazit parametry Unicode s celým jménem.

Stáhnout odtud. Jedná se o nástroj příkazového řádku. Tento dokáže zobrazit parametry Unicode s celým jménem.
Pamatujte, že je již ve výchozím nastavení integrován do IntelliJ.

CFR

Zdarma a otevřený zdroj . Cílem tohoto projektu je dekompilovat moderní funkce Java , včetně výrazů přepínačů Java 12, lambd Java 8 (změny Java beta 103 před a po), přepínačů Java 7 String atd., i když je sám napsán v jazyce Java 6.

Také nástroj příkazového řádku.Tenhle dělá ještě lepší práci a je o něco rychlejší.

Procyon

Otevřený zdroj a jeho cílem je také vypořádat se s funkcemi prostředí Java 8 (lambdas, :: operator). K běhu je potřeba Java 7.

Krakatau Krakatau je zajímavý, protože byl napsán v Pythonu. V současné době obsahuje tři nástroje: dekompilátor a disassembler pro soubory tříd Java a assembler pro vytváření souborů tříd.

Ještě nepodporuje funkce prostředí Java 8.

Soot

Soot je rámec pro analýzu a transformaci aplikací Java a Android, původně vyvinutý společností Sable Research Group z McGill University. Není příliš běžně používán „jen“ jako dekompilátor, protože také definuje jazyk přechodného bajtového kódu.

Recaf

Editor Java Bytecode a nástroj pro reverzní inženýrství, jehož cílem je intuitivní použití. Může prezentovat bytecode prostřednictvím více dekompilátorů (CFR, FernFlower, Procyon) nebo v rozložení tabulky, aby umožnilo zobrazení prvků třídy, které jsou ve standardních dekompilátorech nerozluštitelné. Recaf používá kontextová menu k interakci s třídami, metodami a poli, což umožňuje uživatelům vyhledávat případy použití, přejmenovávat položky a upravovat definice v rozloženém formátu.

Podporuje sklenice, války, třídy, a extrahování tříd ze spuštěných procesů Java.

Je napsán kompletně v Javě a je plně otevřený zdroj .

Prohlížeč Bytecode společnosti Konloch

Pokročilý odlehčený prohlížeč Java Bytecode, 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 a další.

Napsáno kompletně v Javě a je to open source .

Pro dekompilaci používá FernFlower, Procyon a CFR, což z něj dělá skvělý vizuální nástroj využívající nejmodernější dekompilátory:

Enigma

Nástroj speciálně určený k deobfuskaci :

Původně se používal k deobfuskaci verzí Minecraftu. Používá Procyon interně.

Více aktuální vidlice najdete zde

Je to zábavné Všimněte si, že mnoho úsilí v oblasti dekompilátorů a de-obfuskátorů pro Javu je výsledkem moddingové scény kolem Minecraftu, jedné z nejpopulárnějších her implementovaných v Javě.

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

Komentáře

  • Tato odpověď možná bude třeba aktualizovat. Zdá se, že JD-Gui se aktivně vyvíjí od března 2019. java-decompiler.github.io
  • Mám nějakou javu 7 kód, pro který se ‚ m pokouším napsat některé aspekty. Integrovaný dekompilátor intellij má v některých případech nesprávné názvy proměnných a může vynechat bloky kódu. JD-Gui zobrazuje tyto bloky a také zobrazuje, co se jeví jako přesnější názvy proměnných. Rovněž ukazuje rozdíly mezi starou verzí a novou verzí JD-Gui. ‚ Stojí za to se podívat, pokud ‚ provádíte vážné couvání.

Odpověď

Nemohu mluvit, který z nich je nejlepší, ale existuje několik java dekompilátorů, jak to naznačuje SO otázka . Zdá se, že se žádný z těchto dekompilátorů nepokouší aktivně zvládat zmatek a mnoho z těchto projektů je opuštěno.

Nezkoušel jsem Krakatau , ale zní to, jako by to mohlo pomoci s tím, co hledáte.

  • Z readme:„ Dekompilátor Krakatau má jiný přístup k většina dekompilátorů Java. Lze jej považovat spíše za kompilátor, jehož vstupním jazykem je bajtový kód Java a jehož cílovým jazykem je zdrojový kód Java. Krakatau přijímá libovolný bytecode a pokouší se jej transformovat na ekvivalentní kód Java. Díky tomu je robustní až po malé zamlžování, i když má nevýhodu v tom, že nerekonstruuje „původní“ zdroj, což vede k méně čitelnému výstupu, než jaký by dekompilátor odpovídající vzorům vytvořil pro neobtěžované třídy Java. “
  • zdroj a zdá se, že je aktivně (od tohoto psaní) udržován.

Komentáře

  • To je vlastně výstup disassemblera. Dekompilátor dekompiluje výstup Java. (PSI ‚ m vývojář)
  • JD-GUI je v současné době jedním z nejlepších Java Decompilers, ale musí být použit společně s deobfuscatory na Bytecode před dekompilací kódu. Nejlepší deobfuskátory pro javu, o kterých vím, pocházejí buď z rune-server.org nebo moparscape.org/ smf nebo moparisthebest.org/smf jsou hackerské komunity pro hru Runescape Game, která je zcela napsána v Javě a je velmi zahmlená.

Odpověď

Zkuste se podívat do prohlížeče Bytecode Viewer https://github.com/Konloch/bytecode-viewer Má možnost dekompilovat pomocí 5 různých dekompilátorů:

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

Komentáře

  • Byl to opravdu dobrý návrh – díky, mnohem lepší než pouhé použití fernflower cli!

odpověď

Nejdříve ze všeho je oprava pro problém Fernflower s chybějícími třídami zde . Můžete za to poděkovat agaricusb.

Prozatím Fernflower zůstává nejlepším dekompilátorem Javy, i když se to posledních pár let neudržovalo. „Pokusil (a) jsem se nedávno kontaktovat autora, ale stále nemám štěstí.

Pokud jde o Java Decompiler AndroChef, používá jako nástroj Fernflower se souhlasem autora. Stále si nejsem jistý, jestli používá opravený / upravený verze nebo Je to jen GUI.

Dekompilátor Procyon vyvinutý společností @ mike-strobel se zdá být dobrý, ale Fernflower stále získal OBROVSKOU výhodu a dokázal dekompilovat přibližně 95% mé aplikace (~ 3000 třídy), zatímco procyon dokázal zvládnout pouze 60% (zkontrolováno v lednu 2014).

Komentáře

  • Je vaše aplikace “ nativní “ jazyk Java, nebo byl převeden z formátu Android? Pokud by to bylo první, měl bych velký zájem o to, abych dostal do rukou vaše binární soubory, abych zjistil, kde se Procyon rozpadá ve srovnání s Fernflower.
  • @MikeStrobel It ‚ s “ nativní “ aplikace Java. Je ‚ pouze pro interní použití, takže jej ‚ nemůžu stejně sdílet.
  • jakákoli šance, že bys mohl spadnout mi e-mail popisující, jaké druhy problémů jste narazili? Vždy rád slyším, jak by bylo možné Procyon vylepšit. Moje kontaktní informace jsou na projektu ‚ s webem BitBucket.
  • @MikeStrobel děkuji za zájem. ‚ Pokusím se vám poskytnout rozšířené informace a ukázkové třídy, ale žádné sliby.

Odpovědět

Používám https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine Je to dekompilátor od IntelliJ, dekompilová kódy tam, kde JD-GUI selže.

Je to neoficiální zrcadlo ke stažení: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Odpověď

Chtěl bych vám doporučit AndroChef Java Decompiler AndroChef Java Decompiler úspěšně dekompiluje zmatené soubory Java 6 a Java 7 .class a .jar.

Komentáře

  • VĚDĚTE S ANDROCHEFEM! AndroChef je pouze obal pro opuštěný dekompilátor fernflower, nezatěžujte s ním své peníze!

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *