Tired of ads? Upgrade to paid account and never see ads again!

ru_java


ru.java

все о языке программирования java


Previous Entry Share Next Entry
Декомпилятор JAVA
cat, atomic, java
nicolas_dm wrote in ru_java
Доброго времени суток всем,

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

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

JAD гляньте. Не припомню проблем с компиляцией его вывода.

спасибо, сейчас гляну

в итоге, JAD справился хуже, чем JD-core, некоторые классы вообще рассыпались на невнятные копии друг друга с постфиксом $<номер копии>

Тогда у меня есть сомнения что вы найдете что-то полностью рабочее на ваших классах. Я джадом декомпилил отдельные файлы, его вывод был вполне рабочий. Может кто-то еще подскажет.

буду копать дальше, а так, поправляю ошибки, в основном некритичные, то приведение типов кривое, то класс не импортировался, думаю за пару дней справлюсь вплоть до скомпилированного приложения

> невнятные копии друг друга с постфиксом $<номер копии>
Результат компиляции класса с внутренними анонимными классами никогда не видели? :)

Как же не видеть, видел конечно, просто не ожидал от декомпилятора, что он будет их распихивать по отдельным файлам. Логично же поместить анонимный класс туда, где он был создан.

байткод не всегда получается из компиляции с языка Java

оригинальным языком может быть scala / closure / xslt например, и маппинг в яву, грубо говоря, возможен лишь в частных случаях

во-вторых компиляторы и декомпиляторы сильно изменяются со временем, поэтому "у меня не работает" - "а у меня всё работает" это не разговор
попытайтесь указать версии компилятора и использованного вами декомпилятора например
может у вас jdk8 с новыми конструкциями, тогда таких декомпиляторов просто быть не может

также будет смешно, если вы банально пробуете компилять полученные сорцы более старым компилятором, чем исходный

все верно и это все учтено, исходный jdk/jre проекта - 1.6, язык - нативная java + библиотеки swing, поэтому JD-core в этом случае показало лучший результат, в отличии того же JAD, который все же староват для 1.6. Преемственность версий соблюдена. Поэтому просто тихим сапом, как писал выше, поправлю ошибки декомпиляции и будет все гуд. Тем более, восстановление практически 100%'е, т.к. названия классов, свойств, методов и переменных сохранено и восстановлено как у исходного проекта, а не мешанина из int aA, string bC.

Disclaimer: я автор Fernflower :)

Очень любопытно, не поделитесь парочкой классов из тех, что не компилируются? Чтобы больше половины вообще не обработались, да еще пустыми получились, на моей памяти пока не случалось... Буду благодарен, если выложите их куда-нибудь и дадите ссылку в личку - разберемся.

на такое даже и надеялся))) конечно же буду рад поделиться.

Прошу прощения что встреваю в вашу беседу, а также что пишу от ВКшного контакта. Уважаемый stiver_rus, подскажите, а есть ли возможность получить свежий фернфловер или хотя бы декомпилировать наши бинарники им? Исторически сложилось, что по данному проекту нет исходников, мы вроде как достаточно успешно декомпилируем его через jd-gui, но хотели бы попробовать еще и вашим. Или взять тот, что можно скачать из интернетов? Посоветуйте, вообщем, хотели бы стать вашими бета тестерами. Проект достаточно крупный и серьезный. Если интересно - напишите в почту plotnikovya(@)gmail(.)com

Все получилось самым лучшим образом, после правки ошибок все скомпилировалось и завелось в штатном порядке. Конечно, я считаю, что мне повезло на 99%, т.к. проект был скомпилин в debug режиме. Итого, резюмирую, JD-core справился с проектом написанным на нативной java, хотя и с ошибками при декомпиляции, которые легко правятся. Теперь надо дождаться stiver-rus, получится ли у него декомпилировать проект с помощью его разработки. Желаю ему в этом успехов.