Во java decompiler linux

Java Decompiler

The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

JD-Eclipse is a plug-in for the Eclipse platform. It allows you to display all the Java sources during your debugging process, even if you do not have them all.

JD-Core is a library that reconstructs Java source code from one or more “.class” files. JD-Core may be used to recover lost source code and explore the source of Java runtime libraries. New features of Java 5, such as annotations, generics or type “enum”, are supported. JD-GUI and JD-Eclipse include JD-Core library.

JD-Core, JD-GUI & JD-Eclipse are open source projects released under the GPLv3 License.

  • JD-Core and JD-GUI are written in Java.
  • JD-Core works with most current compilers including the following:
    • JDK 1.1.8, JDK 1.3.1, JDK 1.4.2, JDK 1.5.0, JDK 1.6.0, JDK 1.7.0, JDK 1.8.0, JDK 9.0.1, JDK 10.0.2
    • jrockit90_150_06
    • jikes-1.22
    • harmony-jdk-r533500
    • Eclipse Java Compiler v_677_R32x, 3.2.1 release
  • JD-GUI supports Drag and Drop.
  • JD-GUI supports CLASS, JAR, WAR, EAR, AAR, KAR, JMOD & ZIP files.
  • JD-GUI displays color coded Java source code.
  • JD-GUI allows you to browse the CLASS files and Java modules hierarchy.
  • JD-GUI lets you drag and drop LOG files, decompile CLASS files, and display the line of code that appears in Java stack traces.

JD-GUI

JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

Источник

Java Hungry

Java developers tutorials and coding.

8 Best Java Decompilers in 2021

What is Java Decompiler ?

Java decompiler converts .class file into java source code. In other words, decompiler converts bytecode into readable .java format.You can use java decompiler to look into the code of predefined java classes like HashMap, HashSet , ArrayList etc. You can find out how Sun/Oracle java developers wrote the java classes which are currently used by billion of devices in the world.

Java source code from which the .class file has been generated will not exactly match the java source code generated from the java decompiler. But most of the code will be same.

After installing java, you can find the predefined java classes in the rt.jar inside JRE folder. Unzip rt.jar and all the predefined java classes will be present in the bytecode(.class) format. By using java decompiler, I have written the articles how HashMap works in java, how HashSet works in java. So let’s find out best java decompilers which I have used and now I am recommending it to you.

Best Java Decompilers

JDProject is one of the most frequently used java decompiler offline.It is developed to decompile java 5 or later versions(as of now till java8). It is available for Windows, Mac OS and Linux. It is a best decompiler for eclipse and intellij too as it provides plugin for each platform. JD-Eclipse is a plug-in for the Eclipse platform while JD-Intellij is a plug-in for Intellij IDEA.
You can download JDProject java decompiler from here

Procyon is a java decompiler developed by Mike Strobel. Procyon decompiler handles java language enhancements from jdk 1.5 and beyond that most other decompilers don’t. Procyon does well with enum declarations, annotations and java 8 lambdas and method references. You can find the wiki here comparing Original code, Procyon decompiler code and JD decompiler code. Although wiki above makes Procyon looks good, but I still prefer JDProject over Procyon. Procyon is relatively new and still work in progress.

If you are a Windows user, then Cavaj is a good option as a decompiler. It is simple to use and decompiles nearly any java class file. The main drawback of Cavaj is that it lacks syntax highlighting.
Also, it is not available for Mac or Linux OS. In short, it is a freeware standalone windows application which converts bytecode(.class) files to java source code.

DJ Java Decompiler is yet another standalone windows application. It is available for Windows XP, Windows 2003, Windows Vista, Windows 7, Windows 8, 8.1 and 10. You don’t need to have the JVM (Java Virtual Machine) or any other java JDK installed. The main advantage of DJ Java Decompiler is that you can decompile more than one java class file at one time. DJ Decompiler enables users to users to save, print, edit and compile the generated java code.

JBVD stands for java bytecode viewer and decompiler. It is based on the javassist open source library. It is only available for Windows OS. JBVD requires java to be installed on your device to work.

Читайте также:  Язык скриптов для windows

AndroChef is also a windows based java decompiler application. With AndroChef Java Decompiler you can decompile apk., dex, jar and java class-files. It’s simple and easy. AndroidChef supports Windows XP, Windows 2003, Windows Vista, Windows 7, Windows 8, 8.1 and 10. AndroChef successfully decompiles java6, java 7 and java 8 .jar and .class files.

