谁能给我解释一下,为了防止它被反编译成有效的java源代码,对以下字节码进行了哪些字节码修改?
0: aload_0
1: invokevirtual 102 java/lang/String:toCharArray ()[C
4: dup
5: arraylength
6: iconst_2
7: if_icmpge +12 -> 19
10: dup
11: iconst_0
12: dup2
13: caload
14: bipush 33
16: ixor
17: i2c
18: castore
19: areturn此字节码已从使用zkm混淆的类中删除。
发布于 2012-02-29 07:09:15
看起来原始代码是这样的:
char[] mystery_method(String s) {
char[] r = s.toCharArray();
if (r.length < 2) {
r[0] ^= 33;
}
return r;
}我看不出这个字节码有什么特别棘手的地方,这会给反编译器带来麻烦。
发布于 2012-02-29 07:03:02
这看起来很容易被反编译。所能做的就是混淆字节码,使decompile...which变得更难,只有在比代码看起来更复杂的代码上才能真正工作。
实际上,只需看几分钟,就可以手工反编译……
发布于 2012-02-29 07:16:19
大多数情况下,优化阶段会阻止您正确地反编译整个.class文件。嗯,至少让它变得更复杂了,因为合并了相似的代码路径。你可能会得到一堆(伪)goto,这在java中是用不到的。
https://stackoverflow.com/questions/9491145
复制相似问题