Как декомпилировать jar файл в eclipse
Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме переполнения стека.
Закрыто 4 года назад .
Locked . Этот вопрос и его ответы заблокированы, потому что вопрос не по теме, но имеет историческое значение. В настоящее время он не принимает новые ответы или взаимодействия.Какую программу я могу использовать для декомпиляции файла класса? Получу ли я на самом деле Java-код или это просто код сборки JVM?
На вопросы производительности Java на этом сайте я часто вижу ответы людей, которые «декомпилировали» файл классов Java, чтобы увидеть, как компилятор оптимизирует определенные вещи.
Искусство «декомпиляции» также можно рассматривать как реверс-инжиниринг. Хотя иногда при обратном проектировании чего-то не всегда есть доступ к двоичным файлам.Обновление февраля 2016:
самый популярный декомпилятор 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 (еще один декомпилятор Fast Java) имеет:
- Явная поддержка для декомпиляции и анализа файлов Java 5+ «.class».
- Хороший графический интерфейс:
Он работает с компиляторами от JDK 1.1.8 до JDK 1.7.0 и другими ( Jikes , JRockit и т. Д.).
Он показывает онлайн демо-версию, которая на самом деле полностью функциональна! Вы можете просто поместить файл jar на страницу и увидеть декомпилированный исходный код, ничего не устанавливая.
Недавно я задался вопросом: Какой декомпилятор лучше?
Начал мучить 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
- Параметрические типы
- Аннотации
- Перечислимые типы
- Утверждения
Мой выбор
- JD-GUI — для просмотра, не более
- Fernflower — полное восстановление
Fernflower будет развиваться в сторону деобфускатораТ.к. онлайн версия по неизвестным причинам не работает, а про оффлайн трудно что-либо сказать(кроме того, что качество декомпиляции отменное), не о каких модулях на данный момент речи быть не может.
…
Специальных функций деобфускации Fernflower сейчас не содержит, они будут подключаться в дальнейшем отдельными модулями
Это да. Поищем что-то такое в интернетах.
На выручку придет Proguard, но необыкновенный
ProGuardDeobfuscator — небольшая модификация программы ProGuard, превращающая ее в квази-деобфускатор. В процессе обработки короткие обфусцированные имена пакетов, классов, полей и методов заменяются на более осмысленные и уникальные в пределах Jar файла.
Инструменты все есть, но лично я, для облегчения воссоздания сорцов использую так же любимую Netbeans IDE — очень сильно помогает своими подсказками, особенно когда классов много.
Спасибо за внимание!
Ссылки
UPD:
Извиняюсь, в offline версии Fernflower присутствует модуль переименований и уйма других штук — Readme
Java Decompiler (JD) обычно рекомендуется как хороший, ну, Java Decompiler. JD-Eclipse - это плагин Eclipse для JD.
Открываем этот вопрос для сбора дополнительной информации: с какими проблемами вы столкнулись до того, как JD запускался в Eclipse Helios? Какое было решение?
Вот с чем я столкнулся:
2) Закройте все открытые вкладки редактора перед открытием файла класса. В противном случае легко получить устаревшую вкладку редактора из предыдущей попытки.
4) Этот парень рекомендует установить Equinox SDK с сайта обновлений Helios. Да, но я не уверен, действительно ли это было необходимо. Кто-нибудь знает?
7) После запуска плагина некоторые файлы все еще не декомпилировались по неизвестной причине. Это исчезло после закрытия всех вкладок, перезапуска Helios и повторной попытки.
Чтобы заставить его работать в Eclipse Juno, мне пришлось проделать несколько дополнительных шагов.
Общие -> Редакторы -> Ассоциация файлов
Плагин JD-eclipse 0.1.3 может только декомпилировать файлы .class, которые видны из пути к классам / пути сборки.
Если ваш класс находится в .jar, вы можете просто добавить эту банку в Путь сборки в качестве другой библиотеки. В проводнике пакетов просмотрите новую библиотеку и откройте класс в редакторе файлов классов.
Если вы хотите декомпилировать любой класс в файловой системе, он должен находиться в соответствующей иерархии папок, а корневая папка должна быть включена в путь сборки. Вот пример:
- Класс - foo.bar.MyClass в . / someDir /foo / bar / MyClass.class
- В своем проекте Eclipse добавьте папку с произвольным именем aClassDir, которая ссылается на . / someDir.
- Добавьте эту связанную папку в Путь сборки проекта.
- Используйте вид навигатора для навигации и открытия файла .class в редакторе файлов классов. (Примечание: обычные файлы .class в файловой системе скрыты в представлении проводника пакетов.)
Примечание. Если someDir является подпапкой вашего проекта, вы можете пропустить шаг 2 (папка ссылок) и добавить его непосредственно в путь сборки. Но это не сработает, если это выходная папка компилятора проекта Eclipse.
P.S. Я хотел бы просто дважды щелкнуть любой файл .class в любой подпапке проекта без необходимости иметь его в пути к классам .
Я использую Eclipse 3.7 Indigo и 64-разрядную версию Windows 7:
Что я сделал, так это установил распространяемый пакет Microsoft Visual C ++ 2008 SP1, как это было предложено сайтом и напомнило @Universalspezialist.
Возможно, перезапустить Eclipse? (Я сделал это, но не уверен, нужно это или нет)
Я сделал простую вещь, чтобы заставить его работать:
Пошел в затмение> Окно> Настройки
Готово. Теперь весь ваш класс принадлежит нам.
Он должен работать для всех версий eclipse даже в Spring tool suit (STS). Вот шаги
Перейдите на URl. Следуйте по ссылке, чтобы загрузить, или щелкните ссылку ниже, чтобы выполнить прямую загрузку. Нажмите здесь, чтобы загрузить.
Щелкните "Справка> Установить новое программное обеспечение . ",
Выберите извлеченную папку и дайте любое имя. Я дал JDA . и нажмите ОК.
Дальше, дальше, дальше . и перезапустите Eclipse.
- Спасибо, Варун, у меня это сработало. Но часть jar не декомпилируется. Есть ли способ вручную выбрать банку, скажем, банку зависимости maven и открыть с помощью jd-gui?
После тестирования на Juno, Kepler и Luna я обнаружил, что JD работает только для * .class файлы в пути сборки.
Вместо этого я использую jadeclipse, потому что он не может работать в затмении 3.6 / 3.7
- Спасибо, я попробовал JD, но на самом деле ссылка на сайт обновлений не работает.
- Просто сделал это после попыток и неудач во всем, что описано в этой статье. (Eclipse 2.9.2) Сайт обновления JAD работает нормально, установка, похоже, работает нормально
Плагин JAD Decomplier для Eclipse версии 3.x и 4.x.
Шаги:
Я выполнил шаги 1, 2, 3 и 7. и поместил папку с файлами классов в путь сборки проекта (щелкните правой кнопкой мыши, свойства, путь сборки java, библиотеки, добавьте папку классов, создайте новую папку, дополнительно >> , ссылка на папку в файловой системе, просмотр, . ) затем перезапустите eclipse.
Щелкните "Справка> Установить новое программное обеспечение . ",
Дальше, дальше, дальше . и перезапустите Eclipse.
Просто скачайте сайт со страницы JD. Мне удалось установить с локального сайта в разделе неизвлекаемого программного обеспечения eclipse.
Декомпилируйте в eclipse и просмотрите файл класса в пакете jar
Второй тип: пакетная декомпиляция. Декомпилируйте все файлы jar, сохраняя при этом связь между классами дерева и т. Д., Или используйте инструмент jad (или гаджет jd-gui.exe).
Поскольку ранее мы добавляли jad в% JAVA_HOME% \ bin, пока настроены переменные среды, мы можем удобно использовать его в командной строке. В качестве примера возьмем dom4j-1.6.1.jar, чтобы проиллюстрировать конкретные шаги операции.
Распакуйте dom4j-1.6.1.jar и jaxen-1.1-beta-7.jar. Для удобства я распаковываю пакет JAR и помещаю его в корневой каталог диска F. В cmd введите корневой путь диска F и введите команду: jad -o -r -s java -d src org / ** / *. Class
Я объясняю значение этих параметров:
-o: перезаписать старые файлы без запроса подтверждения.
-r: перезагрузить сгенерированную структуру пакета.
-s: определяет расширение выходного файла. Jad является расширением по умолчанию, и, конечно, нам нужны исходные файлы .java после декомпиляции.
-d: каталог выходных файлов. src означает, что все файлы после декомпиляции помещаются в каталог src.
org / ** / *. class: org - это имя распакованной папки, и оно представляет все файлы классов в каталоге org. Вы также можете написать ** / *. Class, как это, что означает все файлы классов (включая все подкаталоги) в текущем каталоге и его подкаталогах.
Декомпиляция dom4j-1.6.1.jar должна иметь jaxen-1.1-beta-7.jar, потому что в dom4j есть вызов xpath, и эти вещи относятся к API в jaxen, если нет добавления, будут ошибки.
К этому моменту все содержимое декомпиляции закончено, но я хотел бы добавить, что вполне возможно, что файл класса в пакете JAR написан не иностранцем, а написан нами. Возможно, в нем есть китайский язык. Декомпиляция прошла, но кодировка Unicode в виде gb2312 находится внутри, поэтому мы должны сделать работу, чтобы преобразовать эти кодировки в китайский язык.
Для завершения этой работы используйте ant-скрипт, содержимое относительно простое, с комментариями, его должно быть легко понять, файл сценария называется build.xml, он находится в каталоге src, а декомпилированный пакет находится на том же уровне.
Есть одно место для добавления. В элементе native2ascii два атрибута src и dest представляют путь. Если после декомпиляции в каталоге src будет много разных папок, то для преобразования кодировки используйте ant, пожалуйста, сначала подумайте, какие файлы декодировать, если вы будете следовать приведенным выше инструкциям, он поместит каталог src Все файлы во всех папках декодируются. Предположим, теперь есть две папки com и org (фактически два пакета), мне нужно только декодировать файлы в com, затем их можно переписать так: src = "$ / com" dest = "$ / $ / com" больше ничего. Введите путь src в cmd, введите ant и нажмите Enter.
Читайте также: