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

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

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

Искусство «декомпиляции» также можно рассматривать как обратный инжиниринг. Хотя иногда при обратном проектировании чего-либо у вас не всегда есть доступ к двоичным файлам.

Makach 13.06.2009 14:53

Никто не упомянул bytecodeviewer.com, который можно декомпилировать в исходный код Java и в байт-код (поскольку исходный код Java основан на JAD).

Fernando Gonzalez Sanchez 08.01.2018 19:32
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
556
2
809 876
19
Перейти к ответу Данный вопрос помечен как решенный

Ответы 19

Взгляните на кавай.

Это также использует jad внизу.

Quinn Taylor 19.09.2009 03:47

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

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

Вместо этого я бы порекомендовал один из декомпиляторов с открытым исходным кодом, так как они активно развиваются. Вместо этого используйте Процион, Декомпилятор CFR или Кракатау (Python).

Janus Troelsen 22.08.2013 15:26

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

  1. Процион: с открытым исходным кодом (Apache 2) и активно развивается
  2. Кракатау: с открытым исходным кодом (GPLv3) и активно разрабатывается
  3. CFR: с открытым исходным кодом (MIT) и активно разрабатывается
  4. JAD
  5. Декомпилятор DJ Java
  6. Мокко

И многое другое.

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

Могу также добавить, что Procyon, CFR, JAD и DJ доступны как веб-сервис: javadecompilers.com

Andrew Rukin 12.12.2015 14:21
javadecompilers.com - братан спаситель!
MarcoZen 08.02.2016 23:50
kpdus.com/jad.html - это какая-то AD ссылка
marcinj 07.11.2016 18:15

Спасибо @marcinj, я нашел еще одну ссылку, по которой есть ссылки для ее загрузки.

billjamesdev 07.11.2016 18:37

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

DJ ДекомпиляторМокко

Я использую Декомпилятор JAD.

Для этого есть плагин Затмение, нефритовый затмение. Это очень мило.

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

вот, пожалуйста: я только что отправил ответ на ваш ответ;) Поддерживается JDK1.5 и другие!

VonC 07.11.2008 19:19

«Я не видел никаких инструментов, которые бы правильно обрабатывали 1.5+ классов» - Procion, Fernflower, JDCore и CFR (этот обрабатывает Java 8!)

Andrew Rukin 11.08.2015 18:56
Ответ принят как подходящий

Обновление от февраля 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 г.

  • Последний выпуск 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) имеет:

  • Явная поддержка декомпиляции и анализа файлов «.class» Java 5+.
  • Хороший графический интерфейс:

screenshot

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

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

+1 Стоит упомянуть, что он также модульный, поэтому ядро ​​(реализованное на C++) может быть использовано в другом месте.

Quinn Taylor 05.05.2010 08:02

jd-gui-0.3.3 также доступен здесь

amaidment 03.07.2012 11:55

+1 за информацию! Если декомпиляторы Java чертовски просты, как можно защитить свой IP-адрес? Есть ли способ обфускации для работы с этими декомпиляторами?

Rishi 15.08.2012 20:56

@Rishi, я полагаю, есть, когда я смотрю на stackoverflow.com/search?q=[java visible+obfuscation

VonC 15.08.2012 23:27

Если кто-то установил плагин декомпилятора Java Eclipse на Eclipse Juno, и Eclipse начал зависать на Marketplace DND Initialization, вынуждая убить весь процесс: удаление jd. *. Jar из каталога плагинов Eclipse просто исправило его для меня.

LSerni 24.02.2013 16:12

Если вам не нравится использовать jd-gui, вы можете следовать этим инструкциям и сгенерировать иерархию папок для кода: stackoverflow.com/a/1384652/198348

Ehtesh Choudhury 28.04.2013 22:15

@Rishi - так же, как вы защищаете свою IP на любом языке или платформе - хорошие юристы. DRM - это всего лишь бандаж.

Antimony 15.06.2013 23:26

Есть только небольшая нехватка (например, некоторые типы не восстанавливаются), но в целом это отличный инструмент, VonC

CuongHuyTo 10.07.2013 15:45

Проект JD-GUI устарел и давно умер.

Tomáš Zato - Reinstate Monica 09.02.2016 14:13

Теперь он предлагает SaaS, где вы загружаете файл .class в облако, и он возвращает вам декомпилированный код. Работал на простом POJO.

Salvador Valencia 15.09.2017 23:43

@SalvadorValencia Спасибо. Я включил ваш комментарий в ответ для большей наглядности.

VonC 16.09.2017 00:45

@Salvador Valencia Пожалуйста, добавьте источники.

davidxxx 05.03.2018 13:58

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

Кроме того, Декомпилятор Java - это декомпилятор с автономным графическим интерфейсом и интеграцией с Eclipse.

Наконец, не упоминается Jdec, хотя он не так совершенен, как другие варианты.

Вы знаете, как декомпилировать конкретный файл класса с помощью Soot? Я не уверен, что это возможно ...

Janus Troelsen 10.06.2013 18:01
  • JAD - это тот, который работает и прост.

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

JD-GUI действительно хорош. Вы можете просто открыть файл БАНКА и просмотреть код, как если бы вы работаете над IDE. Хорошая вещь.

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

http://www.varaneckas.com/jad

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

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

Процион включает декомпилятор. Это СОПО.

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

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

JODO - это периодически поддерживается, в то время как CFR и Procyon активно развиваются и имеют поддержку JDK 8.

Janus Troelsen 22.08.2013 15:30

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

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

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

Обратите внимание, что функция IGNORE_EXCEPTIONS теперь заменена флагом командной строки -skip.

Antimony 30.11.2014 07:12

Вот список декомпиляторов по состоянию на февраль 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/

Процион лучше всех работает !!!!

MarcoZen 08.02.2016 23:52

Для 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?

naXa 22.10.2015 19:28

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

@ NoOP's Вы робот? Или просто не обращая внимания на предмет обзора?

naXa 23.10.2015 09:38

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

ashiquzzaman33 23.10.2015 10:15

Это не дает ответа на вопрос. Чтобы критиковать или запрашивать разъяснения у автора, оставьте комментарий под его сообщением.

Kristijan Iliev 23.10.2015 10:39

@ Крис, вы пробовали предлагаемое решение? У тебя вообще есть прочтите вопрос?

naXa 23.10.2015 11:11

@ NoOP извиняется за грубость = (Я поражен количеством рецензентов, которые не обращают внимания.

naXa 23.10.2015 11:42

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