我正在查看一个混淆的应用程序,该应用程序似乎有很多我要重新排列或删除的GOTO
问题是,我该怎么做呢?
for(final MethodNode mn : classNode.methods) {
final BIF is = new BIF(mn); //BIF is my bytecode instruction finder
AbstractInsnNode ain;
while ((ain = is.next()) != null) {
if (ain instanceof JumpInsnNode && ain.getOpcode() == GOTO) {
final JumpInsnNode jump = (JumpInsnNode) ain;
mn.instructions.remove(jump);
removed++;
}
}
}
所以我尝试将它们全部删除,但它似乎不起作用,我不知道如何重新排列它们
答案 0 :(得分:1)
我认为你不能轻易解决这个问题,它看起来像是一个非常激进的混淆机制。您可以尝试取消转到它,通过对goto跳转之间的块进行碎片整理来线性化代码。但是,有些goto是合法的流量控制跳转,所以你需要一种方法来检测它。这看起来像是一个真正的挑战,需要花费大量时间。但是,也许挑战足以推动前进:)