Какую программу я могу использовать для декомпиляции файла класса? Я действительно получу 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.
- Хороший графический интерфейс:
Он работает с компиляторами от 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. Это очень приятно.
АССЕМБЛЕР в 2023? Что такое «Reverse Engineering» и «Cyber Security». Показываю как ломают софт.
Ответ 6
Procyon включает декомпилятор. Это FOSS.
Ответ 7
Сажа — это опция для более нового кода Java. По крайней мере, это имеет то преимущество, что в последнее время поддерживается.
Кроме того, Java Decompiler является декомпилятором как с автономным графическим интерфейсом, так и с интеграцией Eclipse.
Наконец, Jdec не упоминался, хотя он не был отполирован как другие параметры.
Ответ 8
JD-GUI действительно хорош. Вы можете просто открыть файл JAR и просмотреть код, как будто вы работаете над IDE. Хороший материал.
Ответ 9
Вот список декомпиляторов по состоянию на февраль 2015 года:
CFR, бесплатно, не доступен исходный код, http://www.benf.org/other/cfr/
JD, бесплатно только для некоммерческого использования, http://jd.benow.ca/
JAD — приводится здесь только по исторической причине. Бесплатно, без исходного кода, http://varaneckas.com/jad/ Устаревший, неподдерживаемый и не декомпилирует правильно Java 5 и более поздних версий.
Вы можете протестировать вышеупомянутые декомпиляторы онлайн, не требуется установка и сделать свой собственный образованный выбор.
Ответ 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.
Источник: utyatnishna.ru
Декомпиляция APK-файла на Андроид
Каждая операционная система имеет собственные типы файлов, которые являются исполняемыми программами. Так, на Windows они имеют расширение «.exe», на MacOS их функция более-менее повешена на файлы-контейнеры «.pkg», а на Android – «.apk».
Расшифровывается это расширение как Android Package и означает, что внутри файла находятся все нужные для запуска приложения компоненты. Распространяются они через Play Маркет или его свободные аналоги вроде F-droid.
Кроме того, на различных сайтах, посвящённых мобильным устройствам, например, 4PDA или XDA, такие файлы можно скачать самостоятельно. Установка последних может потребовать от пользователя дополнительных действий, вроде активации в настройках телефона права на развёртывание на устройстве программных компонентов, полученных из неизвестных источников.
Декомпиляция приложений и её функции
Один из языков программирования, который используется при написании программ для ОС Android – Java. На нём, как правило, пишут программы новички и люди, которые привыкли к его инструментарию. Крупные разработчики используют другие языки, которые дают больше свободы в использовании сторонних библиотек или программных компонентов.
Для того, чтобы написанный код превратился работающее приложение, его нужно скомпилировать встроенным в SDK (Software Development Kit) компилятором. Обратный же процесс, когда из готового APK-файла получается программный код, называется декомпиляцией.
Для чего может понадобиться декомпилировать такие файлы? Есть несколько ситуаций, в которых это пригодится:
- Пользователю недостаточно предоставленного функционала и он обладает достаточными знаниями и опытом, чтобы вносить изменения в готовый код.
- Посмотреть, как работает определённый компонент программы и приобрести нужный опыт в его реализации при создании собственного продукта.
- Определить, используются ли в приложении какие-либо части вредоносного кода.
Как видно, все эти задачи требуют некоторого опыта работы с языками программирования и Android SDK. Но при этом, на просторах интернета есть множество инструкций, которые под силу и новичкам, что делает процесс обратной компиляции полезным и для них. Нужно просто следовать инструкциям.
Декомпиляторы APK-файлов
Существует три разновидности такого типа программ – устанавливаемые на компьютер, на телефон пользователя и облачные. Первые и вторые имеют более широкий спектр функций. Последние привлекательны тем, что не используют производительности железа и работают прямо из браузера. Недостаток облачных сервисов – ограниченность поддержки сторонних модулей и надстроек, пользователь остаётся с тем набором функций, которые предоставляет владелец сервиса.
Стоит отметить, что разработчики встраивают защиту от таких действий. Это называется обфускацией и производится через специальные сервисы. При этом структура и функциональность полностью собранной программы не нарушается, но после декомпиляции пользователь получает бессвязные куски машинного кода, которые делают невозможным детальный анализ.
Лучшая программа для ПК
Это одна из самых многофункциональных утилит – APK Easy Tool. Она работает с несколькими типами файлов и способна распаковывать файлы, находящиеся на любой стадии разработки. Главное окно содержит несколько вкладок, на которых располагаются все возможности утилиты:
- Main – отправная точка в работе с программами. Здесь можно задать папку для получения всех исходных файлов обратной инженерией, декомпилировать и компилировать их, подписывать и модифицировать подписи после внесения изменений. Внизу вкладки при всех процессах отображается вся служебная информация о версиях инструментария.
- Framework – вкладка для подключения дополнительных модулей и фреймворков, способных помочь в процессе распаковки или упаковки готового продукта. Поддерживается установка фреймворка в APK-формате и назначение отдельной папки для каждой версии или разновидности.
- Smali/backsmali – соответственно, компилятор и декомпилятор файлов, которые записаны в десятеричном формате. На момент написания статьи функция находится в состоянии беты, но работает без серьёзных ошибок. Функционал довольно примитивный, в наличии всего две кнопки – «Компилировать» и «Декомпилировать». Можно выбирать папки для исходного кода или целевого места назначения хранения результата повторной компиляции.
- Log output – полезная для отладки процессов вкладка, содержит все логи каждого из запускаемых процессов.
- Options – позволяет гибко настроить программу для выполнения всех задач. Есть опции подключения разных версий Apktool и утилиты APK Signer для обеспечения максимальной совместимости с более ранними версиями Android. Присутствует 4 собственных вкладки с различными параметрами.
- FAQ – часто задаваемые вопросы, встроенная инструкция, помогающая пользователям преодолевать самые распространённые ошибки в работе.
- About – сведения о версии и контакты разработчика с реквизитами для добровольной поддержки.
Приложение работает на версиях Windows, начиная с Vista и не поддерживает русского интерфейса. По функционалу вполне подходит как новичку, который разберётся с ней с помощью инструкций и видео-мануалов, так и опытному разработчику приложений.
Декомпиляция на мобильном устройстве
Когда нет возможности отладить приложение на компьютере, а сделать это нужно обязательно, на помощь приходят программы для телефона. Это тоже APK-файлы, которые представляют собой не слишком богатые в настройках, но надёжные Java-декомпиляторы. Самой простой, но в то же время полезной из таких утилит является Show Java – A Java Decompiler.
Принцип работы очень прост:
- Начальное окно вполне минималистично – приветствие и кнопка «+», с которой начинается работа.
- Нажав на «+», пользователь должен выбрать, откуда загрузить программу для декомпиляции – из внутренней памяти или выбрать из уже установленных.
- Если выбран первый пункт, следующий шаг – навигация в папку с APK-файлами и выбор одного из них. Потом нужно подтвердить это действие, нажав на Select.
- После этого выбирается декомпилятор, который будет использоваться в процессе.
- А далее выводится окно с прогрессом операции. Если она завершается успешно, пользователь видит все файлы, нужные для функционирования приложения, и его исходный код. Если же нет, выводится окно с ошибкой.
Из недостатков – плохое декодирование файлов, которые были подвержены обфускации. В остальном же, набор возможностей здесь практически неотличим от десктопных аналогов.
Облачный сервис
Сайт javadecompilers.com предоставляет все возможности по разбору APK-файлов на составные части. Здесь есть, кроме хорошего онлайн-декомпилятора, и сетевая версия APKTools, что бывает полезно, если нет под рукой нужных устройств или пользователь не желает тратить время на инсталляцию приложений.
Принцип работы прост:
- Нужно открыть браузер и перейти по адресу javadecompilers.com/apk.
- Выбрать файл из Проводника и нажать кнопку «Upload and Decompile».
- Процесс декомпиляции здесь выглядит так (красная строка – прогресс, с указанием конкретного процесса, дублируется внизу экрана в области с заголовком Decompilation Results).
- После окончания процесса статус сменяется на окно такого вида, в котором присутствует возможность скачать полученные файлы.
- Предпросмотр файлов находится внизу страницы и позволяет оценить степень успеха после окончания. Файловая структура сохранена в том виде, в котором будет скачиваться архив, со всем древом каталогов и подкаталогов. Если содержимое хотя бы одного из них прочесть трудно, значит обфускацию обойти не удалось.
- Все файлы запакованы в архив и выглядят так.
После распаковки с ними можно делать что угодно. Облачный сервис предоставляет доступ без ограничений, хоть и показывает много рекламы в процессе своей работы. Для функционирования используется декомпилятор JaDX, который может не удовлетворять требований некоторых проектов. Ссылку на проект можно опубликовать на одной из соцсетей. Импорта на github нет, что тоже не очень удобно для конечного разработчика, у которого нет под рукой нужных инструментов.
- Куда скачиваются файлы в телефон на Андроид?
- Как скачивать торренты на Андроид?
- Подключение iOS к Android через Bluetooth для передачи файлов
- Как создать папку на Андроид и запаролить ее?
- Как освободить память в телефоне Андроид
Источник: v-androide.com
Что значит декомпилировать программу
Сегодня мы с вами научимся декомпилировать и собирать(компилировать обратно) привычные для нас ядра различных сборок.
Много криков слышится о том что без исходных кодов работать с компилированным ядром ява сервера — не возможно. Это абсолютно не верная информация и абсолютно не правильная.
Сегодня, мы с вами ознакомимся с 1 из методов работы с подобным видом продуктов.
Что нам понадобится?
-
Естественно, любой свободный декомпилятор Java среды.
Итак, для начала — выбираем нашу любимую жертву, над которой будем усердно работать.
Не знаю, для какой цели вам нужен кусок исходных кодов — но дело ваше. Для эксперемента, жертвой были выбран скомпилированный код команды l2jfozen, чтоб обидно не было никому.
Первым нашим шагом будет декомпиляция собственно нужного нам класса.
Много ума здесь совсем не нужно. Поэтому — задействуем ранее скачанный декомпилятор(я буду вести пример на основе jd gui decompiller).
Открываем jar архив с нужным нам классом:
Декомпилируем нужный нам класс в исходные коды (java):
Теперь, настал момент истины и их нужно обратно собрать.
Делать мы это будем ровно в 1 клик. Для сбора мы создадим папочку: D:compile, в которую поместим декомпилированный нами ранее класс (скрин №2) и сам .jar архив который мы декомпилировали.
Теперь — осталось не много не мало — скомпилировать наш класс. Для этого, мы используем консоль нашей OS (у виндузятников — cmd, линупсоиды — думаю подсказывать не нужно где консоль).
Для начала, проверим — доступен ли нам компилятор (javac) в исконном виде. Введем в консоль:
Если после введения команды нам высветило большой манаул — все в порядке. Если же результатом исполнения стало:
«javac» не является внутренней или внешней командой
то беда пришла за нами. Дело — копеечное, решается ровно в 4 клика.
Если возникло двигаем: Мой компьюетр->свойства->дополнительно->переменные среды и ищем там переменную «Path». Выбираем — редактирование, и дописываем путь к бинарникам нашей Jdk (/путь до jdk/bin), к примеру это будет выглядеть так:
и добавляем (через ; к переменной). Сохраняем, и открываем консоль снова. Если при исполнении javac все в порядке — воуля, проблема устранена.
Теперь — непосредственно компилируем ранее декомпилированный нами класс.
Заходим туда, где лежит наш класс:
Компилируем сам класс:
D:compile>javac -classpath l2jfrozen-core.jar -Xlint:unchecked Имя_декомпилированного_класса.java
как пример — компиляция Config.java:
D:compile>javac -classpath l2jfrozen-core .jar -Xlint:unchecked GameServer.java
Что ж, на выходе (в той же папке) мы получили: наш_класс.class. Дело сделано, все довольны.
Осталось — мелочи. Открываем декомплируемое нами ядро (l2jfrozen-core.jar) простым архиватором (winzip, winrar, 7z) и доходим до уровня, где лежит старый класс. Удаляем старый класс, жмем «ADD» и запихиваем сюда класс, который мы скомпилировали выше.
Вот собственно и все, мы проделали операцию нужную вам. После декомпилирования класса вы можете внести свои поправки в исходный код и успешно скомпилировать его и всунуть куда нужно.
Источник: forummaxi.ru