Jak "dekompilować" pliki klas Java? [zamknięte]

Jakiego programu mogę użyć do dekompilacji pliku klasy? Czy rzeczywiście dostanę Kod Javy, czy tylko kod montażowy JVM?

Na Pytania dotyczące wydajności Javy na tej stronie często widzę odpowiedzi od osób, które "dekompilowały" plik klasy Javy, aby zobaczyć, jak kompilator optymalizuje pewne rzeczy.

Author: Peter Mortensen, 2008-11-07

19 answers

Aktualizacja Luty 2016:

Www.javadecompilers.com wymienia JAD jako:

Najpopularniejszy dekompiler Javy, ale przede wszystkim tylko w tym wieku. Napisany w C++, tak bardzo szybko.
Nieaktualne, nieobsługiwane i nie dekompiluje poprawnie Javy 5 i nowszej

Więc twój przebieg może się różnić w zależności od ostatnich jdk (7, 8).

Ta sama strona zawiera listę innych narzędzi.

I javadecompiler, jak zauważył Salvador Valencia w komentarze (Wrzesień 2017), oferuje SaaS, w którym przesyłasz plik .class do chmury i zwraca ci dekompilowany kod.


Oryginalna odpowiedź: październik 2008

    [26]}wersja ostateczna JSR 176, definiująca główne funkcje J2SE 5.0 (Java SE 5), została opublikowana 30 września 2004 roku.
  • ostatnia wersja Javy wspierana przez jad, słynny Dekompiler Javy napisany przez Pana Pavel Kouznetsov, to JDK 1.3.
  • Większość dekompilatorów Javy do pobrania dzisiaj z Internetu, takie jak " DJ Java Decompiler "lub" Cavaj Java Decompiler", są zasilane przez JAD: nie mogą wyświetlać Java 5 źródeł.

Java Decompiler (Yet another Fast Java decompiler) has:

  • jawne wsparcie dla dekompilacji i analizy Java 5+".Klasa " pliki.
  • ładny GUI:

zrzut ekranu

Działa z kompilatorami od JDK 1.1.8 do JDK 1.7.0 i innymi ( Jikes , JRockit , itd.).

Zawiera on wersję demonstracyjną online na żywo , która jest w pełni funkcjonalna! Możesz po prostu upuścić plik jar na stronę i zobaczyć dekompilowany kod źródłowy bez instalowania czegokolwiek.

 588
Author: VonC,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-15 21:45:21

Istnieje kilka dekompilatorów... Szybkie wyszukiwanie daje:

  1. Procyon : open-source (Apache 2) i aktywnie rozwijany
  2. Krakatau : open-source (GPLv3) i aktywnie rozwijany
  3. CFR : open-source (MIT) i aktywnie rozwijany
  4. JAD
  5. DJ Java Decompiler
  6. Mocha

I wiele innych.

Wytwarzają kod Java. Java zawiera coś, co pozwala zobacz kod bajtowy JVM (javap ).

 101
Author: billjamesdev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-07 15:39:35

Aby zobaczyć kod źródłowy Javy sprawdź jakiś dekompiler. Poszukaj jad .

Jeśli chcesz zobaczyć kody bajtowe, po prostu użyj javap , który jest dostarczany wraz z JDK.

 51
Author: Marko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-11-07 16:03:51

Próbowałem kilku i Procyon wydawał mi się najlepszy. Jest aktywnie rozwijany i obsługuje wiele funkcji najnowszych wersji Javy.

