Что такое хороший декомпилятор Java и деобфускатор?


36

Я использую JD-GUI для декомпиляции Java JAR-файлов, но проблема в том, что он оставляет много ошибок, таких как повторяющиеся переменные, которые я должен исправить самостоятельно, и проверить, работает ли программа (если я исправил ошибки правильно).

Я также пробовал Fernflower, но это оставляет пустые классы, если у него отсутствует зависимость.

Я хотел бы знать, какие декомпилятор:

  • дает наименьшее количество ошибок
  • deobfuscates больше всего.
  0

Просто интересно, какие функции вы ожидаете Deobfuscator предложит? Помимо переименования переменных вручную, я не вижу никакого способа фактически деобфусить некоторый код. 04 апр. 132013-04-04 07:43:09

24

Приношу свои извинения за запоздалый ответ.
Я работаю над новым, открытым исходным кодом Java decompiler. Не стесняйтесь проверить это.
Я не тестировал его против какого-либо запутанного кода, но я видел, как он декомпилирует многие методы, с которыми JD-GUI не справился. Обратите внимание, что это незавершенная работа, и я уверен, что вы найдете много кода, который он не сможет декомпилировать.

+2

Во-первых, его декомпилятор - это Procyon, который вы видите в других ответах. Во-вторых, хотя я обычно отказываюсь: «Посмотрите на мою библиотеку, которая это делает!» ответы, это было бы ошибкой здесь. Strobel's [readme] (https://bitbucket.org/mstrobel/procyon/wiki/Java%20Decompiler), с которым он ссылается, выше, стоит внимательно прочитать. Это был бы * большой * ответ сам, но, возможно, слишком долго для SE. 21 ноя. 142014-11-21 19:36:20

+1

+10000 Это действительно отличная работа, и она просто декомпилировала класс, который я потратил несколько часов на восстановление после того, как JD-GUI получил только половину. 10 июн. 152015-06-10 04:24:31

  0

Несмотря на то, что я лично ненавижу комментарии +1, я должен буду сказать, что у вас есть хороший проект, который помогает мне в трудном месте. Так держать! 08 фев. 172017-02-08 00:12:34

  0

@Signus Спасибо, я рад, что моя работа оказалась вам полезной :). 08 фев. 172017-02-08 15:12:26


9

Я не могу говорить, какой из них является лучшим, но есть несколько декомпиляторов java, как указано этим SO question. Ни один из этих декомпиляторов, похоже, не пытается активно обрабатывать обфускацию, хотя многие из этих проектов заброшены.

Я не пробовал Krakatau, но похоже, что это может помочь в том, что вы ищете.

  • Из риого: «Декомпилятора Кракатау другого подхода к большинству Java декомпиляций Его можно рассматривать скорее как компилятор, вход язык Java байткод и чей целевой язык происходит с исходным кодом Java. Krakatau принимает произвольный байт-код и пытается преобразовать его в эквивалентный Java-код. Этот делает его надежным для незначительной запутывания, хотя он имеет недостаток не , восстанавливающий «оригинальный» источник, что приводит к менее читаемому выходу, чем шаблонный декомпилятор, создаваемый для несмываемых классов Java ».
  • Это открытый источник и, по-видимому, активно (на момент написания этой статьи).
+3

Это результат вывода дизассемблера. Декомпилятор декомпилирует выход Java. (P.S. Я разработчик) 15 апр. 132013-04-15 03:50:28

  0

JD-GUI - один из лучших декомпиляторов Java на данный момент, но он должен использоваться в конъюнктуре с deobfuscators на Bytecode перед декомпиляцией кода. Лучшие деобфускаторы для java, которые я знаю, происходят из http://www.rune-server.org или http://www.moparscape.org/smf или http://www.moparisthebest.org/smf, которые являются взломами сообщества для Runescape Game, полностью написанные на Java и сильно запутанные. 13 апр. 142014-04-13 07:38:21


0

Я хотел бы рекомендовать вас AndroChef Java Decompiler AndroChef Java Decompiler успешно декомпилирует запущенные Java 6 и Java 7 файлы .class и .jar.

+9

ОПЛАТИТЕ ВНИМАНИЕ С ANDROCHEF! AndroChef - это всего лишь обертка для заброшенного декомпилятора Fernflower, не тратьте деньги на это! 15 ноя. 132013-11-15 15:41:55


2

Прежде всего, есть исправление проблемы с Fernflower с отсутствующими классами here. Вы можете сказать спасибо agaricusb за это.

На данный момент Fernflower остается лучшим декомпилятором Java даже в течение последних нескольких лет. Недавно я попытался связаться с автором, но мне все равно не повезло.

Что касается AndroChef Java Decompiler, он использует Fernflower как двигатель с разрешения автора. Все еще не уверен, если он использует исправленную/измененную версию или это просто графический интерфейс.

