使用ASM映射字段名称

时间:2018-10-05 23:31:08

标签: java reverse-engineering bytecode java-bytecode-asm

我目前正在使用ASM库创建带有ASM的Java逆向工程工具。目的是提供一组与给定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;
}

如您所见,不是很精确。

有人会建议我如何缩小搜索范围吗?我当时想尝试匹配导致一个名为putfield的指令集并使用putfield指令的字段名称。

感谢阅读!

0 个答案:

没有答案