Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Деобфускация java, возможно или нет.

Пётр Хващевский Ученик (218), на голосовании 1 год назад
Если ли рабочий способ узнать, какой обфускатор использовался для шифровки кода? И можно ли его деобфусцировать?
Голосование за лучший ответ
Retronik33 Профи (829) 1 год назад
Этого я сказать не могу, но, наверное напишу очередную статью, надеюсь поможет...
Я кстати тоже хотел декомпилировать одну обфусцированную J2ME игру и декомпилом править и компилировать, но нифига не получалось.
Итак, в байткоде джава класса, методы и поля координально отличаются правилами обычного компилирования джава.
То есть, если ты напишешь такой код и скомпилируешь:
 String test = "Volga river!";
int test = 69;
То у тебя нифигашеньки блин не скомпилиться ёмаё, потому-что вылезет ошибка о дубликации имени переменной.
Но в байткоде джавы таких правил НЕТ! Там можно указывать хоть сколько переменных с одинаковым именем, но чтобы тип переменной был разным.
Этим стали баловаться, а потом эти баловцы стали делать проги для обфускации кода. И, да, лол, теперь если декомпилить обфусцированный код, то будет много косяков с дублированию имени переменной, это и есть фишка обфускации.
Декомпиляция тут не поможет значит, смирись...
Но если очень хочешь править чужой код, пожалуйста:
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html#jvms-4.7.5
https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html
Без знаний структуры скомпилированного класса джавы и джава ассемблерного кода тут никак не обойтись.
И да, если не хочешь юзать HEX-редактор, юзай DirtyJOE, ClassEditor для удобного просмотра/редактирования класс файла.
Удачи!
Похожие вопросы