Как "декомпилировать" файлы классов Java?

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

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

Ответ 1

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

www.javadecompilers.com перечисляет JAD как:

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

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

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

И javadecompiler, как отметил Salvador Valencia в комментариях (сентябрь 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 (Еще один декомпилятор Fast Java):

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

screenshot

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

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

Ответ 2

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

  • Procyon: open-source (Apache 2) и активно развивается
  • Krakatau: open-source (GPLv3) и активно развивается
  • CFR: open-source (MIT) и активно развитый
  • JAD
  • DJ Decompiler
  • Mocha

И еще много.

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

Ответ 3

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

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

Ответ 4

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

Это другие, которые я пробовал:

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

Ответ 6

Procyon включает декомпилятор. Это FOSS.

Ответ 7

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

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

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

Ответ 8

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

Ответ 9

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

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

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

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

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

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

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

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

Ответ 10

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

DJ Decompiler Mocha

Ответ 11

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

Ответ 12

Взгляните на cavaj.

Ответ 13

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

http://www.varaneckas.com/jad

Ответ 14

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

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

Ответ 15

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

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

Ответ 16

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

Я рекомендую сначала проверить ветвь "ветки/общий". Сундуки нестабильны.

Ответ 17

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

введите описание изображения здесь

Ответ 18

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

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

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

Ответ 19

С AndroChef Java Decompiler вы можете декомпилировать apk, dex, jar и java class-files. Это просто и просто. AndroChef JD основан на FernFlower. Вы можете оценить его в 10 бесплатных использованиях.

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