Как мне “декомпилировать” файлы классов Java?[закрыто]
-
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”.
- Приятный графический интерфейс:
Он работает с компиляторами от JDK 1.1.8 до JDK 1.7.0 и другими (Шутки, ДЖрокит, и т.д.).
К услугам гостей онлайн- живая демо-версия это на самом деле полностью функционально!Вы можете просто поместить jar-файл на страницу и просмотреть декомпилированный исходный код, ничего не устанавливая.
Другие советы
Есть несколько декомпиляторов ... Быстрый поиск дает:
<Ол>и многое другое.
Они производят код Java. Java поставляется с чем-то, что позволяет вам видеть байт-код JVM ( javap ). р>
Чтобы увидеть исходный код Java, проверьте декомпилятор. Найдите Джад .
Если вы хотите видеть байт-коды, просто используйте javap , который поставляется с JDK.
Я попробовал несколько, и Процион казалось, это сработало для меня лучше всего.Он находится в активной разработке и поддерживает многие функции последних версий Java.
Это другие, которые я пробовал:
- CFR
- Многообещающий, но часто терпящий неудачу метод декомпиляции.Я буду следить за этим делом.Также активно разрабатывается с поддержкой новейших функций Java.
- Krakatau
- Использует другой подход, заключающийся в том, что он пытается вывести эквивалентный Java-код вместо того, чтобы пытаться реконструировать исходный код, что потенциально может улучшить его для запутанного кода.Судя по моему тестированию, он был примерно на одном уровне с Procyon, но все равно приятно иметь что-то другое.Мне действительно пришлось воспользоваться
-skip
установите флажок командной строки, чтобы она не останавливалась при ошибках.Активно разрабатывается, и, что достаточно интересно, написан на Python.
- Использует другой подход, заключающийся в том, что он пытается вывести эквивалентный Java-код вместо того, чтобы пытаться реконструировать исходный код, что потенциально может улучшить его для запутанного кода.Судя по моему тестированию, он был примерно на одном уровне с Procyon, но все равно приятно иметь что-то другое.Мне действительно пришлось воспользоваться
- JD-графический интерфейс пользователя
- Сработало, но производительность "Проциона" была намного лучше.Вот такой страница сравнения выходных данных Procyon с оригиналом и JD-GUI.JD-GUI также доступен в виде Плагин Eclipse, что у меня вообще не сработало.Похоже, у него нет открытого исходного кода, и разработка кажется спорадической.
- ДЖАД
- Работал, но поддерживает только Java 1.4 и ниже.Также доступен в качестве Плагин Eclipse.Больше не находится в стадии разработки.
Я использую JAD Decompiler .
Для этого есть Eclipse плагин, jadeclipse . Это довольно мило.
Procyon включает декомпилятор. Это FOSS.
Сажа - это вариант для более нового кода Java. По крайней мере, у него есть то преимущество, что оно все еще поддерживается ...
Кроме того, Java Decompiler - это декомпилятор, имеющий как одиночная интеграция 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/ папоротник ,
JAD & # 8211; дано здесь только по историческим причинам. Бесплатный, без исходного кода, http://varaneckas.com/jad/ Устаревший, неподдерживаемый и неправильно декомпилируемый Java 5 и новее.
Вы можете протестировать вышеупомянутые декомпиляторы онлайн, установка не требуется, и сделать свой собственный выбор. Р>
Java-декомпиляторы в облаке: http://www.javadecompilers.com/ а> р>
Есть несколько программ, которые вы можете использовать. Вы получите реальный код Java, но иногда код будет запутан, поэтому методы будут именоваться одной буквой или цифрой или случайным сочетанием букв и цифр.
Большинство декомпиляторов для Java основаны на JAD . Это отличный инструмент, но, к сожалению, он давно не обновлялся и не очень хорошо обрабатывает классы Java 1.5+. Я не видел никаких инструментов, которые будут правильно обрабатывать 1,5+ классов. Р>
Ознакомьтесь с cavaj .
Кажется, что все ссылки JAD, перечисленные до сих пор, не работают, поэтому я нашел этот сайт. Прекрасно работает (для Linux, по крайней мере)! В Ubuntu 11.10 мне пришлось по какой-то причине загрузить статический файл.
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/