Co to jest dobry dekompilator i deobfuscator Java?

Używam JD-GUI do dekompilowania plików JAR Java, ale problem jest że pozostawia wiele błędów, takich jak zduplikowane zmienne, które muszę samodzielnie naprawić i sprawdzić, czy program nadal działa (jeśli naprawiłem błędy poprawnie).

Próbowałem również Fernflower, ale to pozostawia puste klasy, jeśli brakuje w niej zależności.

Chciałbym wiedzieć, który dekompilator:

  • daje najmniejszą liczbę błędów
  • rozjaśnia większości.

Komentarze

  • Ciekawe, jakie funkcje spodziewa się po deobfuskatorze? Oprócz ręcznej zmiany nazw zmiennych, nie ' nie widzę żadnego sposobu na deobfuskację części kodu.

Odpowiedź

Przepraszam za spóźnioną odpowiedź.
Pracowałem nad nowym, otwartym dekompilatorem Java . Zapraszam do sprawdzenia.
Nie testowałem tego z jakimkolwiek zaciemnionym kodem, ale widziałem, jak dekompilował wiele metod, których JD-GUI nie obsługiwał. Zauważ, że to „praca w toku” i jestem pewien, że znajdziesz mnóstwo kodu, którego nie uda się zdekompilować.

Komentarze

  • Po pierwsze, jego dekompilatorem jest Procyon, który widzisz w innych odpowiedziach. Po drugie, chociaż zwykle się waham, ” Spójrz na moją bibliotekę, która to robi! ” odpowiada, to byłby błąd. Warto uważnie przeczytać ' s plik Strobela , do którego prowadzi powyższy link. Byłaby to świetna odpowiedź sama w sobie, ale prawdopodobnie jest trochę za długa jak na SE.
  • +10000 To jest naprawdę świetna praca i właśnie zdekompilowałem zajęcia, które spędziłem godzin próby rekonstrukcji po tym, jak JD-GUI dostało tylko połowę.
  • Mimo że osobiście nienawidzę komentarzy +1, ' będę musiał powiedzieć, że ' masz dobry projekt, który pomógł mi w trudnej sytuacji. Tak trzymaj!
  • @Signus Dzięki, ' cieszę się, że moja praca okazała się przydatna :).
  • @DavidGomes Ah, BitBucket w końcu spełnił obietnicę usunięcia repozytoriów Mercurial. Naprawiono.

Odpowiedź

Stare i brakujące wpisy

JAD Jakiś czas temu wszyscy dekompilowali wybór był jad. Obecnie projekt jest martwy (w dodatku nie był to open source), ale wciąż widzisz, że wiele osób się do niego odnosi.

Java DeObfuscator Również starsze narzędzie z fileoffset.com, ale nadal działa mniej więcej. Interfejs jest raczej niezgrabny w przypadku większych projektów, ale narzędzie to open source .

JODE JODE to pakiet Java zawierający dekompilator i optymalizator dla języka Java. Ten pakiet jest dostępny bezpłatnie na warunkach GNU GPL. Nie był aktualizowany od jakiegoś czasu.

AndroChef Zastrzeżone narzędzie do dekompilacji programów dla Androida i Pliki Java, dostępne tutaj . Nie warte swojej ceny, biorąc pod uwagę alternatywy, tak jak DJ Decompiler .

Świeca Dekompilator open source autorstwa Brada Davisa. Wspominam o tym dla kompletności, ale daleka jest od zakończenia funkcji.


Nowoczesne narzędzia

JD-Gui Prawdopodobnie jedno z najczęściej używanych narzędzi do dekompilacji Javy, ponieważ jest łatwy w użyciu i zapewnia graficzny interfejs użytkownika, który umożliwia szybkie otwieranie i przeglądanie pliku klasy lub JAR. Możesz go znaleźć tutaj .

FernFlower Bardzo nowy i obiecujący analityczny dekompilator Java (staje się integralną częścią IntelliJ 14).

To narzędzie wiersza poleceń. Ten jest w stanie pokazać parametry Unicode wraz z ich pełną nazwą.

Pobierz stąd. To narzędzie wiersza poleceń. Ten jest w stanie pokazać parametry Unicode wraz z ich pełną nazwą.
Zauważ, że jest on już domyślnie zintegrowany z IntelliJ.

