有人可以向我解释在下面的字节码上执行了哪些字节码修改,以防止它被反编译成有效的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模糊处理的类中删除。
答案 0 :(得分:3)
原始代码看起来像是:
char[] mystery_method(String s) {
char[] r = s.toCharArray();
if (r.length < 2) {
r[0] ^= 33;
}
return r;
}
我没有看到任何特别棘手的字节码会给反编译器带来麻烦。
答案 1 :(得分:0)
看起来可能很容易被反编译。所有可以做的就是混淆字节码,使其更难以反编译......这只能在比代码看起来更复杂的代码上运行。
事实上,这可能是手工反编译,只需看几分钟......
答案 2 :(得分:0)
大多数情况下,优化阶段会阻止您正确地反编译整个.class文件。好吧,至少使它变得更复杂,因为例如合并类似的代码路径。你可能会得到一堆(伪)goto,你不能在java中使用它。