Как декомпилировать файл 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
JD-Core (автор — Emmanuel Dupuy) — очень мощная и функциональная библиотека для декомпиляции и анализа байткода Java, разработанная в рамках «Java Decompiler project».
Имеет следующие особенности:
- Полностью написана на языке C++, что делает декомпиляцию необычайно быстрой
- Не требует для работы Java Runtime Environment и поэтому не требует специальной установки
- Корректно декомпилирует .class-файлы, сгенерированные большинством компиляторов
часть самостоятельного графического приложения JD-GUI, также разработанного на C++ и прилинкованного к ней статически, или плагина JD-Eclipse для среды разработки Eclipse, что делает практически невозможным её использование в стороннем некоммерческом проекте, особенно разработанном на языке Java. Использование библиотеки в коммерческих программных продуктах запрещено автором.
Fernflower
Fernflower — один из лучших декомпиляторов языка программирования Java на сегодняшний день.
Обладает следующими возможностями:
1. Поддерживает разнообразные языковые конструкции:
- Параметрические типы
- Аннотации
- Перечислимые типы
- Утверждения
Мой выбор
JD-GUI
— для просмотра, не болееFernflower
— полное восстановление
Остановлюсь на втором. Вообще, автор данного декомпилятора вроде как не выкладывал оффлайн версию в общий доступ(или я упустил этот факт читая его блог), до последнего времени была только онлайн. Но для меня было приятным удивлением найти ее на одном форуме!
Скачать: fernflower.jar
Цитата из блога автора:
Fernflower будет развиваться в сторону деобфускатораТ.к. онлайн версия по неизвестным причинам не работает, а про оффлайн трудно что-либо сказать(кроме того, что качество декомпиляции отменное), не о каких модулях на данный момент речи быть не может.
…
Специальных функций деобфускации Fernflower сейчас не содержит, они будут подключаться в дальнейшем отдельными модулями
Не хватает еще модуля переименованияЭто да. Поищем что-то такое в интернетах.
На выручку придет Proguard, но необыкновенный
ProGuardDeobfuscator — небольшая модификация программы ProGuard, превращающая ее в квази-деобфускатор. В процессе обработки короткие обфусцированные имена пакетов, классов, полей и методов заменяются на более осмысленные и уникальные в пределах Jar файла.Скачать исходники и сам деобфускатор: projectd8.org/Programs/Java/PGD
Инструменты все есть, но лично я, для облегчения воссоздания сорцов использую так же любимую Netbeans IDE — очень сильно помогает своими подсказками, особенно когда классов много.
Спасибо за внимание!
Ссылки
se.math.spbu.ru/SE/YearlyProjects/2011/YearlyProjects/2011/345/345_Mikhailov_report.pdf
ru-java.livejournal.com
UPD:
Извиняюсь, в offline версии Fernflower присутствует модуль переименований и уйма других штук — Readme
Как декомпилировать весь файл Jar? [закрытый]
кто-нибудь знает о бесплатном декомпиляторе, который может декомпилировать весь файл Jar вместо одного класса? У меня проблема с подклассами, такими как name$1.имя класса$2.имя класса.класс!--1-->
9 ответов
прежде всего, стоит помнить, что все архивные файлы Java (.jar
/.war
/ etc...) are все в основном просто фантазии.zip
файлы, С несколькими добавленными манифестами и метаданными.
во-вторых, для решения этой проблемы я лично использую несколько инструментов, которые обрабатывают эту проблему на всех уровнях:
- Джад + Jadclipse при работе в IDE для декомпиляции
.class
файлы - в WinRAR, мой любимый инструмент сжатия изначально поддерживает архивы Java (опять же, см. Первый абзац).
- Вне Конкуренции, мой любимый инструмент diff, при правильной настройке может выполнять сравнение на лету между любым архивным файлом, включая
jar
s. Стоит попробовать.
преимущество всего вышесказанного заключается в том, что мне не нужно держать какой-либо другой внешний инструмент, который загромождает мою рабочую среду. Все, что мне когда-либо понадобится из одного из этих файлов, может быть обработано внутри моей IDE или разделено с другими файлами изначально.
35
автор: Yuval Adam
Если у вас есть как оболочка bash, так и jad:
JAR=(your jar file name) unzip -d $JAR.tmp $JAR pushd $JAR.tmp for f in `find . -name '*.class'`; do jad -d $(dirname $f) -s java -lnc $f done popd
Я могу быть крошечным, крошечным с этим, но он должен работать более или менее так, как рекламируется. Вы должны закончить с $JAR.tmp
содержащий декомпилированные файлы.
У меня был разумный успех с инструментом под названием (разочаровывающе)"JD: Java Decompiler".
Я нашел его лучше, чем большинство декомпиляторы при работе с классами, скомпилированные для Java 5 и выше. К сожалению, у него все еще могут быть некоторые икоты, где Джад обычно преуспевает.
23
автор: Adam Paynter
что-то типа:
jar -xf foo.jar && find . -iname "*.class" | xargs /opt/local/bin/jad -r
может быть?
вставить следующий текст в decompile.jar.sh
# Usage: decompile.jar.sh some.jar [-d] # clean target folders function clean_target { rm -rf $unjar $src $jad_log } # clean all debug stuff function clean_stuff { rm -rf $unjar $jad_log } # the main function function work { jar= unjar=`basename $jar.unjar` src=`basename $jar.src` jad_log=jad.log clean_target unzip -q $jar -d $unjar jad -d $src -ff -r -lnc -o -s java $unjar/**/*.class > $jad_log 2>&1 if [ ! $debug ]; then clean_stuff fi if [ -d $src ] then echo "$jar has been decompiled to $src" else echo "Got some problems check output or run in debug mode" fi } function usage { echo "This script extract and decompile JAR file" echo "Usage: some.jar [-d]" echo " where: some.jar is the target to decompile" echo " use -d for debug mode" } # check params if [ -n "" ] then if [ "" == "-d" ]; then debug=true set -x fi work else usage fi
- chmod +x decomplie.jar.sh / / исполняемый файл
- ln-s ./decomplie.сосуд.s / usr/bin / dj
готов к использованию, просто введите dj your.jar
и вы получите your.jar.src
папка с источниками. Использовать -d
опция для режима отладки.
файл jar - это просто zip-файл с расширением jar. Вы должны иметь возможность распаковать (winzip) банку так же, как zip-файл.
вы извлекаете его, а затем используете jad против реж.
Примечание: это решение работает только для пользователей Mac и * nix.
Я также пытался найти Джада, но безуспешно. Моим быстрым решением было загрузить MacJad который содержит jad. После его загрузки вы можете найти jad в [где-вы-скачали-macjad] / MacJAD / содержание / ресурсы / jad.
Как декомпилировать весь файл Jar?
Прежде всего, стоит помнить, что все архивные файлы Java (.jar
/ .war
/ и т.д...) все в основном просто фантазии .zip
файлы с несколькими добавленными манифестами и метаданными.
Во-вторых, для решения этой проблемы я лично использую несколько инструментов, которые решают эту проблему на всех уровнях:
- Jad + Jadclipse при работе в IDE для декомпиляции
.class
файлы - WinRAR, мой любимый инструмент сжатия, изначально поддерживает Java-архивы (опять же, см. Первый абзац).
- Помимо сравнения, мой любимый инструмент сравнения, при правильной настройке, может делать сравнения на лету между любыми архивными файлами, включая
jar
s. Стоит попробовать.
Преимущество всего вышеперечисленного заключается в том, что мне не нужно держать какой-либо другой внешний инструмент, который загромождает мою рабочую среду. Все, что мне когда-либо понадобится из одного из этих файлов, может быть обработано внутри моей IDE или встроено в другие файлы.
Как "декомпилировать" файлы классов Java? [закрытый]
Обновление Февраль 2016 Года:
www.javadecompilers.com перечисляет JAD как:
самый популярный декомпилятор Java, но в основном только этого возраста. Написано на C++, очень быстро.
Устаревший, неподдерживаемый и неправильно декомпилирует Java 5 и более поздние версии
таким образом, ваш пробег может отличаться от недавнего 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) имеет:
- явная поддержка декомпиляции и анализа Java 5+ ".класс" файлы.
- хороший графический интерфейс:
Он работает с компиляторами от JDK 1.1.8 до JDK 1.7.0, и другие (Jikes, виртуальная машина JRockit, etc.).
Он имеет онлайн демо-версия что на самом деле полностью функциональный! Вы можете просто удалить файл jar на странице и увидеть декомпилированный исходный код без установки чего-либо.
Как декомпилировать в java-файлы intellij idea
идея имеет отличную встроенную функцию-декомпилятор. Он отлично работает.Я могу скопировать исходный код, но я не могу найти возможность извлечь все декомпилированные классы java в файлы java.
В этом проекте много классов и пакетов java, поэтому я буду долго копировать это вручную.
Кто-нибудь знает, как извлечь в исходные файлы java. Thx
8 ответов
21
автор: nicordesigns
по состоянию на август 2017 года и IntelliJ V2017.2, принятый ответ больше не кажется полностью точным: нет fernflower.jar
использовать.
файл jar называется java-decompiler.jar
и не включает основной манифест... Вместо этого вы можете использовать следующую команду (из установки Mac):
java -cp "/Applications/IntelliJ IDEA.app/Contents/plugins/java-decompiler/lib/java-decompiler.jar" org.jetbrains.java.decompiler.main.decompiler.ConsoleDecompiler
(вы получите неправильный использование команда, но она работает).
следуйте инструкциям на IntelliJ JD плагин. Или смотрите отрывок из приведенных ниже инструкций.
java -jar fernflower.jar [<source>]+ <destination>
+
означает 1 или более раз<source>
: файл или каталог с файлами для декомпиляции. Каталоги рекурсивно сканировать. Разрешенными расширениями файлов являются class, zip и jar.<destination>
: каталог назначения
пример:
java -jar fernflower.jar -hdc=0 -dgs=1 -rsy=1 -lit=1 c:\Temp\binary\ -e=c:\Java\rt.jar c:\Temp\source\
имейте в виду, что если вы передадите его".jar " файл для источника, он создаст другого".jar "файл в месте назначения, однако, в пределах нового".jar " файл, файлы будут .вместо java .файлы классов (он не взрывает банку).
вы можете использовать один из них (вы можете использовать их онлайн или загружать их, есть некоторая информация о каждом из них) : http://www.javadecompilers.com/
одна идея IntelliJ использует fernflower, но она не может обрабатывать последние вещи - такие как String/Enum switches, generics (не тестировал этот лично, только читал об этом)... Я просто попробовал cfr с вышеуказанного сайта, и результат был таким же, как со встроенным декомпилятором (за исключением переключателя перечисления, который у меня был в моем классе.)
декомпилятор идеи IntelliJ не был построен с учетом такого использования. Он предназначен только для того, чтобы помочь программистам заглянуть в байт-код классов java, которые они разрабатывают. Для декомпиляции множества файлов классов, исходного кода которых у вас нет, вам понадобится другой декомпилятор java, который специализируется на этой работе и, скорее всего, работает автономно. Если вы google, вы должны найти кучу.
некоторое время назад я использовал Jad (Java Decompiler) для достижения этого - я не думаю, что декомпилятор IntelliJ был включен в экспорт в виду. Это скорее инструмент, помогающий просматривать классы, где источники недоступны.
JAD по-прежнему доступен для загрузки, но я не думаю, что кто-то поддерживает его больше:http://varaneckas.com/jad/
для него было множество плагинов, а именно Jadclipse (вы догадались, как использовать JAD в Eclipse-см. декомпилированные классы, где код недоступен :)).
Я использую JD-GUI для извлечения всех декомпилированных классов java в файлы java.
0
автор: tecdoc ukr net
Декомпиляция и отладка Android-приложений
В статье будет рассказано о том, как подключить отладчик к Android-приложению и пошагово пройти через вызываемые методы, используя информацию, полученную после декомпиляции приложения.
Автор: Eric Gruber
В статье будет рассказано о том, как подключить отладчик к Android-приложению и пошагово пройти через вызываемые методы, используя информацию, полученную после декомпиляции приложения. Хорошая новость в том, что для отладки не требуются привилегии суперпользователя. Описанные техники могут быть очень кстати во время пентестов мобильных приложений, поскольку мы можем «проникнуть» в код во время работы программы, получить и записать информацию, к которой обычно у нас нет доступа. Например, можно перехватить трафик перед шифрованием и на лету получить ключи, пароли и любую другую ценную информацию. Статья будет полезна пентестерам и разработчикам мобильных приложений, желающих получить более глубокие знания о возможных атаках на платформе Android.
Требования к тестовой среде:
В статье будет использоваться следующая конфигурация: Windows 8, Android Studio и IntelliJ IDEA. Устройство: Nexus 4 с Android версии 4.4.4. Рекомендую все утилиты добавить в переменную окружения PATH, чтобы облегчить и ускорить доступ к этим инструментам.
Android application package (APK), используемый в статье, можно скачать отсюда: com.netspi.egruber.test.apk.
Настройка устройства
Инструкция ниже поможет вам подготовить устройство для экспериментов.
Активация раздела Developer Options
Для начала на Android-устройстве должна быть разрешена отладка через USB (опция USB debugging), что позволит «общаться» с девайсом при помощи инструментов из набора Android SDK. Однако перед этим необходимо активировать раздел Developer options. На устройстве зайдите в раздел Settings > About Phone и кликните несколько раз на пункт Build Number, после чего должно появиться сообщение о том, что раздел Developer options активирован.
Рисунок 1: Для того чтобы активировать раздел Developer options, необходимо несколько раз кликнуть на Build number
Разрешение отладки через USB
Чтобы разрешить отладку через USB-порт, зайдите в раздел Settings > Developer options и отметьте флажок напротив USB debugging.
Рисунок 2: Включение опции USB debugging
Подключение устройства и запуск ADB
После подключение устройства к компьютеру через USB-порт, должно появиться сообщение «USB debugging connected on the device». Также следует проверить, можно ли подключиться к устройству при помощи приложения Android Debug Bridge (ADB), входящего в состав Android SDK (пакет Android SDK Platform-tools). В командной строке введите следующую команду:
adb devices
Устройство должно отобразиться в списке.
Рисунок 3: Список подключенных устройств
Если устройство не отобразилось в списке, то наиболее вероятная причина в некорректно установленных драйверах (в Windows). В зависимости от устройства драйвер можно найти либо в Android SDK, либо на сайте производителя.
Проверка приложения на возможность отладки
Перед отладкой Android-приложений вначале необходимо проверить, есть ли такая возможность. Проверку можно выполнить несколькими способами.
Первый способ – запустить Android Device Monitor, входящий в состав Android SDK (в папке tools). В Windows файл называется monitor.bat. При открытии Android Device Monitor устройство отобразится в разделе Devices.
Рисунок 4: Приложение Android Device Monitor
Если какое-либо приложение на устройстве можно отлаживать, это приложение также отобразится в списке. Я создал тестовую программу, но список пуст, поскольку программу отлаживать нельзя.
Второй способ проверить приложение на возможность отладки – исследовать файл AndroidManifest.xml из пакета приложения (APK, Android application package). APK представляет собой zip-архив, содержащий всю информацию, необходимую для запуска приложения на Android-устройстве.
Всякий раз, когда приложения загружается из Google Play Store, также загружается и пакет приложения. Все загруженные APK-файлы обычно хранятся на устройстве в папке /data/app. Если у вас нет прав суперпользователя, вы не сможете получить список файлов из директории /data/app. Хотя, если вы знаете имя APK-файла, можете скопировать его при помощи утилиты adb. Чтобы узнать имя APK-файла, введите следующую команду:
adb shell
Появится командная строка устройства. Затем введите следующую команду:
pm list packages -f
Отобразится список всех пакетов на устройстве.
Рисунок 5: Перечень пакетов на устройстве
Глядя на список, находим тестовое приложение.
Рисунок 6: Пакет созданного тестового приложения (выделено белым)
Теперь необходимо скопировать файл пакета. Открываем шелл и вводим следующую команду:
adb pull /data/app/[.apk file] [location]
Рисунок 7: Копируем APK-файл с устройства в систему
Теперь нужно открыть файл пакета и исследовать содержимое AndroidManifest.xml. К сожалению, мы не можем просто так распаковать архив, поскольку APK-файл закодирован в бинарном формате. Для раскодировки чаще всего используется утилита apktool, хотя я использую APK Studio, поскольку у этого приложения дружелюбный графический интерфейс. Далее в статье будет рассказываться об APK Studio.
В APK Studio кликните на маленькую зеленую иконку, задайте имя проекту и укажите путь к APK файлу. Затем укажите пусть для сохранения проекта.
Рисунок 8: Создание нового проекта в APK Studio
После открытия APK выберите файл AndroidManifest.xml и посмотрите параметры тега application. Если флаг android:debuggable отсутствует (или присутствует, но установлено значение false), значит, приложение отлаживать нельзя.
Рисунок 9: Содержимое файла AndroidManifest.xml
Модификация файла AndroidManifest.xml
При помощи утилиты apktool или APK Studio мы можем модифицировать файлы и упаковывать содержимое обратно в пакет. Сейчас мы изменим файл AndroidManifest.xml так, чтобы приложение можно было отлаживать. Добавляем внутрь тега application строчку android:debuggable="true".
Рисунок 10: Изменяем содержимое тега application
После добавления флага кликаем на иконку «молоток» и заново собираем пакет. Пересобранный пакет будет находиться в директории build/apk.
Рисунок 11: Повторная сборка пакета завершилась успешно
После пересборки пакет подписывается и его можно заново установить на устройстве (все Android-приложения должны быть подписаны). Большинство приложений не проверяет сертификат, при помощи которого происходит подпись. В противном случае необходимо изменить код, выполняющий эту проверку.
Теперь нужно установить пересобранный пакет. Вначале удаляем старое приложение при помощи следующей команды:
adb pm uninstall[package name]
Затем устанавливаем новый пакет:
adb install [.apk file]
Также можно удалить и установить пакет одной командой:
adb install -r [.apk file]
Рисунок 12: Установка пересобранного пакета
Проверьте, чтобы переустановленное приложение корректно запускалось на устройстве. Если все работает, переходим обратно в Android Device Monitor, где должно появиться тестовое приложение.
Рисунок 13: Теперь пересобранное приложение можно отлаживать
Настройка среды разработки (IDE)
Теперь к пересобранному приложению можно подцепить отладчик, но вначале нужно создать проект в среде разработки (в статье используется IntelliJ IDEA). Создаем новый проект. В поле Application name указываем произвольное имя. В поле Package name указываем имя, в точности совпадающее с иерархией папок пересобранного пакета.
Рисунок 14: Создание нового проекта в IntelliJ IDEA
Обычно имя APK-файла совпадает со структурой папок, хотя, если вы не уверены, в APK Studio проверьте иерархию директорий до папки, где находятся файлы приложений. В моем случае имя и структура папок полностью совпадают (com.netspi.egruber.test).
Рисунок 15: Иерархия директорий тестового приложения
Снимите флажок «Create Hello World Activity» и завершите создание проекта (все остальные параметры остаются по умолчанию). Новый проект должен выглядеть примерно так:
Рисунок 16: Иерархия папок и файлов нового проекта
После создания проекта нужно добавить исходный код из APK-файла для того, чтобы отладчик «знал» имена символов, методов, переменных и т. д. Хорошая новость в том, что Android-приложения можно декомпилировать практически без потери качества (исходный код будет совпадать с оригиналом). После декомпиляции исходный текст импортируется в среду разработки (IDE).
Получение исходных текстов из пакета приложения
Для начала необходимо преобразовать APK в jar-файл. Затем мы при помощи java-декомпилятора получим исходный текст приложения. Преобразование в jar будем делать при помощи утилиты dex2jar. У dex2jar есть файл d2j-dex2jar.bat, используемый для конвертирования APK в jar. Синтаксис команды довольно прост:
d2j-dex2jar.bat [.apk file]
Рисунок 17: Преобразование APK в jar
Затем открываем или перетаскиваем полученный файл в JD-GUI (это java-декомпилятор).
Рисунок 18: Структура jar-файла
Jar-файл должен отобразиться в виде иерархической структуры, внутри которой находятся java-файлы с читабельным исходным кодом. Заходим в File > Save All Sources, чтобы упаковать все исходные тексты в zip-архив.
Рисунок 19: Сохранение исходных текстов декомпилированного файла
После сохранения исходных текстов распаковываем архив в отдельную директорию.
Рисунок 20: Распакованный архив
Теперь нужно импортировать обе директории в созданный ранее проект в IDE. В IntelliJ заходим в папку src и копируем туда содержимое распакованного архива (две директории).
Рисунок 21: Обе папки скопированы в директорию src
Возвращаясь в Intellij, видим обновленный проект.
Рисунок 22: В проекте появились исходные тексты
Если мы кликнем на какой-нибудь элемент из списка, то увидим исходный текст. Как видно на скриншоте ниже (исходный текст класса LoginActivity), исходный код обфусцирован при помощи ProGuard.
Рисунок 23: Обфусцированный исходный текст класса LoginActivity
Подключение отладчика
Теперь, когда в проекте появились исходные тексты, мы можем начать устанавливать точки останова на методах и переменных. По достижению точек останова приложение будет останавливаться. В качестве примера я установил точку останова на методе (прямо в обфусцированном коде), отвечающим за обработку информации, введенной в текстовом поле.
Рисунок 24: Поставлена точка останова на обфусцированный метод
Как только появилась точка останова, подключаем отладчик к процессу на устройстве, кликнув на иконку с экраном в правом верхнем углу (на вашей IDE иконка может отличаться).
Рисунок 25: Подключаем отладчик к процессу
Далее вам будет предложено выбрать процесс, к которому нужно подключиться. Будут отображены только процессы с флагом android:debuggable="true".
Рисунок 26: Перечень процессов для подключения отладчика
После выбора процесса отладчик подсоединится к устройству.
Рисунок 27: Отладчик подключен к процессу, запущенному на устройстве
В текстовое поле я буду вводить число 42 (если помните, на соответствующем методе стоит точка останова).
Рисунок 28: В текстовое поле вводим число 42
После нажатия на кнопку «Enter Code» выполнение приложения прервется на точке останова, поскольку отладчик «осведомлен», какой метод вызывается на устройстве. Скомпилированное Android-приложение содержит отладочную информацию (например, имена переменных), доступную любому отладчику, совместимому с Java Debug Wire Protocol (JDWP). Если в приложении разрешена отладка, отладчик, совместимый с JDWP (в эту категорию попадает большинство отладчиков идущих в составе сред разработки для Java), сможет подсоединиться к виртуальной машине Android-приложения, а затем считывать и выполнять отладочные команды.
Рисунок 29: Сработала точка останова
На скриншоте ниже видно число, которое ранее мы ввели в текстовом поле.
Рисунок 30: Перечень переменных текущего экземпляра класса
Заключение
Мы можем не только считывать данные в приложении, но и вставлять свои собственные. Это может быть полезно, если мы, например, захотим прервать поток выполнения кода и обойти некоторые участки алгоритма. При помощи отладчика мы можем лучше понять логику работы приложения и проанализировать то, что недоступно обычному пользователю. Например, может оказаться очень полезным просмотр используемых функций шифрования и динамические ключи. Кроме того, иногда при отладке полезно знать, как функции взаимодействуют с файловой системой или базой данных, чтобы понять какая информация сохраняется приложением. Подобные манипуляции доступны на любом Android-устройстве без привилегий суперпользователя.
java - Как декомпилировать файл .jar?
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
Декомпилятор Java онлайн
До недавнего времени вам нужно было использовать декомпилятор Java, и все они были либо нестабильными, либо устаревшими, либо незаконченными, либо, в лучшем случае, всем вышеперечисленным. А если нет, то они были коммерческими. Устарелость обычно подтверждается тем фактом, что они могут декомпилировать только байт-код JDK 1.3.Единственным так себе рабочим решением было взять файл .class и предварительно обработать его, чтобы он стал совместимым с JDK 1.3, а затем запустить над ним Jad (один из старых, но лучших декомпиляторов).
Но недавно на рынок хлынула новая волна декомпиляторов: Procyon , CFR , JD , Fernflower , Krakatau , Candle .
Вот список декомпиляторов, представленных на этом сайте:
CFR
Этот бесплатный декомпилятор с открытым исходным кодом доступен здесь: http://www.benf.org/other/cfr/Автор: Ли Бенфилд
Регулярно обновляемый, CFR может декомпилировать все современные функции Java:
- Java 7: переключатели строк
- Java 8: лямбды
- Java 9: модули
- Java 11: динамические константы
- Java 12: «Выражения переключения» в стиле Kotlin
- Java 14: «экземпляр» сопоставления с образцом и «типы записей»
Он даже неплохо превратит файлы классов из других языков JVM обратно в java!
JD
бесплатно только для некоммерческого использования, http: // jd.benow.ca/Автор: Эммануэль Дюпюи
Обновлено в 2015 году. Имеет собственный визуальный интерфейс и плагины для Eclipse и IntelliJ. Написано на C ++, очень быстро. Поддерживает Java 5.
Процион
с открытым исходным кодом, https://bitbucket.org/mstrobel/procyon/wiki/Java%20DecompilerАвтор: Майк Штробель
Обновлено в 2019 году. Обрабатывает языковые улучшения от Java 5 и выше до Java 8, включая:
- Объявления перечисления
- Операторы переключения Enum и String
- Локальные классы (как анонимные, так и именованные)
- Аннотации
- Java 8 Lambdas и ссылки на методы (т.е.е., оператор ::).
Fernflower
с открытым исходным кодом, https://github.com/fesh0r/fernflowerАвтор: Егор Ушаков
Обновлено в 2015 году. Очень многообещающий аналитический декомпилятор Java, теперь становится неотъемлемой частью IntelliJ 14. (https://github.com/JetBrains/intellij-community/tree/master/plugins/java-decompiler)
Поддерживает Java до версии 6 (аннотации, обобщения, перечисления)
JAD
даны здесь только по историческим причинам.Бесплатно, исходный код недоступен, зеркало для загрузки jadАвтор: Павел Кузнецов
Наверное, это самый популярный декомпилятор Java, но в основном только этого возраста. Написано на C ++, очень быстро.
Устаревший, неподдерживаемый и некорректно декомпилируемый Java 5 и новее.
java - Как декомпилировать программы .jar с зашифрованными классами
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
- Вакансии Программирование и связанные с ним технические возможности карьерного роста
- Талант Нанимайте технических специалистов и создавайте свой бренд работодателя
java - Программа для декомпиляции файлов jar или классов
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
java - как декомпилировать несколько файлов JAR
Переполнение стека- Около
- Товары
- Для команд
- Переполнение стека Общественные вопросы и ответы
- Переполнение стека для команд Где разработчики и технологи делятся частными знаниями с коллегами
Декомпилятор Java
«Проект Java Decompiler» направлен на разработку инструментов для декомпиляции и анализа «байтового кода» Java 5 и более поздних версий.
JD-GUI - это автономная графическая утилита, которая отображает исходные коды Java файлов «.class». Вы можете просматривать восстановленный исходный код с помощью JD-GUI для мгновенного доступа к методам и полям.
JD-Eclipse - это подключаемый модуль для платформы Eclipse. Он позволяет отображать все исходные коды Java в процессе отладки, даже если у вас их нет.
JD-Core - это библиотека, которая восстанавливает исходный код Java из одного или нескольких файлов «.class». JD-Core можно использовать для восстановления утерянного исходного кода и исследования источника библиотек времени выполнения Java. Поддерживаются новые функции Java 5, такие как аннотации, обобщения или тип «enum». JD-GUI и JD-Eclipse включают библиотеку JD-Core.
JD-Core, JD-GUI и JD-Eclipse - это проекты с открытым исходным кодом, выпущенные под лицензией GPLv3.
- JD-Core и JD-GUI написаны на Java.
- JD-Core работает с большинством современных компиляторов, включая следующие:
- 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
- джайков-1.22
- гармония-jdk-r533500
- Eclipse Java Compiler v_677_R32x, 3.2.1 выпуск
- JD-GUI поддерживает перетаскивание.
- JD-GUI поддерживает файлы CLASS, JAR, WAR, EAR, AAR, KAR, JMOD и ZIP.
- JD-GUI отображает исходный код Java с цветовой кодировкой.
- JD-GUI позволяет просматривать файлы CLASS и иерархию модулей Java.
- JD-GUI позволяет перетаскивать файлы LOG, декомпилировать файлы CLASS и отображать строку кода, которая появляется в трассировках стека Java.