2008-11-07 7 views
542

Какую программу я могу использовать для декомпиляции файла класса? Я действительно получу Java-код, или это просто код сборки JVM?Как «декомпилировать» файлы классов Java?

В вопросах производительности Java на этом сайте я часто вижу ответы от людей, которые «декомпилировали» файл класса Java, чтобы увидеть, как компилятор оптимизирует некоторые вещи.

+4

искусства «декомпиляция» также можно рассматривать, как при обратном проектировании. Хотя иногда при обратном проектировании вы не всегда имеете доступ к двоичным файлам. – Makach 2009-06-13 10:53:08

+0

Никто не упоминает https://bytecodeviewer.com/, который может декомпилировать исходный код java и байт-код (для источника java используется JAD). – 2018-01-08 16:32:44

ответ

576

Обновление февраля 2016:

www.javadecompilers.com списки JAD, как существо:

самым популярным Java декомпилятор, но в основном только этого возраста. Написано на C++, так очень быстро.
Устаревшие, не поддерживается и не декомпилировать правильно Java 5, а затем

Таким образом, ваш пробег может варьироваться в зависимости от недавней JDK (7, 8).

Этот же список сайтов других инструментов.

И javadecompiler, как отметил Salvador Valencia в the comments (сентябрь 2017 года), предлагает SaaS, где вы загружаете файл .class в облаке, и оно возвращает вам декомпилированный код.


Оригинальный ответ: окт 2008

  • Финальный релиз JSR 176, определяющий основные характеристики J2SE 5.0 (Java SE 5), был опубликован 30 сентября 2004 года
  • Последняя версия Java, поддерживаемая JAD, известным декомпилятором Java, написанная г-ном Павлом Кузнецовым, - JDK 1.3.
  • Большинство современных декомпиляторов Java, загружаемых сегодня из Интернета, таких как «DJ Java Decompiler» или «Cavaj Java Decompiler», работают на JAD: они не могут отображать источники Java 5.

Java Decompiler (Еще один быстрый декомпилятор Java) имеет:

  • Явная поддержка декомпиляции и анализа Java 5 + файлы «.class».
  • Хороший графический интерфейс:

Он работает с компиляторами от JDK 1.1.8 до версии JDK 1.7.0 и другие (Jikes, JRockit и т.д.).

В нем есть онлайн live demo version, который на самом деле полностью функциональный! Вы можете просто удалить файл jar на странице и увидеть декомпилированный исходный код, не устанавливая ничего.

+4

+1 Стоит отметить, что он также модульный, поэтому ядро ​​(реализовано на C++) можно использовать в другом месте. – 2010-05-05 04:02:28

+1