CFR

Darmowy i open source . Celem tego jest dekompilacja nowoczesnych funkcji Java , w tym wyrażenia przełączające Java 12, lambdy Java 8 (przed i po zmianach Java beta 103), przełączniki Java 7 String itp., choć samo w sobie jest napisane w języku Java 6.

Również narzędzie wiersza poleceń.Ten działa jeszcze lepiej i jest nieco szybszy.

Procyon

Open source , a także ma na celu obsługę funkcji Java 8 (lambdy, :: operator). Wymaga do działania Java 7.

Krakatau Krakatau jest interesujący, ponieważ został napisany w Pythonie. Obecnie zawiera trzy narzędzia: dekompilator i dezasembler dla plików klas Java oraz asembler do tworzenia plików klas.

Jeszcze nie obsługuje funkcji Java 8.

Soot

Soot to platforma do analizowania i przekształcania aplikacji Java i Android, pierwotnie opracowana przez Sable Research Group z McGill University. Nie jest powszechnie używany „tylko” jako dekompilator, ponieważ definiuje również pośredni język kodu bajtów.

Recaf

Edytor kodu bajtowego Java i narzędzie inżynierii wstecznej, które ma być intuicyjne w użyciu. Może prezentować kod bajtowy przez wiele dekompilatorów (CFR, FernFlower, Procyon) lub w układzie tabeli, aby umożliwić wyświetlanie elementów klas, które są nieczytelne w standardowych dekompilatorach. Recaf używa menu kontekstowych do interakcji z klasami, metodami i polami, umożliwiając użytkownikom wyszukiwanie przypadków użycia, zmianę nazw elementów i edycję definicji w zdemontowanym formacie.

Obsługuje pliki jars, wojny, klasy, i wyodrębnianie klas z uruchomionych procesów Java.

Został napisany w całości w Javie i jest w pełni open source .

Przeglądarka kodu bajtowego Konlocha

Zaawansowana, lekka przeglądarka kodu bajtowego Java, dekompilator kodu graficznego Java, edytor kodu bajtowego GUI, 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, Przeglądarka szesnastkowa, wyszukiwarka kodu, debugger i nie tylko.

Napisany całkowicie w Javie i jest open source .

Używa FernFlower, Procyon i CFR do dekompilacji, dzięki czemu jest to plik niesamowite narzędzie wizualne wykorzystujące najnowocześniejsze dekompilatory:

Enigma

Narzędzie specjalnie przystosowane do deobfuskacji :

Pierwotnie używane do rozjaśniania wersji Minecrafta. Używa Procyon wewnętrznie.

Bardziej aktualną wersję można znaleźć tutaj

Fajnie jest zwróć uwagę, że wiele pracy nad dekompilatorami i de-zaciemniaczami dla Javy jest wynikiem modowania wokół Minecrafta, jednej z najpopularniejszych gier zaimplementowanych w Javie.

Źródło: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html

Komentarze

  • Ta odpowiedź może wymagać aktualizacji. Wygląda na to, że JD-Gui jest aktywnie rozwijane od marca 2019 r. java-decompiler.github.io
  • Mam trochę java 7 kod, dla którego ' próbuję napisać pewne aspekty. Wbudowany dekompilator intellij w niektórych przypadkach ma nieprawidłowe nazwy zmiennych i może pomijać bloki kodu. JD-Gui pokazuje te bloki, a także wyświetla bardziej dokładne nazwy zmiennych. Pokazuje również obok siebie różnice między starą a nową wersją JD-Gui. ' warto się temu przyjrzeć, jeśli ' robisz poważne zmiany.

Odpowiedź

Nie mogę powiedzieć, który z nich jest najlepszy, ale istnieje kilka dekompilatorów javy, jak wskazuje to Pytanie SO . Żaden z tych dekompilatorów nie wydaje się jednak podejmować próby aktywnego radzenia sobie z zaciemnianiem i wiele z tych projektów zostało porzuconych.

