В настоящее время я создаю инструмент обратного инжиниринга Java с ASM в качестве практики с использованием библиотеки ASM.Цель состоит в том, чтобы предоставить набор сигнатур, которые соответствуют де-обфусцированным именам классов / методов / полей данного jar-файла.
Пока это был большой опыт обучения, и у меня не было много проблем до сих пор.Я могу довольно легко отобразить имена классов и методов (используя дескрипторы и инструкции ldc внутри метода), но отображение полей оказалось немного более сложным.
У меня есть только один метод, чтобы найти целевой FieldNodeи это тип поля.Бесполезно, когда у класса есть несколько полей одного типа.
Вот мой код для определения, является ли поле целью:
public static boolean isMatch (ClassNode classNode, FieldNode node, FieldSignature signature) {
//Test type
if (signature.type != null) {
String type = Type.getType(node.desc).getClassName();
if (signature.type.equals("*class*")) {
if (type.equals(classNode.name)) {
return true;
}
}
if (type.equals(signature.type)) {
return true;
}
}
return false;
}
Как видите, не оченьточный.
У кого-нибудь были бы предложения относительно того, как я мог бы сузить свой поиск?Я думал о попытке сопоставить набор инструкций, ведущих к вызываемому полю, и использовать имя поля инструкции путфилда.
Спасибо за чтение!