CFR stands for Class File Reader. It is completely written in java 6. It supports latest features of java8 like lambdas while decompiling. You do not need to worry if you are using java 8. The only drawback of this decompiler is that it is not an open source program. Although, it has a command line tool which is ideal in making the decompiling process efficient and faster.

Fernflower is an analytical decompiler for java. It is used to decompile class, zip and jar file extensions. It is still under development.

Источник

Декомпиляция Java приложений

Декомпиляция — процесс воссоздания исходного кода декомпилятором

Недавно я задался вопросом: Какой декомпилятор лучше?
Начал мучить Google, экспериментировать. В итоге нашел отличное решение. Как декомпильнуть любую программу и получить рабочие «исходники»? Об этом в сабже.

Краткий обзор популярных декомпиляторов

Mocha

Mocha (автор — Hanpeter van Vliet)— это, вероятно, один из первых выпущенных декомпиляторов Java. Предоставляет консольный пользовательский интерфейс. Его релиз состоялся в 1996-ом году, ещё до того, как появился Java Development Kit версии 1.1

JAva Decompiler

JAva Decompiler, JAD (автор — Pavel Kouznetsov) — по всей видимости, самый
популярный декомпилятор Java. Как и Mocha, этот декомпилятор предоставляет консольный интерфейс, давно не обновляется и не поддерживается, но большое число графических инструментов для работы с ним, в том числе плагин JadClipse для среды разработки Eclipse, делают его и по сей день используемым в качестве подручного средства для декомпиляции небольших классов.
Помимо декомпиляции, JAva Decompiler обладает возможностью дизассемблирования .class-файлов.

DJ Java Decompiler

DJ Java Decompiler (автор — Atanas Neshkov) — долгое время вопреки названию являлся лишь графической оболочкой для предыдущего декомпилятора, позволявшей легко и удобно выбрать аргументы командной строки для вызова JAD. В текущей версии добавлена поддержка аннотаций, но декомпилятор стал условно-бесплатным (необходима покупка после 10 пробных использований).

JD-Core

JD-Core (автор — Emmanuel Dupuy) — очень мощная и функциональная библиотека для декомпиляции и анализа байткода Java, разработанная в рамках «Java Decompiler project».
Имеет следующие особенности:

  • Полностью написана на языке C++, что делает декомпиляцию необычайно быстрой
  • Не требует для работы Java Runtime Environment и поэтому не требует специальной установки
  • Корректно декомпилирует .class-файлы, сгенерированные большинством компиляторов

Пожалуй, к недостаткам JD-Core можно отнести лишь то, что она распространяется как
часть самостоятельного графического приложения JD-GUI, также разработанного на C++ и прилинкованного к ней статически, или плагина JD-Eclipse для среды разработки Eclipse, что делает практически невозможным её использование в стороннем некоммерческом проекте, особенно разработанном на языке Java. Использование библиотеки в коммерческих программных продуктах запрещено автором.

Fernflower

Fernflower — один из лучших декомпиляторов языка программирования Java на сегодняшний день.
Обладает следующими возможностями:
1. Поддерживает разнообразные языковые конструкции:

  • Параметрические типы
  • Аннотации
  • Перечислимые типы
  • Утверждения

2. Корректно декомпилирует байткод, сгенерированный вследствие некоторых известных багов компиляторов

Мой выбор

  1. JD-GUI — для просмотра, не более
  2. Fernflower — полное восстановление

Остановлюсь на втором. Вообще, автор данного декомпилятора вроде как не выкладывал оффлайн версию в общий доступ(или я упустил этот факт читая его блог), до последнего времени была только онлайн. Но для меня было приятным удивлением найти ее на одном форуме!

Fernflower будет развиваться в сторону деобфускатора

Специальных функций деобфускации Fernflower сейчас не содержит, они будут подключаться в дальнейшем отдельными модулями

Не хватает еще модуля переименования

ProGuardDeobfuscator — небольшая модификация программы ProGuard, превращающая ее в квази-деобфускатор. В процессе обработки короткие обфусцированные имена пакетов, классов, полей и методов заменяются на более осмысленные и уникальные в пределах Jar файла.

Скачать исходники и сам деобфускатор: projectd8.org/Programs/Java/PGD

Инструменты все есть, но лично я, для облегчения воссоздания сорцов использую так же любимую Netbeans IDE — очень сильно помогает своими подсказками, особенно когда классов много.
Спасибо за внимание!

Ссылки

