Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
重新安排转到';s使用ASM[JAVA]_Java_Obfuscation_Bytecode - Fatal编程技术网

重新安排转到';s使用ASM[JAVA]

重新安排转到';s使用ASM[JAVA],java,obfuscation,bytecode,Java,Obfuscation,Bytecode,我正在看一个模糊的应用程序,该应用程序似乎有很多我想重新排列或删除的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()) !=

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


所以我试着将它们全部移除,但似乎不起作用,而且我不知道如何重新排列它们。我不认为你能很容易地解决这个问题,它看起来像是一个相当激进的混淆机制。您可以尝试取消跳转,通过对跳转之间的块进行碎片整理来线性化代码。但是,有些goto是合法的流控制跳转,所以您需要一种方法来检测它。这看起来是一个真正的挑战,它会占用你很多时间。但是,也许挑战已经足够大,可以向前推进:)

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

发布一些代码。告诉我们你试过什么。告诉我们您遇到了什么问题。eww转到。。。快跑,快跑!如果你能删除所有的GoTo,它仍然可以工作,那就太奇怪了,不是吗?显然,这不是死代码。你可以用
break
和一大堆精心布置的花括号来实现
goto
。你试过Krakatau反编译器()吗?它非常擅长处理像这样的控制流混淆。如果这不起作用,给我发一些模糊的类(假设你可以合法的),我会看看我是否能找出问题所在。发布一些代码。告诉我们你试过什么。告诉我们您遇到了什么问题。eww转到。。。快跑,快跑!如果你能删除所有的GoTo,它仍然可以工作,那就太奇怪了,不是吗?显然,这不是死代码。你可以用
break
和一大堆精心布置的花括号来实现
goto
。你试过Krakatau反编译器()吗?它非常擅长处理像这样的控制流混淆。如果这不起作用,请将模糊类发送给我(假设您可以合法地发送),我将看看是否可以找出问题所在。谢谢!是的,它被彻底弄糊涂了。这种模糊处理还引入了我设法解决的伪方法和伪try-catch块,但goto的问题是最大的:你可以使用Krakatau,它会自动做到这一点。(披露,我写的)@sbumb我从你上面的评论猜到:)但是Krakatau的输出是不是可以让你很容易地读出程序逻辑,而不是Java中字节码的行为等价物?因为这将是去模糊处理的要点。@Marko这取决于它被模糊处理的程度。喀拉喀托会自动进行一些除臭,但为了达到最佳效果,还需要手动除臭。但话说回来,不管你用什么,这都是真的。无论如何,我的目标之一是让人们更容易添加自定义通行证,但我仍在尝试。谢谢!是的,它被彻底弄糊涂了。这种模糊处理还引入了我设法解决的伪方法和伪try-catch块,但goto的问题是最大的:你可以使用Krakatau,它会自动做到这一点。(披露,我写的)@sbumb我从你上面的评论猜到:)但是Krakatau的输出是不是可以让你很容易地读出程序逻辑,而不是Java中字节码的行为等价物?因为这将是去模糊处理的要点。@Marko这取决于它被模糊处理的程度。喀拉喀托会自动进行一些除臭,但为了达到最佳效果,还需要手动除臭。但话说回来,不管你用什么,这都是真的。无论如何,我的目标之一是让人们更容易添加自定义通行证,但我仍在尝试。