Какую программу я могу использовать для декомпиляции файла класса? Получу ли я код Java или это просто ассемблерный код JVM?
На вопросы производительности Java на этом сайте я часто вижу ответы людей, которые «декомпилировали» файл класса Java, чтобы увидеть, как компилятор оптимизирует определенные вещи.
Никто не упомянул bytecodeviewer.com, который можно декомпилировать в исходный код Java и в байт-код (поскольку исходный код Java основан на JAD).




Взгляните на кавай.
Это также использует jad внизу.
Чтобы увидеть исходный код Java, проверьте какой-нибудь декомпилятор. Найдите дрянь.
Если вы хотите увидеть байт-коды, просто используйте javap, который поставляется с JDK.
Вместо этого я бы порекомендовал один из декомпиляторов с открытым исходным кодом, так как они активно развиваются. Вместо этого используйте Процион, Декомпилятор CFR или Кракатау (Python).
Есть несколько декомпиляторов ... Быстрый поиск дает:
И многое другое.
Они создают код Java. В Java есть что-то, что позволяет вам видеть байт-код JVM (javap).
Могу также добавить, что Procyon, CFR, JAD и DJ доступны как веб-сервис: javadecompilers.com
Спасибо @marcinj, я нашел еще одну ссылку, по которой есть ссылки для ее загрузки.
Вы можете использовать несколько программ. Вы получите фактический код Java, но иногда код будет запутанным, поэтому методы называются одной буквой или числом или случайным сочетанием букв и цифр.
Я использую Декомпилятор JAD.
Для этого есть плагин Затмение, нефритовый затмение. Это очень мило.
Большинство декомпиляторов для Java основаны на JAD. Это отличный инструмент, но, к сожалению, он давно не обновлялся и плохо справляется с классами Java 1.5+. Я не видел инструментов, которые бы правильно обрабатывали 1,5+ классов.
вот, пожалуйста: я только что отправил ответ на ваш ответ;) Поддерживается JDK1.5 и другие!
«Я не видел никаких инструментов, которые бы правильно обрабатывали 1.5+ классов» - Procion, Fernflower, JDCore и CFR (этот обрабатывает Java 8!)
Обновление от февраля 2016 г .:
www.javadecompilers.com перечисляет JAD как:
the most popular Java decompiler, but primarily of this age only. Written in C++, so very fast.
Outdated, unsupported and does not decompile correctly Java 5 and later
Таким образом, ваш опыт может отличаться от недавнего jdk (7, 8).
На этом же сайте перечислены другие инструменты.
И javadecompiler, как отмечает Сальвадор Валенсия в комментарии (сентябрь 2017 г.), предлагает SaaS, в котором вы загружаете файл .class в облако, и он возвращает вам декомпилированный код.
Оригинальный ответ: октябрь 2008 г.
Декомпилятор Java (еще один быстрый декомпилятор Java) имеет:

