Как декомпилировать jar файл

Обновлено: 07.07.2024

Декомпиляция приложения + переупаковка + просмотр кода Java

При тестировании приложения, помимо тестирования на веб-уровне, также необходима оценка безопасности приложения. В это время нам необходимо декомпилировать приложение. Если приложение не упаковано, мы можем изменить декомпилированный файл и повторно Пакет для проверки безопасности приложения.

Декомпилировать

  • Инструменты: apktools, вы можете зайти на официальный сайт, чтобы загрузить последнюю версию, или зайти на сетевой диск Baidu, чтобы скачать, ссылку я дам в конце статьи.
    Я использую jar, и мне нужно установить среду Java. Вы можете найти конкретные руководства в Интернете.
  • Пакет установки приложения: app-release (4) .apk
    Команда для декомпиляции с помощью apktools:


В это время папка app-release (4) появится в папке, где находится app-release (4) .apk.

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

  • Найдите имя приложения в app-release (4): откройте блокнот ++ и выберите в строке меню: поиск-найти в файле

    Найдите цель, введите имя приложения, выберите папку app-release (4) в каталоге и выберите «Найти все», чтобы найти файл, в котором находится информация об имени приложения, и изменить его.

    Здесь я добавляю символ «ТЕСТ» после имени приложения.

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

Сохраните измененный файл, используйте apktools, чтобы упаковать измененную папку.


Несмотря на то, что здесь есть элемент "сбой", он все равно успешно упакован. Упакованный apk находится в папке dist в app-release (4).

Но этот apk нельзя установить напрямую, и его необходимо подписать.

  • Используйте инструмент signapk.jar, чтобы подписать перепакованный apk и переименовать его в test.apk

Подписано успешно:


Установите test.apk в симуляторе, вы увидите, что к имени приложения были добавлены символы «ТЕСТ»:

Просмотр файлов java


  • Переименуйте app-release (4) .apk в app-release (4) .zip, используйте распакованный файл для распаковки, вы можете получить папку app-release (4).

    Используйте инструмент dex2jar для преобразования classex.dex в пакет Jar, здесь вы также можете скопировать файл classes.dex непосредственно в файл, в котором находится dex2jar.


выполняется успешно, файл classes_dex2jar.jar будет добавлен в папку app-release (4)

Используйте инструмент jd-gui для открытия файла, вы можете успешно просмотреть код без обфускации, если обфускация выполнена, имя пакета - a, b, c и т. д.

инструмент

Список декомпиляторов Java и класс Java для декомпиляции в Eclipse IDE, IntelliJ IDEA и командной строке.

Автор оригинала: mkyong.

В этой статье показано, как декомпилировать класс Java в среде IDE Eclipse, IntelliJ IDEA и командной строке.

  • 1. Декомпиляторы Java
  • 2. Декомпилируйте класс Java в среде IDE Eclipse
  • 3. Декомпилируйте класс Java в IntelliJ IDEA
  • 4. Декомпилируйте класс Java в командной строке (цветок папоротника)
  • 5. Рекомендации

1. Декомпиляторы Java

Декомпилятор Java может конвертировать .class файлы возвращаются в исходный код .java файлы или преобразуют байт-код программы в исходный код. Ниже приведены некоторые из декомпиляторов Java:

2. Декомпилируйте класс Java в среде IDE Eclipse

В Eclipse IDE мы можем использовать Расширенный декомпилятор классов плагин для декомпиляции файлов классов Java без прямого исходного кода.

2.1 Выберите Справка -> Eclipse Marketplace. для поиска и установки Расширенного декомпилятора классов плагина.

2.2 Выберите Окно -> Настройки -> Общие -> Редакторы -> Ассоциации файлов , настройте *.класс без источника по умолчанию на Средство просмотра декомпилятора классов .

Сейчас , нажмите на класс или методы, нажмите F3 , и плагин автоматически декомпилирует класс Java.

Примечание Для получения более подробной информации об установке и настройке Расширенного декомпилятора классов плагина, посетите этот декомпилятор Java в Eclipse IDE .

3. Декомпилируйте класс Java в IntelliJ IDEA

IntelliJ IDEA имеет встроенный декомпилятор Java, использующий FernFlower . Нам не нужно ничего устанавливать или настраивать, просто нажимаем на класс или метод Java, нажимаем CTRL + B (объявление или использование) или CTRL + ALT + B (реализация), IntelliJ IDEA автоматически декомпилирует класс Java.

4. Декомпилируйте класс Java в командной строке (цветок папоротника)

В этом примере показано, как использовать FernFlower (Java-декомпилятор) для декомпиляции .jar или .class файл в командной строке.

Примечание Размер официального Цветка папоротника немного велик, трудно построить источник. Обходной путь заключается в использовании зеркальной сборки fesh0r Fernflower .

4.1 клон git исходный код и Gradle встраивают исходный код в fernflower.jar

4.2 В приведенном ниже примере используется fernflower.jar для декомпиляции asm-analysis-3.2.jar Файл JAR в папку /путь/декомпилировать/ (должен существовать).

В результате получается новый /path/decompile/asm-analysis-3.2.jar содержащий исходный код *.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
  • Полностью написана на языке C++, что делает декомпиляцию необычайно быстрой
  • Не требует для работы Java Runtime Environment и поэтому не требует специальной установки
  • Корректно декомпилирует .class-файлы, сгенерированные большинством компиляторов
