Я пытаюсь деобфусцировать код .jar. Я создал модуль, который успешно переименовывает методы (включая возвращаемый тип), класс и его суперкласс, а также его поля.
Моя проблема сейчас в фактическом байт-коде. Я пытаюсь изменить значения FieldInsnNode и MethodInsnNode, чтобы изменить их имена. Пример: g.y.x();
должно быть node.next.generateHash()
.
MethodInsnNode min = (MethodInsnNode) insn;
min.name = remappedNames.getOrDefault(min.owner + "." + min.name + min.desc, min.name);
min.owner = remappedNames.getOrDefault(min.owner, min.owner);
min.desc = transformMethodDesc(min.desc);
Я думаю, что неправильно понимаю, как зовут, владельца и описание. Вот мое текущее понимание:
name = фактическое имя переменной. Например. в моем предыдущем примере next
обфусцированное поле name
значение равно y
.
Владелец немного сбивает с толку, я не совсем уверен, что именно, я предполагаю, что это класс, на который отвечает переменная. Например, владельцем здесь будет g
.
Буду признателен за любые разъяснения, поскольку даже когда я делаю что-то вроде min.name = "TEST"
, я не замечаю никакой разницы в декомпилированном выводе.