Он работает с компиляторами от JDK 1.1.8 до JDK 1.7.0 и другими (Jikes, JRockit и т. д.).
Он имеет онлайн-живая демо-версия, который на самом деле полностью функциональный! Вы можете просто перетащить jar-файл на страницу и увидеть декомпилированный исходный код, ничего не устанавливая.
+1 Стоит упомянуть, что он также модульный, поэтому ядро (реализованное на C++) может быть использовано в другом месте.
jd-gui-0.3.3 также доступен здесь
+1 за информацию! Если декомпиляторы Java чертовски просты, как можно защитить свой IP-адрес? Есть ли способ обфускации для работы с этими декомпиляторами?
@Rishi, я полагаю, есть, когда я смотрю на stackoverflow.com/search?q=[java visible+obfuscation
Если кто-то установил плагин декомпилятора Java Eclipse на Eclipse Juno, и Eclipse начал зависать на Marketplace DND Initialization, вынуждая убить весь процесс: удаление jd. *. Jar из каталога плагинов Eclipse просто исправило его для меня.
Если вам не нравится использовать jd-gui, вы можете следовать этим инструкциям и сгенерировать иерархию папок для кода: stackoverflow.com/a/1384652/198348
@Rishi - так же, как вы защищаете свою IP на любом языке или платформе - хорошие юристы. DRM - это всего лишь бандаж.
Есть только небольшая нехватка (например, некоторые типы не восстанавливаются), но в целом это отличный инструмент, VonC
Проект JD-GUI устарел и давно умер.
Теперь он предлагает SaaS, где вы загружаете файл .class в облако, и он возвращает вам декомпилированный код. Работал на простом POJO.
@SalvadorValencia Спасибо. Я включил ваш комментарий в ответ для большей наглядности.
@Salvador Valencia Пожалуйста, добавьте источники.
Сажа - это опция для более нового кода Java. По крайней мере, у него есть то преимущество, что его до сих пор обслуживают ...
Кроме того, Декомпилятор Java - это декомпилятор с автономным графическим интерфейсом и интеграцией с Eclipse.
Наконец, не упоминается Jdec, хотя он не так совершенен, как другие варианты.
Вы знаете, как декомпилировать конкретный файл класса с помощью Soot? Я не уверен, что это возможно ...
JAD - это тот, который работает и прост.
Кроме того, если вы просто хотите увидеть методы, используйте javap.
Все ссылки на JAD, перечисленные до сих пор, кажутся неработающими, поэтому я нашел этот сайт. Отлично работает (по крайней мере, для Linux)! В Ubuntu 11.10 мне по какой-то причине пришлось загрузить статический.
Если вы хотите увидеть, как компилятор Java делает определенные вещи, вам не нужна декомпиляция, вам нужна разборка. Декомпиляция включает в себя преобразование байт-кода в исходный код Java, что означает, что теряется много низкоуровневой информации, и если вас интересует оптимизация компилятора, это, вероятно, именно та информация, которая вас интересует.
Во всяком случае, я написал дизассемблер Java с открытым исходным кодом. В отличие от Javap, это работает даже с крайне патологическими классами, поэтому вы можете видеть, что инструменты запутывания делают и с вашими классами. Он также может выполнять декомпиляцию, хотя я бы не рекомендовал это делать.
Процион включает декомпилятор. Это СОПО.
JAD у меня не работает (проблема с Ubuntu 11.10), поэтому я продвинулся вперед и попробовал ДЖОДО. По крайней мере, у него есть исходный код Open Java и он смог правильно декомпилировать мой .класс.
Я рекомендую сначала проверить ветку 'филиалы / общий'. Стволы не стабильны.
JODO - это периодически поддерживается, в то время как CFR и Procyon активно развиваются и имеют поддержку JDK 8.
Я пробовал несколько, и мне показалось, что Процион работает лучше всего. Он находится в активной разработке и поддерживает многие функции последних версий Java.
Это другие, которые я пробовал:
-skip, чтобы он не останавливался на ошибках. Активно разрабатывается и, что интересно, написано на Python.Обратите внимание, что функция IGNORE_EXCEPTIONS теперь заменена флагом командной строки -skip.
Вот список декомпиляторов по состоянию на февраль 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,
JAD - приведено здесь только по историческим причинам. Бесплатно, исходный код недоступен, http://varaneckas.com/jad/ Устаревший, неподдерживаемый и некорректно декомпилируемый Java 5 и новее.
Вы можете протестировать вышеупомянутые декомпиляторы онлайн, установка не требуется и сделать свой собственный осознанный выбор.
Декомпиляторы Java в облаке:http://www.javadecompilers.com/
Процион лучше всех работает !!!!
Для OSX я рекомендую: jarzilla или JD-GUI
Оба они позволяют просматривать банку, войну и т. д. содержимое файла и декомпилирует любые файлы классов внутри них.
Джарзилла: https://code.google.com/p/jarzilla/
JD-GUI: http://jd.benow.ca/
С помощью Декомпилятор Java AndroChef вы можете декомпилировать файлы классов apk, dex, jar и java. Все просто и легко. AndroChef JD основан на ПапоротникЦветок. Вы можете оценить его в 10 бесплатных использованиях.
AndroChef supports Java language features like generics, enums and annotations. According to some studies, AndroChef Java Decompiler is able to decompile 98.04% of Java applications generated with traditional Java compilers - a very high recovery rate. It is simple but powerful tool that allows you to decompile Java and Dalvik bytecode (DEX, APK) into readable Java source.
@Dimitrius, пожалуйста, внимательно прочтите ответы во время обзора. Как вы себе представляете, что сюда можно добавить FernFlower или AndroChef?
На платформе IntelliJ IDEA вы можете использовать Плагин Java Decompiler IntelliJ. Он позволяет отображать все источники Java во время процесса отладки, даже если у вас их не все. В его основе лежит известный инструмент JD-GUI.
@ NoOP's Вы робот? Или просто не обращая внимания на предмет обзора?
Извините за это, на первый взгляд кажется, что ответ только по ссылке. Возможно, вам стоит добавить больше деталей, а также ваш ответ соответствует только заголовку вопроса, а не содержанию вопроса.
Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением.
@ Крис, вы пробовали предлагаемое решение? У тебя вообще есть прочтите вопрос?
@ NoOP извиняется за грубость = (Я поражен количеством рецензентов, которые не обращают внимания.
Искусство «декомпиляции» также можно рассматривать как обратный инжиниринг. Хотя иногда при обратном проектировании чего-либо у вас не всегда есть доступ к двоичным файлам.