- PVSM.RU - https://www.pvsm.ru -
Декомпиляция — процесс воссоздания исходного кода декомпилятором
Недавно я задался вопросом: Какой декомпилятор лучше?
Начал мучить Google, экспериментировать. В итоге нашел отличное решение. Как декомпильнуть любую программу и получить рабочие «исходники»? Об этом в сабже.
Mocha (автор — Hanpeter van Vliet)— это, вероятно, один из первых выпущенных декомпиляторов Java. Предоставляет консольный пользовательский интерфейс. Его релиз состоялся в 1996-ом году, ещё до того, как появился Java Development Kit версии 1.1
JAva Decompiler, JAD (автор — Pavel Kouznetsov) — по всей видимости, самый
популярный декомпилятор Java. Как и Mocha, этот декомпилятор предоставляет консольный интерфейс, давно не обновляется и не поддерживается, но большое число графических инструментов для работы с ним, в том числе плагин JadClipse для среды разработки Eclipse, делают его и по сей день используемым в качестве подручного средства для декомпиляции небольших классов.
Помимо декомпиляции, JAva Decompiler обладает возможностью дизассемблирования .class-файлов.
DJ Java Decompiler (автор — Atanas Neshkov) — долгое время вопреки названию являлся лишь графической оболочкой для предыдущего декомпилятора, позволявшей легко и удобно выбрать аргументы командной строки для вызова JAD. В текущей версии добавлена поддержка аннотаций, но декомпилятор стал условно-бесплатным (необходима покупка после 10 пробных использований).
JD-Core (автор — Emmanuel Dupuy) — очень мощная и функциональная библиотека для декомпиляции и анализа байткода Java, разработанная в рамках «Java Decompiler project».
Имеет следующие особенности:
Пожалуй, к недостаткам JD-Core можно отнести лишь то, что она распространяется как
часть самостоятельного графического приложения JD-GUI, также разработанного на C++ и прилинкованного к ней статически, или плагина JD-Eclipse для среды разработки Eclipse, что делает практически невозможным её использование в стороннем некоммерческом проекте, особенно разработанном на языке Java. Использование библиотеки в коммерческих программных продуктах запрещено автором.
Fernflower — один из лучших декомпиляторов языка программирования Java на сегодняшний день.
Обладает следующими возможностями:
1. Поддерживает разнообразные языковые конструкции:
2. Корректно декомпилирует байткод, сгенерированный вследствие некоторых известных багов компиляторов
JD-GUI
— для просмотра, не болееFernflower
— полное восстановлениеОстановлюсь на втором. Вообще, автор данного декомпилятора вроде как не выкладывал оффлайн версию в общий доступ(или я упустил этот факт читая его блог), до последнего времени была только онлайн. Но для меня было приятным удивлением найти ее на одном форуме!
Скачать: fernflower.jar [1]
Цитата из блога автора [2]:
Fernflower будет развиваться в сторону деобфускатора
…
Специальных функций деобфускации Fernflower сейчас не содержит, они будут подключаться в дальнейшем отдельными модулями
Т.к. онлайн версия по неизвестным причинам не работает, а про оффлайн трудно что-либо сказать(кроме того, что качество декомпиляции отменное), не о каких модулях на данный момент речи быть не может.
Не хватает еще модуля переименования
Это да. Поищем что-то такое в интернетах.
На выручку придет Proguard, но необыкновенный
ProGuardDeobfuscator — небольшая модификация программы ProGuard, превращающая ее в квази-деобфускатор. В процессе обработки короткие обфусцированные имена пакетов, классов, полей и методов заменяются на более осмысленные и уникальные в пределах Jar файла.
Скачать исходники и сам деобфускатор: projectd8.org/Programs/Java/PGD [3]
Инструменты все есть, но лично я, для облегчения воссоздания сорцов использую любимую Netbeans IDE — очень сильно помогает своими подсказками, особенно когда классов много.
Спасибо за внимание!
se.math.spbu.ru/SE/YearlyProjects/.../345_Mikhailov_report.pdf [4]
ru-java.livejournal.com/ [5]
Автор: kiriman90
Источник [6]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/java/32268
Ссылки в тексте:
[1] fernflower.jar: https://docs.google.com/file/d/0B7XOK7xzJtUZNngweDNfaEpCbmM/edit
[2] блога автора: http://ru-java.livejournal.com/813242.html?thread=10425786
[3] projectd8.org/Programs/Java/PGD: http://projectd8.org/Programs/Java/PGD
[4] se.math.spbu.ru/SE/YearlyProjects/.../345_Mikhailov_report.pdf: http://se.math.spbu.ru/SE/YearlyProjects/.../345_Mikhailov_report.pdf
[5] ru-java.livejournal.com/: http://ru-java.livejournal.com/
[6] Источник: http://habrahabr.ru/post/176825/
Нажмите здесь для печати.