UPD:
Извиняюсь, в offline версии Fernflower присутствует модуль переименований и уйма других штук — Readme

Источник

Во java decompiler linux

JD-GUI, a standalone graphical utility that displays Java sources from CLASS files.

JD-GUI is a standalone graphical utility that displays Java source codes of «.class» files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

How to build JD-GUI ?

  • «build/libs/jd-gui-x.y.z.jar»
  • «build/libs/jd-gui-x.y.z-min.jar»
  • «build/distributions/jd-gui-windows-x.y.z.zip»
  • «build/distributions/jd-gui-osx-x.y.z.tar»
  • «build/distributions/jd-gui-x.y.z.deb»
  • «build/distributions/jd-gui-x.y.z.rpm»

How to launch JD-GUI ?

  • Double-click on «jd-gui-x.y.z.jar»
  • Double-click on «jd-gui.exe» application from Windows
  • Double-click on «JD-GUI» application from Mac OSX
  • Execute «java -jar jd-gui-x.y.z.jar» or «java -classpath jd-gui-x.y.z.jar org.jd.gui.App»

How to use JD-GUI ?

  • Open a file with menu «File > Open File. «
  • Open recent files with menu «File > Recent Files»
  • Drag and drop files from your file explorer

How to extend JD-GUI ?

generate Idea Intellij project

generate Eclipse project

launch JD-GUI with your extensions

How to uninstall JD-GUI ?

  • Java: Delete «jd-gui-x.y.z.jar» and «jd-gui.cfg».
  • Mac OSX: Drag and drop «JD-GUI» application into the trash.
  • Windows: Delete «jd-gui.exe» and «jd-gui.cfg».
Читайте также:  Windows installing no mouse

Released under the GNU GPL v3.

Did JD-GUI help you to solve a critical situation? Do you use JD-Eclipse daily? What about making a donation?

Источник

Сравнительный анализ некоторых Java-декомпиляторов

В этой статье будут рассмотрены четыре декомпилятора — Fernflower, CFR, Procyon и jadx — и произведено их сравнение по нескольким параметрам.

Дисклеймер: сравнение неформальное и не претендует на научность. Скорее, это просто обзор всех актуальных (на осень 2019) декомпиляторов Java-байткода.

Автор — Анна Явейн (brontozyablik), разработчица Solar appScreener

Предыстория

Наш инструмент — Solar appScreener — предназначен для поиска уязвимостей в коде. Среди прочих языков он может анализировать и Java-байткод. Но самого по себе анализа мало: нужно показать результаты пользователю так, чтобы он мог интегрировать их в процесс разработки. Для этого недостаточно просто сказать «посмотрите на 147-ую байткод-инструкцию в методе таком-то». Чтобы эта информация была полезна программисту, нужно как-то сопоставить эти ошибки с исходным кодом.

Сразу же возникает проблема: а что делать, если исходники недоступны? Решение: можно декомпилировать байткод, найти в нем строки, соответствующие выявленным уязвимостям, и показывать пользователю сообщения об ошибках, привязанные к строкам в декомпилированном коде.

Итого, нам нужно уметь делать две вещи:

  • декомпилировать байткод;
  • строить соответствие между инструкциями в байткоде и строками исходного кода.

Спойлер: ни в одном из известных декомпиляторов (UPD: кроме Fernflower‘а) нету инструментария для того, чтобы осуществить второе. Так что соответствие между ошибками и строками декомпилированного кода мы строим отдельным этапом, уже после декомпиляции. О том, как это делается, рассказано в статье моего коллеги.

А сейчас я расскажу вам о первом пункте: собственно, декомпиляции.

Что нам нужно от декомпилятора

Разные декомпиляторы заточены под разные задачи. Например, заявлено, что Fernflower — аналитический (analytical) декомпилятор. Что это значит, нигде толком не объясняется, но по идее этот компилятор акцентирует внимание на более глубоком анализе и деобфускации кода. Для нас эта функциональность не очень важна (во всяком случае, при отображении результатов анализа). В целом, приоритетом для нас является понятность и читаемость получающегося кода.

Так что основные требования к инструментам таковы:

  • читаемый и (по возможности) корректный код в результате;
  • поддержка синтаксического сахара ( foreach , try-with-resources , etc).

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

Инструменты

