1

我正在查看一个混淆的应用程序,该应用程序似乎有很多我想要重新排列或删除的 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++;
                }
            }
        }

所以我尝试将它们全部删除,但它似乎不起作用,我不知道如何重新排列它们

4

1 回答 1

1

我认为你不能轻易解决这个问题,它看起来像是一个非常激进的混淆机制。您可以尝试取消它,通过对 goto 跳转之间的块进行碎片整理来线性化代码。但是,一些 goto 是合法的流控制跳转,所以你需要一种方法来检测它。这看起来是一个真正的挑战,需要你花费很多时间。但是,也许挑战足以推动前进:)

于 2013-08-16T19:10:24.587 回答