To są inne, których próbowałem:

  • CFR
      Obiecująca, ale często nieudana metoda dekompilacji. Będę miał na nią oko. Aktywnie rozwijany z obsługą najnowszych funkcji Java.
  • Krakatau
    • ma inne podejście w tym zamiast próbować zrekonstruować oryginalne źródło, stara się wyprowadzić równoważny kod Javy, co może sprawić, że będzie on lepszy dla zamaskowanego kodu. Z moich testów było mniej więcej na równi z Procyonem, ale nadal miło mieć coś innego. Musiałem użyć znacznika -skip linii poleceń, aby nie zatrzymywać się na błędach. Aktywnie rozwijany i co ciekawe napisany jest w Pythonie.
  • JD-GUI
  • JAD
    • działa, ale obsługuje tylko Javę 1.4 i niżej. Dostępny również jako wtyczka Eclipse . Nie jest już w fazie rozwoju.
  •  29
    Author: bmaupin,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2014-12-22 16:00:27

    Używam Jad Decompiler .

    Jest do tego plugin Eclipse, jadeclipse . Jest całkiem ładny.

     18
    Author: sakana,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2016-07-15 13:21:08

    Procyon zawiera dekompilator. To FOSS.

     14
    Author: Janus Troelsen,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-06-10 14:02:51

    Sadza jest opcją dla nowszego kodu Javy. Przynajmniej ma tę zaletę, że jest nadal utrzymywana...

    Także, Java Decompiler jest dekompilatorem z samodzielnym interfejsem graficznym i integracją Eclipse.

    , Jdec nie został wymieniony, choć nie jest tak dopracowany jak inne opcje.

     13
    Author: Quinn Taylor,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2009-09-18 23:59:11

    JD-GUI jest naprawdę dobry. Możesz po prostu otworzyć plik JAR i przeglądać kod tak, jakby pracujesz nad IDE. Dobry towar.

     13
    Author: G Kumar,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2014-02-23 16:38:21

    Oto lista dekompilatorów z lutego 2015:

    Procyon , open-source, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

    CFR, free, no source-code available, http://www.benf.org/other/cfr/

    JD, Tylko do użytku niekomercyjnego, http://jd.benow.ca/

    Fernflower , open-source, https://github.com/fesh0r/fernflower,

    JAD - podano tylko tutaj z przyczyn historycznych. Free, no source-code available, http://varaneckas.com/jad/ Nieaktualna, nieobsługiwana i nie dekompiluje poprawnie Javy 5 i nowszej.

    Możesz przetestować wyżej wymienione Dekompilatory online, bez konieczności instalacji i dokonać własnego wyboru.

    Dekompilatory Javy w chmurze: http://www.javadecompilers.com/

     11
    Author: Andrew Rukin,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-12-24 11:19:51

    Istnieje kilka programów, których możesz użyć. Otrzymasz rzeczywisty kod Javy, ale czasami kod ten zostanie zaciemniony, więc metody są nazwane jedną literą lub cyfrą lub losową mieszanką liter i cyfr.

    DJ Decompiler Mocha

     10
    Author: Mike Pone,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2014-11-19 18:21:45

    Większość dekompilatorów dla Javy opiera się na JAD . Jest to świetne narzędzie, ale niestety nie zostało zaktualizowane przez jakiś czas i nie obsługuje bardzo dobrze klas Java 1.5+. Nie widziałem żadnych narzędzi, które będą poprawnie obsługiwać klasy 1.5+.

     9
    Author: John Meagher,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2008-11-07 16:18:26

    Spójrz na cavaj .

     6
    Author: Paulo Guedes,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2008-11-07 16:02:55

    Wszystkie linki jad wymienione do tej pory wydają się być zepsute, więc znalazłem tę stronę. Działa świetnie (przynajmniej dla Linuksa)! Na Ubuntu 11.10 musiałem pobrać statyczny z jakiegokolwiek powodu.

    Http://www.varaneckas.com/jad

     6
    Author: kdazzle,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2012-04-04 03:11:15
    • JAD to taki, który działa i jest prosty.

    • Ponadto, jeśli chcesz tylko zobaczyć metody, użyj javap.

     5
    Author: Berlin Brown,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2011-03-13 05:41:45

    Jeśli chcesz zobaczyć, jak kompilator Javy wykonuje pewne rzeczy, nie chcesz dekompilacji, chcesz dezasemblować. Dekompilacja polega na przekształceniu kodu bajtowego w źródło Javy, co oznacza, że wiele informacji niskiego poziomu jest traconych, a jeśli zastanawiasz się nad optymalizacją kompilatora, to prawdopodobnie są to informacje, które Cię interesują.

    W każdym razie, tak się składa, że napisałem open source Java disassembler. W przeciwieństwie do Javap, działa to nawet na wysoce patologicznych klasy, dzięki czemu możesz zobaczyć, co narzędzia maskujące robią również z Twoimi klasami. Może również dekompilować, choć nie polecam.

     5
    Author: Antimony,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2012-11-30 03:13:59

    JAD nie działa dla mnie (Ubuntu 11.10 problem) więc posunąłem się do przodu i skoczyłem na JODO . Przynajmniej ma otwarty kod źródłowy Javy i był w stanie dekompilować mój .klasa

    Polecam najpierw sprawdzić 'Branch/generic' branch. Pnie nie są stabilne.

     4
    Author: alexander.box,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2013-06-25 17:52:07

    Na Platformie IntelliJ IDEA można użyć Java Decompiler IntelliJ Plugin. Umożliwia wyświetlanie wszystkich źródeł Java podczas procesu debugowania, nawet jeśli nie masz ich wszystkich. Jest on oparty na słynnych narzędzi JD-GUI.

    Tutaj wpisz opis obrazka

     4
    Author: naXa,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2015-10-23 08:36:03

    Za pomocą AndroChef Java Decompiler możesz dekompilować pliki klas apk, dex, jar i java. To proste i łatwe. AndroChef JD opiera się na FernFlower . Możesz go ocenić w 10 darmowych zastosowaniach.

    AndroChef obsługuje funkcje języka Java, takie jak generics, enums i adnotacje. Według niektórych badań AndroChef Java Decompiler jest w stanie dekompilować 98,04% aplikacji Java generowanych za pomocą tradycyjnych kompilatorów Javy - bardzo wysoki wskaźnik odzyskiwania. To proste, ale potężne narzędzie, które pozwala na dekompilację Java i Dalvik bytecode (DEX, APK) do czytelnego Źródła Java.

     1
    Author: naXa,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2015-10-23 08:44:20

    Dla OSX polecam: jarzilla lub JD-GUI

    Oba pozwalają na oglądanie jar, war, itp. zawartość pliku i dekompiluje pliki klas w nich zawartych.

    Jarzilla: https://code.google.com/p/jarzilla/
    JD-GUI: http://jd.benow.ca/

     1
    Author: cjackson,
    Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
    2017-02-02 16:01:12