Для сравнения были выбраны четыре опенсорсных проекта (были взяты самые актуальные версии на момент написания этого текста — осень 2019 года). Остальные были забракованы еще на предварительном этапе и подробно не анализировались.

  • Fernflower — опенсорсный декомпилятор, на текущий момент разрабатываемый и поддерживаемый компанией JetBrains. Код можно посмотреть на GitHub.
  • CFR (0.146) — декомпилятор, написанный, судя по всему, одним человеком, который говорит, что сделал это «for fun». Репозиторий на GitHub. Сайт с информацией о проекте.
  • Procyon (0.5.36) — набор инструментов, относящихся к генерации и анализу кода на Java. Среди них есть и декомпилятор. Этот проект хостится на Bitbucket.
  • jadx (1.0.0) — компилятор, предназначенный для компиляции байткода для Dalvik, а не для JVM. Исходники выложены на GitHub.

Полный список декомпиляторов, которые были рассмотрены, но не освещены подробно,

  • JD-Core (он же JD Project) — не опубликовано ни библиотеки, ни исходников (только плагины для сред разработки и gui).
    UPD: исходники были выложены на GitHub.
  • Krakatau — написан на питоне, почти не обновляется, не поддерживает Java 8.
  • JAD — безнадежно устарел (не поддерживает даже Java 5).

Есть еще декомпиляторы, работающие только под Windows: Cavaj, DJ Java Decompiler, JBVD, AndroChef. Вероятно, где-то существуют еще какие-то декомпиляторы, но мне о них ничего не известно. И это, вероятно, к лучшему.

Краткая техническая информация о декомпиляторах:

Fernflower CFR Procyon jadx
Лицензия Apache 2.0 MIT Apache 2.0 Apache 2.0
Библиотека неофициальное зеркало на гитхабе Maven: org.benf.cfr Maven: org.bitbucket.mstrobel Bintray
Какие версии Java поддерживает не указано 8, частично 9 большая часть 8 частично 8
Написан на Java 8 Java 6 Java 7 Java 8
Документация нет есть! немножко README на гитхабе

Важно не забывать, что jadx в первую очередь предназначен для проектов под Android. И чтобы анализировать код, написанный под jvm, декомпилятор сначала конвертирует его с помощью инструмента dx. Поскольку эта конвертация сама по себе бывает некорректна, адекватное сравнение jadx с другими инструментами провести невозможно, поэтому в большинстве случаев функционал jadx рассматривается отдельно.

Также jadx поддерживает DEX только до 37 версии, из-за чего у него возникают проблемы, например, с обработкой лямбд.

Сравнение

В сравнении участвовали Fernflower (версия с Гитхаба за 16.09.19), CFR (0.146), Procyon (0.5.36) и jadx (1.0.0). При этом сравнение с jadx проводилось не по всем параметрам.

Проект, на котором производилось сравнение, — сам Fernflower, так как у него относительно большая кодовая база, написанная целиком на Java 8. Причем в коде активно используются разные фичи языка. Код на более актуальной версии Java использовать было нельзя — Procyon не поддерживает Java 9 вообще, а CFR гарантирует поддержку только некоторых фич (про Fernflower ничего официально не сказано).

Если вам неинтересны детали и вы хотите сразу посмотреть результаты, это можно сделать в этом разделе.

Метрики

Поддержка и активность проекта

Fernflower

С одной стороны, этот декомпилятор используется в Intellij IDEA, что гарантирует жизнь и поддержку этого проекта.

С другой стороны, Fernflower — часть проекта Intellij IDEA. У самого декомпилятора нет даже отдельного репозитория на гитхабе (только упомянутое выше неофициальное зеркало, ссылка на которое — единственный способ подключить Fernflower к своему проекту как зависимость).

Если судить по репозиторию на гитхабе, активного добавления новых фич в этот проект не наблюдается. Последний коммит в master случился 3 месяца назад (состояние на осень 2019). Точнее понять, что происходит с этим проектом, трудно, так как кодовая база является частью репозитория Intellij IDEA.

Код пишется одним человеком, но релизы происходят регулярно (по нескольку раз в год). На все замечания, отправленные мной автору на почту, он ответил в течение нескольких дней и исправил ошибки в течение недели-двух. Только за время написания этой статьи вышел новый релиз (0.147), в котором починена одна из упомянутых ошибок.

Также этот проект относительно быстро развивается, и поддержка новых фич появляется в нем довольно оперативно.

Procyon

Проект поддерживается, этим летом (2019) даже был новый релиз. Но в этом релизе не было добавлено никаких новых фич, только починены старые баги. В общем, создается впечатление, что проект не забыт, но развиваться он больше не будет.

