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

StackOverflow https://stackoverflow.com/questions/272535

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

Это было полезно?

Решение

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

www.javadecompilers.com перечисляет ДЖАДА как находящегося:

самый популярный Java-декомпилятор, но в основном только для этого возраста.Написано на C ++, поэтому очень быстрое.
Устаревшая, неподдерживаемая и некорректно декомпилирующая 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-декомпилятором, написанным Mr.Павел Кузнецов, является JDK 1.3.
  • Большинство Java-декомпиляторов, загружаемых сегодня из Интернета, таких как “DJ Java Decompiler" или “Cavaj Java Decompiler”, работают на базе JAD:они не могут отображать исходные тексты Java 5.

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

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

screenshot

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

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

Другие советы

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

<Ол>
  • Procyon : с открытым исходным кодом (Apache 2) и активно развивающийся
  • Кракатау : с открытым исходным кодом (GPLv3) и активно развивается
  • CFR : с открытым исходным кодом (MIT) и активно развивается
  • JAD
  • DJ Java Decompiler
  • Мокко
  • и многое другое.

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

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

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

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

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

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

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

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

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

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

    Кроме того, Java Decompiler - это декомпилятор, имеющий как одиночная интеграция 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/ папоротник ,

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

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

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

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

    Ознакомьтесь с cavaj .

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

    http://www.varaneckas.com/jad

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

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

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

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

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

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

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

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

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

      

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

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

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

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

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top