有人可以解释执行的字节码修改,以防止这个字节码被直接反编译?

时间:2012-02-28 23:00:34

标签: java obfuscation bytecode

有人可以向我解释在下面的字节码上执行了哪些字节码修改,以防止它被反编译成有效的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模糊处理的类中删除。

3 个答案:

答案 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中使用它。