我目前正在使用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指令的字段名称。
感谢阅读!