Вопрос-ответ

How do I "decompile" Java class files? [closed]

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



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

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

Переведено автоматически
Ответ 1

Обновление за февраль 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 Decompiler (еще один быстрый Java-декомпилятор) имеет:


  • Явная поддержка декомпиляции и анализа Java 5+ файлов ”.class".

  • Приятный графический интерфейс:

скриншот

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

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

Ответ 2

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


  1. Procyon: с открытым исходным кодом (Apache 2) и активно разрабатывается

  2. Krakatau: с открытым исходным кодом (GPLv3) и активно разрабатывается

  3. CFR: с открытым исходным кодом (MIT) и активно разрабатывается

  4. JAD

  5. DJ Java Decompiler

  6. 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. Больше не разрабатывается.


java