ru_java, posts by tag: decompiler - LiveJournal (original) (raw)

Декомпилятор JAVA

Доброго времени суток всем,

Столкнулся с задачей, когда нужно разобрать исходный код уже готового откомпилинного swing приложения. Порыскал в просторах интернета, получил 2 предпочитаемых декомпилятора - JD-core с оболочкой JD-Gui и fernflower.
JD-core - очень удобно, быстро, но при желании скомпилировать полученные сырцы вываливается огромное количество ошибок, которые наплодил декомпилятор.
fernflower - в текущем виде, в котором я его нашел не подходит, несмотря на его громкие заявления о "интеллектуальной" декомпиляции. В итоге более половины классов просто не декомпелировались, получились пустые файлы. Также на просторах инета и на хабре писалось, что надо применить патч на fernflower, но опять же исходников этого проекта нет, автор не выкладывает его в паблик, а при декомпиляции получаем такую же картину, декомпиляция есть, патч наложен, а обратно скомпилировать, только править ошибки после декомпиляции.

Собственно вопрос, кто знает, есть ли еще какие декомпиляторы, которые нормально могут вернуть исходный код проекта, который был скомпилин в debug режиме?
ПЫСЫ. Я не преследую целью создать свое приложение на основании

украденого

позаимствованного с преферансом и дамами. Все в рамках взаимодействия с правообладателем.

decompilation

lockdog6669

February 27th, 2010

Добрый день!
На работе необходимо освоить библиотеки rhino, и наткнулся я в мануале на такой текст.
Опция к компилятору javascript файлов (*.js --> *.class):

-nosource

Does not save the source in the class file. Functions and scripts compiled this way cannot be decompiled. This option can be used to avoid distributing source or simply to save space in the resulting class file.

Ради интереса решил проверить декомпильнуть DJ Java Decompiler, и оба файла (с включенной и выключенной опцией -nosource) компильнулись одинаково.

Я удивлён тем, что прямо пишут "вкладывать исходинк в class файл".
Есть ли какой-то правильный (культурный) способ извлечения исходника из class файла, кроме как декомпилер?
И если декомпилер сработал и в том и в другом случае, то что, собственно делает эта опция?

Переименование обфусцированных элементов

Standard

stiver_rus

July 27th, 2009

Как известно, обфускаторы переименовывают классы, поля и методы. Причем выбирают имена таким образом, чтобы они были

  1. как можно короче (или резервированные слова)
  2. как можно больше элементов имели одинаковое имя
    В итоге получается нечто вроде
class a {
   int a;
   String a;
   void try(){...};
   int double(int a){...};    
}

что естественно не поддается рекомпиляции. Понятно, что восстановить изначальные названия невозможно, и декомпилятор должен давать таким элементам новые имена по собственному разумению.

Техническая часть готова, соответствующий модуль к Fernflower сейчас тестируется и будет скоро подключен. Дело теперь только за разумными правилами выбора новых имен.

Отсюда вопрос общественности: какую схему переименования вам хотелось бы видеть в декомпиляторе? Какие имена будут наиболее информативны и удобны в работе?

Best Java decompiler.

main_framer

June 17th, 2009

Доброго времени суток!

Поделитесь пожалуйста опытом - какой ваш любимый Java decompiler.
Желательно - с GUI и open source.

Мне на данный момент очень нравиться "Java Decompiler. Yet another fast Java decompiler."
http://java.decompiler.free.fr/

Благодарю.

Аналитический декомпилятор Fernflower

Standard

stiver_rus

May 20th, 2009

Как было обещано некоторое время назад, официально объявляю о начале открытого бета теста моего декомпилятора. Ниже следует краткое описание и ответы на основные вопросы:

( <--- Объемный текст --->Collapse )

8) Выводы и манифест

Со своей стороны могу гарантировать - с поправкой на force majeure - следующее:

a) Декомпилятор всегда будет в бесплатном доступе
b) Буду поддерживать, исправлять баги и развивать Fernflower по мере сил
c) Если в какой-то момент я пойму, что больше не могу уделять проекту необходимое количество времени, то сразу открою его под GPL-подобной лицензией независимо ни от каких внешних обстоятельств

Взамен я рассчитываю на помощь общественности в отлове багов и определении функционала для дальнейшей реализации. В принципе у вас есть уникальная возможность :) - получить декомпилятор именно с теми характеристиками, которые всегда хотели в нем видеть. Благо разработчик доступен и исчезать не собирается. Соответствующие вопросы буду наверное и дальше размещать в этом сообществе, если не найдется какого-либо более подходящего места. Немного более подробная информация будет появляться у меня в журнале.

9) Связь

Со мной можно связаться:

- через www.reversed-java.com
- через журнал
- через fernflower (dot) decompiler (at) gmail (dot) com

Как кому удобнее.

Update: нет, так мы каши не сварим. Временно включил сохранение классов. Иначе вопросы идут, а слать тестовый материал никто не собирается и гадай как знаешь.