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

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

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

19 ответов


Обновление Февраль 2016 Года:

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

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

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

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

и javadecompiler, как отмечено Сальвадор-Валенсия на комментарии (сентябрь 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 (еще один быстрый декомпилятор Java) имеет:

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

screenshot

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

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


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

  1. Процион: С открытым исходным кодом (Apache 2) и активно развивается
  2. Кракатау: С открытым исходным кодом (GPLv3) и активно развивается
  3. CFR: С открытым исходным кодом (MIT) и активно развивается
  4. Джад
  5. декомпилятор DJ Java
  6. МОКа

и гораздо больше.

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


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

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


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

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

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

Я использую Jad Decompiler.

есть затмение плагин для него, jadeclipse. Это довольно мило.


Процион включает декомпилятор. Это Фосс.


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

и Декомпилятор Java является декомпилятором с автономным GUI и интеграцией Eclipse.

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


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


вот список декомпиляторов по состоянию на февраль 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,

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

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

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


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

DJ декомпилятор МОКа


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


посмотри cavaj.


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

http://www.varaneckas.com/jad


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

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


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

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


JAD не работает для меня (проблема Ubuntu 11.10), поэтому я продвинулся вперед и так далее Дзедо. По крайней мере, он имеет открытый исходный код Java и смог декомпилировать мой .класс!--4--> правильно.

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


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

enter image description here


с AndroChef Java-Декомпиляторами вы можете декомпилировать apk, dex, jar и Java class-файлы. Это просто и легко. AndroChef JD основан на FernFlower. Вы можете оценить его в 10-случаи свободного использования.

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


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

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

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