Декомпилятор Procyon, разработанный компанией @ mike-strobel, кажется, хорош, но Fernflower все еще получил ОГРОМНОЕ преимущество и смог декомпилировать примерно 95% моего приложения (~ 3000 классов), в то время как procyon смог обработать только 60% проверено в январе 2014 года).

  0

Является ли ваше приложение «родной» Java, или оно было преобразовано из формата Android? Если бы первый, я был бы очень заинтересован в том, чтобы взять мои руки в свои двоичные файлы, чтобы увидеть, где Процион ломается по сравнению с Фернфлауэр. 07 июл. 142014-07-07 14:26:43

  0

@MikeStrobel Это «родное» приложение Java. Это только внутреннее использование, поэтому я не могу делиться им так или иначе. 08 июл. 142014-07-08 10:42:24

+1

любой шанс, что вы могли бы написать мне письмо с описанием проблем, с которыми вы столкнулись? Я всегда хочу услышать, как можно улучшить Procyon. Моя контактная информация находится на сайте проекта BitBucket. 08 июл. 142014-07-08 14:30:19

  0

@MikeStrobel благодарит за интерес. Я постараюсь предоставить вам расширенную информацию и примеры классов, но никаких обещаний. 09 июл. 142014-07-09 11:26:32


2

Попробуйте взглянуть на Bytecode просмотра https://github.com/Konloch/bytecode-viewer Он имеет возможность декомпиляции, используя 5 различных декомпиляторов:

  • FernFlower
  • Процион
  • CFR
  • Кракатау
  • JD-GUI

8

Старые и Недостающие Записи

JAD Некоторое время назад, декомпилятор каждого выбора был JAD. В настоящее время проект мертв (кроме того, он не был открытым исходным кодом), но все же вы видите, что многие люди ссылаются на него.

Java Deobfuscator Также старший инструмент из fileoffset.com, но все еще работает более или менее. Интерфейс довольно неуклюжий для использования в больших проектах, но инструмент open source.

JODE JODE является Java-пакет, содержащий декомпилятор и оптимизатор для Java. Этот пакет свободно доступен под GNU GPL. Он не обновлялся довольно долгое время.

AndroChef Фирменная инструмент для декомпилировать Android программы и Java-файлы, доступные here. Не стоит денег, учитывая альтернативы, как DJ Decompiler.

Свеча Декомпилятор с открытым исходным кодом от Brad Davis. Я упоминаю об этом для полноты, но далеко не полный.

Современные инструменты

JD-Gui Вероятно, один из наиболее широко используемых инструментов для Java декомпиляции, поскольку проста в использовании и предоставляет графический пользовательский интерфейс, который позволяет быстро открыть и проверить файл класса или JAR. Вы можете найти его over here.

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

FernFlower Очень новый и перспективный аналитический Java декомпилятор (становится неотъемлемой частью IntelliJ 14). Поддерживает Java до версии 6 (аннотации, дженерики, типы перечислений).

Download from here

Это инструмент командной строки. Этот способ может отображать параметры Unicode с их полным именем.

CFR

Free, but not open source.Цель состоит в том, чтобы декомпилировать современные Java-функции, в том числе Java 8 lambdas (предварительные и post Java-бета-версии 103), Java 7 String и т. Д., Хотя сам написан на Java 6.

Также инструмент командной строки. Это делает еще лучшую работу и немного быстрее.

Процион

Open source, а также стремится иметь дело с Java 8 функций (лямбды, :: оператор). Требуется запустить Java 7.

Кракатау Krakatau интересен тем, что он был написан на Python. В настоящее время он содержит три инструмента: декомпилятор и дизассемблер для файлов классов Java и ассемблер для создания файлов классов.

Пока не поддерживает функции Java 8.

Сажа

Сажа является основой для анализа и преобразования Java и Android приложения, изначально разработанные Соболь исследовательской группы Университета Макгилла. Он не очень часто используется как «декомпилятор», так как он также определяет язык промежуточного байтового кода.

Konloch-х Bytecode просмотра

продвинутая Lightweight Java Bytecode просмотра, графический интерфейс Java Decompiler, GUI Bytecode редактор, графический интерфейс Smali, GUI Baksmali, GUI APK редактор, графический интерфейс Dex редактор, графический интерфейс APK Decompiler, GUI DEX Decompiler, GUI Procyon Java Decompiler, GUI Krakatau, GUI CFR Java Decompiler, GUI FernFlower Java Decompiler, GUI DEX2Jar, GUI Jar2DEX, GUI Jar-Jar, Hex Viewer, Code Searcher, Debugger и многое другое.

Написано полностью на Java, и это open source.

Он использует FernFlower, Процион и CFR для декомпиляции, делает этот удивительный визуальный инструмент с использованием состоянии-искусства декомпиляторов:

Энигма A tool specifically geared for deobfuscation:

Первоначально используется для deobfuscate версии Minecraft. Использует Procyon внутренне.

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

Источник: http://blog.macuyiko.com/post/2015/a-quick-look-at-java-decompilers.html