jd-gui-0.3.3 также доступен [здесь] (http://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q=) – amaidment 2012-07-03 07:55:16

6

Посмотрите на cavaj.

+3

Это также использует `jad` внизу. – 2009-09-18 23:47:16

51

Чтобы увидеть исходный код Java, проверьте некоторые декомпиляторы. Ищите поиск jad.

Если вы хотите посмотреть байт-коды, просто используйте javap, который поставляется с JDK.

+4

Я бы порекомендовал один из декомпиляторов с открытым исходным кодом, поскольку они активно развиваются. Используйте [Procyon] (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), декомпилятор [CFR decompiler] (http://www.benf.org/other/cfr/) или [Krakatau] (https: // GitHub.com/Storyyeller/Krakatau) (Python). – 2013-08-22 11:26:40

98

Есть несколько декомпиляторов там ... быстрый поиск дает:

  1. Procyon: с открытым исходным кодом (Apache 2) и активно развивается
  2. Krakatau: с открытым исходным кодом (GPLv3) и активно разработан
  3. CFR: с открытым исходным кодом (MIT) и активно развивается
  4. JAD
  5. DJ Java Decompiler
  6. Mocha

И многое другое.

Они производят код Java. Java поставляется с чем-то, что позволяет вам видеть байт-код JVM (javap).

+2

Могу ли я также добавить, что Procyon, CFR, JAD и DJ доступны в качестве веб-сервиса: http://www.javadecompilers.com/ – 2015-12-12 11:21:33

+0

http://www.javadecompilers.com/ - lifesaver bro! – MarcoZen 2016-02-08 20:50:40

+0

http://www.kpdus.com/jad.html - это некоторая ссылка AD – marcinj 2016-11-07 15:15:05

10

Существует несколько программ, которые вы можете использовать. Вы получите фактический код Java, но иногда код будет запутан, поэтому методы называются одной буквой или номером или случайным сочетанием букв и цифр.

DJ Decompiler Mocha

9

Большинство декомпиляторов для Java основаны на JAD. Это отличный инструмент, но, к сожалению, он не обновлялся некоторое время и не очень хорошо справляется с классами Java 1.5+. Я не видел никаких инструментов, которые должным образом обрабатывали бы 1.5+ классы.

+3

вот вы: я только что отправил ответ на ваш ответ;) JDK1.5 и более поддерживались! – VonC 2008-11-07 16:19:16

+0

«Я не видел никаких инструментов, которые должным образом обрабатывали бы более 1.5 классов» - Procion, Fernflower, JDCore и CFR (этот обрабатывает Java 8!) – 2015-08-11 15:56:41

13

Soot - это вариант для более нового кода Java. По крайней мере, это имеет то преимущество, что в последнее время поддерживается ...

Кроме того, Java Decompiler является декомпилятором как с автономным графическим интерфейсом, так и с интеграцией Eclipse.

И, наконец, Jdec не упоминается, хотя это не так полируется, как другие варианты.

5
  • JAD - это тот, который работает и прост.

  • Кроме того, если вы просто хотите увидеть методы, используйте javap.

12

JD-GUI действительно хорошо. Вы можете просто открыть файл JAR и просмотреть код, как если бы вы работаете над IDE. Хорошая вещь.

6

Все ссылки JAD, перечисленные далеко далеко, как представляется, сломаны, поэтому я нашел этот сайт. Отлично работает (для Linux, по крайней мере)! На Ubuntu 11.10 мне приходилось загружать статическую по любой причине.

http://www.varaneckas.com/jad

5

Если вы хотите увидеть, как компилятор Java делает некоторые вещи, вы не хотите декомпилировать, вы хотите разборку. Декомпиляция включает в себя преобразование байт-кода в источник Java, что означает, что теряется много информации о низком уровне, и, если вам интересно, оптимизация компилятора, это, вероятно, самая интересующая вас информация.

В любом случае, я бываю написали open source Java disassembler. В отличие от Javap, это работает даже на высокопатологических классах, поэтому вы можете видеть, какие инструменты обфускации делают с вашими классами. Он также может выполнять декомпиляцию, хотя я бы не рекомендовал его.

4

JAD не работает для меня (выпуск Ubuntu 11.10), поэтому я переехал вперед и обрушил на JODO. По крайней мере, он имеет исходный код Open Java и был способен декомпилировать мой .class должным образом.

Рекомендую посмотреть 'branch/generic' ветка первая. Сундуки нестабильны.

28

Я пробовал несколько, и Procyon, казалось, работал лучше для меня. Он находится в активной разработке и поддерживает множество функций последних версий Java.

Это другое я пытался:

  • CFR
    • многообещающей, но часто не метод декомпиляция. Я буду следить за этим. Также активно развивается поддержка новейших функций Java.
  • Krakatau
    • принимает другой подход в том, что он пытается выводить эквивалентный код Java вместо того, чтобы пытаться восстановить исходный источник, который имеет потенциал сделать его лучше для запутанным кода. Из моих тестов это было примерно наравне с Procyon, но все же приятно иметь что-то другое. Мне пришлось использовать флаг командной строки -skip, чтобы он не останавливался на ошибках. Активно развивается, и достаточно интересно это написано на Python.
  • JD-GUI
    • работал, но выход Процион был намного лучше. Вот page comparing Procyon output to the original and JD-GUI. JD-GUI также доступен как Eclipse plugin, который не работает для меня вообще. Кажется, что это не с открытым исходным кодом, а развитие кажется спорадическим.
  • JAD
    • работал, но только поддерживает Java 1.4 и ниже. Также доступен как Eclipse plugin. Больше не разрабатывается.
9

Вот список декомпиляторов по состоянию на февраль 2015 года:

Процион с открытым исходным кодом, https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler

CFR, бесплатно, без исходного кода доступны, http://www.benf.org/other/cfr/

JD, бесплатный для некоммерческих пользователей е только http://jd.benow.ca/

Fernflower, с открытым исходным кодом, https://github.com/fesh0r/fernflower,

JAD - здесь приведены только по историческим причинам. Бесплатно, исходный код отсутствует, http://varaneckas.com/jad/ Устаревший, неподдерживаемый и не декомпилирует правильно Java 5 и более поздних версий.

Вы можете протестировать вышеупомянутые декомпиляторы в Интернете, не требуется установка и сделать свой собственный образованный выбор.

Java декомпиляции в облаке:http://www.javadecompilers.com/

1

Для OSX Я рекомендую: jarzilla или JD-GUI

Они оба позволяют просматривать баночку, войны и т.д.. содержимое файла и декомпилирует любые файлы классов внутри них.

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

1

С AndroChef Java Decompiler вы можете декомпилировать APK, DEX, фляга и класс Java-файлы. Это просто и легко. AndroChef JD основан на FernFlower. Вы можете оценить его в 10 бесплатных использованиях.

AndroChef поддерживает функции языка Java, такие как дженерики, перечисления и аннотации. Согласно некоторым исследованиям, AndroChef Java Decompiler способен декомпилировать 98,04% приложений Java, сгенерированных традиционными компиляторами Java, - очень высокая скорость восстановления. Это простой, но мощный инструмент, который позволяет декомпилировать байт-код Java и Dalvik (DEX, APK) в читаемый источник Java.

3

На платформе IntelliJ IDEA вы можете использовать Java Decompiler IntelliJ Plugin. Он позволяет отображать все источники Java во время процесса отладки, даже если у вас их нет. Он основан на известных инструментах JD-GUI.

enter image description here