Использование ASM для сопоставления имен полей - PullRequest
0 голосов
/ 06 октября 2018

В настоящее время я создаю инструмент обратного инжиниринга 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;
}

Как видите, не оченьточный.

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

Спасибо за чтение!

...