Nie próbowałem Krakatau , ale wygląda na to, że może pomóc w rozwiązaniu tego, czego szukasz.

  • Z pliku readme:„ Dekompilator Krakatau przyjmuje inne podejście do większość dekompilatorów Javy. Można go traktować bardziej jako kompilator, którego językiem wejściowym jest kod bajtowy Javy i którego językiem docelowym jest kod źródłowy Javy. Krakatau przyjmuje dowolny kod bajtowy i próbuje przekształcić go w równoważny kod Java. Dzięki temu jest odporny na drobne zaciemnianie, chociaż ma wadę polegającą na tym, że nie rekonstruuje „oryginalnego” źródła, co prowadzi do mniej czytelnych danych wyjściowych niż dekompilator dopasowania wzorców, który mógłby wytworzyć dla nieobfuskowanych klas Javy. źródło i wygląda na to, że jest aktywnie (w chwili pisania tego tekstu) utrzymywane.

Komentarze

  • To jest właściwie wynik działania dezasemblera. Dekompilator dekompiluje dane wyjściowe Java (PSJestem ' programistą)
  • JD-GUI jest obecnie jednym z najlepszych dekompilatorów Java, ale musi być używany w połączeniu z deobfuskatorami w Kod bajtowy przed dekompilacją kodu. Najlepsze deobfuscatory dla java, o których wiem, pochodzą z rune-server.org lub moparscape.org/ smf lub moparisthebest.org/smf to społeczności hakerskie dla Runescape Game, która jest całkowicie napisana w Javie i mocno zaciemniona.

Odpowiedź

Spójrz na przeglądarkę kodu bajtowego https://github.com/Konloch/bytecode-viewer Posiada opcję dekompilacji przy użyciu 5 różnych dekompilatorów:

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

Komentarze

  • To była naprawdę dobra sugestia – dzięki, o wiele lepsze niż zwykłe używanie fernflower cli!

Odpowiedź

Po pierwsze, jest poprawka w przypadku problemu z Fernflower z brakującymi klasami tutaj . Możesz podziękować agaricusb za to.

Na razie Fernflower pozostaje najlepszym dekompilatorem Javy, nawet nie był obsługiwany przez kilka ostatnich lat. Niedawno próbowałem skontaktować się z autorem, ale nadal nie mam szczęścia.

Jeśli chodzi o AndroChef Java Decompiler, używa Fernflower jako silnika za zgodą autora. Nadal nie jestem pewien, czy używa poprawionego / zmodyfikowanego wersja lub To tylko GUI.

Dekompilator Procyon opracowany przez @ mike-strobel wydaje się być dobry, ale Fernflower nadal miał OGROMNĄ przewagę i był w stanie zdekompilować około 95% mojej aplikacji (~ 3000 class), podczas gdy procyon był w stanie obsłużyć tylko 60% (sprawdzone w styczniu 2014).

Komentarze

  • Czy Twoja aplikacja ” natywna ” Java, czy została przekonwertowana z formatu Androida? Jeśli to pierwsze, byłbym bardzo zainteresowany zdobyciem twoich plików binarnych, aby zobaczyć, gdzie psuje się Procyon w porównaniu do Fernflower.
  • @MikeStrobel It ' s ” natywna ” aplikacja Java. Jest ' tylko do użytku wewnętrznego, więc mogę ' nie udostępniać go tak czy inaczej.
  • jakakolwiek szansa, którą mógłbyś porzucić mi e-mail opisujący, jakie rodzaje problemów napotkałeś? Zawsze chcę usłyszeć, jak można ulepszyć Procyon. Moje dane kontaktowe znajdują się w witrynie BitBucket ' projektu.
  • @MikeStrobel dziękuję za zainteresowanie. ' Spróbuję przedstawić rozszerzone informacje i przykładowe klasy, ale bez obietnic.

Odpowiedź

Używam https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler/engine To jest dekompilator z IntelliJ, dekompiluje kody w przypadku awarii JD-GUI.

Jest to nieoficjalna kopia lustrzana do pobrania: http://files.minecraftforge.net/maven/net/minecraftforge/fernflower/

Odpowiedź

Polecam AndroChef Java Decompiler AndroChef Java Decompiler z powodzeniem dekompiluje zaciemnione pliki Java 6 i Java 7 .class i .jar.

Komentarze

  • ZWRÓĆ UWAGĘ NA ANDROCHEF! AndroChef to tylko opakowanie dla porzuconego dekompilatora fernflower, nie ' nie marnuj na to pieniędzy!

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *