Как "декомпилировать" файлы классов 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+ ".класс" файлы.
- хороший графический интерфейс:
Он работает с компиляторами от JDK 1.1.8 до JDK 1.7.0, и другие (Jikes, виртуальная машина JRockit, etc.).
Он имеет онлайн демо-версия что на самом деле полностью функциональный! Вы можете просто удалить файл jar на странице и увидеть декомпилированный исходный код без установки чего-либо.
есть несколько декомпиляторов там... Быстрый поиск дает:
- Процион: С открытым исходным кодом (Apache 2) и активно развивается
- Кракатау: С открытым исходным кодом (GPLv3) и активно развивается
- CFR: С открытым исходным кодом (MIT) и активно развивается
- Джад
- декомпилятор DJ Java
- МОКа
и гораздо больше.
Они производят Java-код. Java поставляется с чем-то, что позволяет вам видеть байтовый код JVM (javap и).
чтобы увидеть исходный код Java, проверьте некоторый декомпилятор. Идите искать jad.
Если вы хотите увидеть байт-коды, просто используйте javap, который поставляется с JDK.
я попробовал несколько, и Процион казалось, работает лучше для меня. Он находится в активной разработке и поддерживает многие функции последних версий Java.
Это другие, которые я пробовал:
-
CFR
- перспективный, но часто неудачный метод декомпиляции. Я буду следить за этим. Также активно разрабатывается с поддержкой новейших Java особенности.
-
Кракатау
- принимает другой подход в том, что он пытается вывести эквивалентный Java-код вместо того, чтобы пытаться восстановить исходный источник, который имеет потенциал сделать его лучше для запутанного кода. Из моего тестирования это было примерно на одном уровне с Проционом, но все же приятно иметь что-то другое. Мне пришлось использовать
-skip
флаг командной строки, чтобы он не останавливался на ошибках. Активно развивается, и интересно, что он написан на Python.
- принимает другой подход в том, что он пытается вывести эквивалентный Java-код вместо того, чтобы пытаться восстановить исходный источник, который имеет потенциал сделать его лучше для запутанного кода. Из моего тестирования это было примерно на одном уровне с Проционом, но все же приятно иметь что-то другое. Мне пришлось использовать
-
JD-GUI
- работал, но выход Проциона был намного лучше. Вот страница, сравнивающая выход Procyon с оригиналом и JD-GUI. JD-GUI также доступен как Eclipse-плагин, что не сработало для меня вообще. Кажется, не является открытым исходным кодом, а развитие кажется спорадический.
-
Джад
- работает, но поддерживает только Java 1.4 и ниже. Также доступно как Eclipse-плагин. Больше не разрабатывается.
Я использую Jad Decompiler.
есть затмение плагин для него, jadeclipse. Это довольно мило.
сажа опция для новой Java-код. По крайней мере, у него есть то преимущество, что он все еще поддерживается...
и Декомпилятор Java является декомпилятором с автономным GUI и интеграцией Eclipse.
и наконец, Jdec не упоминалось, хотя это не так отполировано, как другие варианты.
вот список декомпиляторов по состоянию на февраль 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, но иногда код будет запутан, поэтому методы называются одной буквой или числом или случайным сочетанием букв и чисел.
большинство декомпиляторов для Java основаны на JAD. Это отличный инструмент, но, к сожалению, не обновлялся некоторое время и не очень хорошо обрабатывает классы Java 1.5+. Я не видел никаких инструментов, которые будут правильно обрабатывать классы 1.5+.
все ссылки JAD, перечисленные до сих пор, кажется, сломаны, поэтому я нашел этот сайт. Отлично работает (по крайней мере, для Linux)! На Ubuntu 11.10 мне пришлось загрузить статический по какой-то причине.
JAD-это тот, который работает и проста.
кроме того, если вы просто хотите увидеть методы, используйте javap.
Если вы хотите увидеть, как компилятор Java делает определенные вещи, вам не нужна декомпиляция, вам нужна разборка. Декомпиляция включает в себя преобразование байт-кода в источник Java, что означает, что много информации низкого уровня теряется, и если вам интересно об оптимизации компилятора, это, вероятно, та самая информация, которая вас интересует.
Так или иначе, я написал С открытым исходным кодом Java disassembler. В отличие от Javap, это работает даже на очень патологические классы, поэтому вы можете видеть, что инструменты обфускации делают с вашими классами. Он также может выполнять декомпиляцию, хотя я бы не рекомендовал его.
JAD не работает для меня (проблема Ubuntu 11.10), поэтому я продвинулся вперед и так далее Дзедо. По крайней мере, он имеет открытый исходный код Java и смог декомпилировать мой .класс!--4--> правильно.
Я рекомендую проверить 'ветви / generic' ветку. Стволы не стабильны.
на платформе IntelliJ IDEA вы можете использовать Java Декомпилятор IntelliJ Плагин. Он позволяет отображать все источники Java во время процесса отладки, даже если у вас их нет. Он основан на известных инструментах JD-GUI.
с 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/