Этот декомпилятор постоянно развивается, репозиторий и ишью-трекер на гитхабе очень живые и активные. 20 июня 2019 произошел релиз версии 1.0.0. Новые фичи и поддержка более актуальных версий DVM добавляются.

Количество ошибок при сборке результата декомпиляции

Суть сравнения в том, что все декомпиляторы были запущены на одном проекте, а результаты декомпиляции собраны. Это позволило получить общее представление о том, какие ошибки может допускать каждый из декомпиляторов и насколько вообще адекватен получающийся при декомпиляции код.

В этой секции jadx не рассматривается, так как он бросает 39 исключений при декомпиляции fernflower.jar и, следовательно, в принципе не декомпилирует большое количество кода.

Для начала заметим, что есть три класса ошибок: синтаксические (их не выявлено ни одной, хотя еще несколько версий назад в CFR их было несколько); семантические ошибки, связанные с типами (неправильно выведенные параметры у дженериков, ненайденные методы, некорректные приведения типов), и все остальные семантические ошибки.

Причины, по которым ошибки, связанные с выведением типов, выделены в отдельную категорию:

  • декомпиляторы теоретически не способны полностью корректно восстановить типы;
  • эти ошибки встречаются чаще, чем все остальные вместе взятые;
  • они относительно мало влияют на читаемость кода.

К тому же, количество ошибок, связанных с выводом типов, примерно одинаково (хотя CFR все-таки проигрывает соперникам).

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

Синтаксические Все семантические Связанные с типами Остальные
Fernflower 0 101 65 36
CFR 0 82 80 2
Procyon 0 79 61 16

В коде, сгенерированном с помощью Fernflower, таких ошибок больше всего, причем 34 из 36 — это ошибки вида variable is already defined . Две ошибки у CFR тоже связаны с переопределением переменных. В случае Procyon‘а большинство (10 из 16) ошибок происходят из-за того, что переменная типа boolean используется в качестве индекса массива. Это происходит из-за некорректной обработки тернарных операторов (подробнее этот случай рассмотрен в секции ниже).

Отдельно стоит заметить, что CFR — единственный из трех декомпиляторов, улучшивший свои показатели за последние 4 месяца. Раньше у него было 10 ошибок, не связанных с типами и 72 — про типы. Из этого можно предположить, что большое количество «типовых» ошибок у CFR связано с тем, что остальных ошибок у него меньше и, следовательно, больше пространства для неправильного вывода типов.

Скорость

Дисклеймер: еще раз замечаю, что это исследование не претендует на какую-либо научность.

Сравнение скорости работы было проведено достаточно топорно: проекты запускались на среднего размера джарниках по несколько раз, после чего выяснялось минимальное время работы.

Здесь приведены результаты для 100 итераций на JAR-файле размером 5.2M (JAR-файл, естественно, состоит только из .class файлов).

Время в секундах
Fernflower 74
CFR 43
Procyon 74

В следующей таблице — результаты для 15 запусков на JAR-файле в 14M.

Время в секундах
Fernflower 939
CFR 128
Procyon 573

По результатам можно предположить, что в этих декомпиляторах используются алгоритмы с разной асимптотикой. При этом CFR работает стабильно быстрее конкурентов, а на больших входных файлах Fernflower начинает довольно сильно тормозить. Впрочем, 14M — это очень много памяти для архива .class файлов и в реальности такие проекты попадаются довольно редко.

Обработка конкретных фич языка

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

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

Для начала рассмотрим конструкции, с обработкой которых не справился только один из инструментов.

for-each

Fernflower всегда раскрывает for-each конструкции через итераторы. Причем делает он это не вполне корректно.

Например, здесь handler засоряет внешнюю область видимости, из-за чего может происходить переопределение переменной. К тому же, у итератора var3 не указан параметр типа, что приводит к unchecked cast в четвертой строке:

Тернарный оператор при индексации массива

Стандартная и очень неприятная ошибка Procyon‘а. Разобраться, что хотел сказать автор, не имея исходного кода под рукой, — задача не очень тривиальная, особенно в более сложных случаях:

Статическое поле в интерфейсе

Загадочная ошибка, воспроизводящаяся только при использовании Procyon. Атрибут default , указанный вместо static в определении getDefaults() , порождает ошибку:

Остальные ошибки

Дальше рассмотрено некоторое количество более сложных случаев, с которыми не справляется уже большее количество инструментов.

Источник

Читайте также:  Windows server 2019 запуск виртуальной машины
Оцените статью