Previous Entry Share Next Entry
Let's look inside...
Инфра
lerm_ru
Поговорим немного о хороших программах. Точнее, об одной очень хорошей программе.

Одним из замечательных качеств Java является возможность восстановить исходных текст программы по имеющемуся class-файлу – разумеется, декомпиляцию можно проводить и для других языков, но Java-вские программы восстанавливаются значительно легче многих других популярных средств разработки. Связано это в основном с тем, что стандартный компилятор Java не особенно сильно модифицирует код, компилируя его довольно прямолинейно – непосредственно оптимизация отдается на откуп JIT-у. Конечно, если применяются какие-то внешние средства (обфускаторы, оптимизаторы и т.д.), то сложность реконструкции исходного текста резко возрастает, но во многих случаях до такого извращения дело не доходит. Исторически, наиболее продвинутым средством для декомпиляции Java-классов считался JAD – собственно, большинство ссылок в сети для декомпиляторов Java совсем недавно еще указывали либо на сам JAD, либо на различные оболочки к нему (например, DJ Java Decompiler). Однако у JAD-а есть один, но очень существенный недостаток – он прекратил свое развитие, а значит надежд на улучшение качества генерируемых им файлов практически не осталось. Увы, в текущем виде JAD позволяет разобраться во внутренней структуре программы, но получение повторно компилируемого исходника (идеальный результат для декомпилятора) для нетривиальных классов практически исключено – исходники приходится довольно сильно дорабатывать руками.
К счастью, чуть больше года назад, в сети появился достойный соперник JAD-а, который к настоящему моменту вырос в очень приятный продукт. Речь идет о Java Decompiler (JD). Да, знаю, я немного торможу, но до меня JD добрался только сейчас и с первого же взгляда просто очаровал двумя вещами – во-первых, качеством генерируемого кода, а во-вторых – поразительной скоростью работы. JD уверенно справляется с ситуациями, когда пасует JAD – например, разбирает сложные цепочки catch-блоков, что значительно облегчает получение читаемого кода. Пока ещё декомпилируется далеко не всё, но проект активно развивается, так что есть основания полагать, что результаты будут становиться всё лучше. Что касается скорости работы, то при работе с программой создается впечатление, что самого процесса декомпиляции просто нет – вы просто щелкаете на нужном классе и тут же без задержки получаете его текст. Отменной скоростью отличаются и другие функции – здоровенный jar-файл загружается также почти моментально, также быстро происходит и дальнейшая работа с ним. А если к этому добавить довольно удобный интерфейс и крохотный размер, то становится понятно, почему JAD был отправлен мною в отставку спустя буквально несколько минут работы с JD. В общем – рекомендую.
Программа бесплатная, но несвободная. Доступны сборки для Windows, Linux и MacOS (сам JD написан на C++) – во всех случаях речь идет о графическом приложении, консольной версии нет.
Java Decompiler
Будем ждать, во что разовьется этот бесспорно интересный проект. А пока, для получения гарантированно повторно комплируемых исходников остается использовать Soot.

  • 1
Сейчас закачаем...

  • 1
?

Log in

No account? Create an account