Fernflower
  • Параметрические типы
  • Аннотации
  • Перечислимые типы
  • Утверждения

Мой выбор

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

Специальных функций деобфускации Fernflower сейчас не содержит, они будут подключаться в дальнейшем отдельными модулями
Т.к. онлайн версия по неизвестным причинам не работает, а про оффлайн трудно что-либо сказать(кроме того, что качество декомпиляции отменное), не о каких модулях на данный момент речи быть не может.
Это да. Поищем что-то такое в интернетах.
На выручку придет Proguard, но необыкновенный
ProGuardDeobfuscator — небольшая модификация программы ProGuard, превращающая ее в квази-деобфускатор. В процессе обработки короткие обфусцированные имена пакетов, классов, полей и методов заменяются на более осмысленные и уникальные в пределах Jar файла.

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

Ссылки

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

2009: JavaDecompiler может сделать хорошую работу с jar: начиная с 0.2.5, отображаются все файлы в файлах JAR.

http://java.decompiler.free.fr/sites/default/screenshots/screenshot1.jpg

JD-Eclipse, похоже, не изменился с конца 2009 года (см. изменения).
Таким образом, его интеграция с последним Eclipse (3.8, 4.2+) может быть проблематичной.

JD-Core активно поддерживается.

оба являются результатом фантастической работы (SO user) Эммануэль Дюпюи.

2018: более современный вариант, упомянутый в комментариях by Дэвид Кеннеди Араужо:

Fernflower-первый аналитический декомпилятор для Java на самом деле работает и вероятно, для языка программирования высокого уровня в целом.

прежде всего, стоит помнить, что все архивные файлы Java ( .jar / .war / etc. ) are все в основном просто фантазии .zip файлы, С несколькими добавленными манифестами и метаданными.

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

  • Джад + Jadclipse при работе в IDE для декомпиляции .class файлы
  • в WinRAR, мой любимый инструмент сжатия изначально поддерживает архивы Java (опять же, см. Первый абзац).
  • Вне Конкуренции, мой любимый инструмент diff, при правильной настройке может выполнять сравнение на лету между любым архивным файлом, включая jar s. Стоит попробовать.

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

Если у вас есть как оболочка bash, так и jad:

Я могу быть крошечным, крошечным с этим, но он должен работать более или менее так, как рекламируется. Вы должны закончить с $JAR.tmp содержащий декомпилированные файлы.

У меня был разумный успех с инструментом под названием (разочаровывающе)"JD: Java Decompiler".

Я нашел его лучше, чем большинство декомпиляторы при работе с классами, скомпилированные для Java 5 и выше. К сожалению, у него все еще могут быть некоторые икоты, где Джад обычно преуспевает.

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

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

ОТВЕТЫ

Ответ 1

Обновление февраля 2016 года:

самый популярный декомпилятор Java, но в первую очередь только этого возраста. Написано на С++, так очень быстро.
Устаревший, неподдерживаемый и не декомпилирует правильно 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, написанным г-ном Павлом Кузнецовым, JDK 1.3.
  • Большинство декомпиляторов Java, загружаемых сегодня из Интернета, таких как "DJ Java Decompiler" или "Cavaj Java Decompiler", работают на JAD: они не могут отображать источники Java 5.

Java Decompiler (Еще один декомпилятор Fast Java):

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

screenshot

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

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

Ответ 2

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

  • Procyon: open-source (Apache 2) и активно развивается
  • Krakatau: open-source (GPLv3) и активно развивается
  • CFR: open-source (MIT) и активно развитый
  • JAD
  • DJ Decompiler
  • Mocha

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

Ответ 3

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

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

Ответ 4

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

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

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

    Ответ 5

    Существует Eclipse плагин, jadeclipse. Это очень приятно.

    Ответ 6

    Procyon включает декомпилятор. Это FOSS.

    Ответ 7

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

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

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

    Ответ 8

    JD-GUI действительно хорош. Вы можете просто открыть файл JAR и просмотреть код, как будто вы работаете над IDE. Хороший материал.

    Ответ 9

    Вот список декомпиляторов по состоянию на февраль 2015 года:

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

    Ответ 10

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

    Ответ 11

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

    Ответ 12

    Ответ 13

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

    Ответ 14

    JAD - это тот, который работает и прост.

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

    Ответ 15

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

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

    Ответ 16

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

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

    Ответ 17

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

    введите описание изображения здесь

    Ответ 18

    Для OSX я рекомендую: jarzilla или JD-GUI

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

    Ответ 19

    С AndroChef Java Decompiler вы можете декомпилировать apk, dex, jar и java class-files. Это просто и просто. AndroChef JD основан на FernFlower. Вы можете оценить его в 10 бесплатных использованиях.

    AndroChef поддерживает функции языка Java, такие как дженерики, перечисления и аннотации. Согласно некоторым исследованиям, AndroChef Java Decompiler способен декомпилировать 98,04% приложений Java, сгенерированных традиционными компиляторами Java, - очень высокая скорость восстановления. Это простой, но мощный инструмент, который позволяет декомпилировать байт-код Java и Dalvik (DEX, APK) в читаемый источник Java.

    Читайте также: