用混淆器 可是 呵呵~~效果也不太好
您想了解反编译原理, 想自己编个反编译器和扰乱器, 这里有本免费得书 .
http://www.riis.com/depile.html其他到 yahoo 里找吧, 太多了.JJams_King: 扰乱器就是把 bytecode 中的类名,方法名,变量名等变成无意义的符号。
例如,以下源程序:
package temp;
public class HelloWorld {
  String helloWorld = "Hello World";
  String byeWorld = "Bye World";
  public static void main(String[] args) {
      new HelloWorld(true);
      new HelloWorld(false);
  }
  HelloWorld(boolean isHappy) {
      if (isHappy) {
        System.out.println(helloWorld);
      }
      else {
        System.out.println(byeWorld);
      }
  }
}
加扰后,再反编译出来是:
package a;
import java.io.PrintStream;
public class a
{
    String a;
    String b;
    a(boolean flag)
    {
        a = "Hello World";
        b = "Bye World";
        if (flag)
            System.out.println(a);
        else
            System.out.println(b);
    }
    public static void main(String astring[])
    {
        new a(true);
        new a(false);
    }
}而更高级的扰乱器,还能加密字符常量和扰乱程序流。加扰后,再反编译后变成这样:
package a;
import java.io.PrintStream;
public class a
{
    String a;
    String b;
    public static boolean c;
    a(boolean flag)
    {
        a = a("q\0041\033/\03162\005,]");
        b = a("{\0308W\027V\0231\023");
        if (!flag) goto 42 else 26;
        System.out.println(a);
        if (!c) goto 52 else 42;
        System.out.println(b);
    }    public static void main(String astring[])
    {
        new a(1);
        new a(0);
    }    private static String a(String string)
    {
        char ach[];
        int i;
        int j;
        int k;
        ach = string.toCharArray();
        i = ach.length;
        j = 0;
        k = 0;
        expression 57
        expression ach
        expression j
        expression 97
        expression ach
        expression j
        expression 93
        expression ach
        expression j
        expression 119
        expression ach
        expression j
        expression 64
        expression ach
        expression j
        dup 2 over 1
        push []
        ^
        pop []
        j++;
        k++;
        if (i == j)
            return new String(ach);
        expression k
        switch
case 1: goto 21
case 2: goto 29
case 3: goto 37
case 4: goto 45
case 5: goto 10
default: goto 54
    }
}
你想破译其中的思路可就难了 :)

解决方案 »

  1.   

    一般是用混淆器,JB自带了一个,不过不强大,有商业化的产品也有免费的。我喜欢使用一个免费的:1stBarrierMINI它的免费版本只支持包、私有级的混淆,不过够用了:)
    要更强大的功能只有注册了。如果你要这个东西,给我你的mail,我可以发一份给你。
      

  2.   

    自己写个程序将class文件变化,用时反变化呗,你的算法,谁知道怎么解密呀,那就只有你知道、天知道了。给要用这一个我文档和你的工具,让他在用时反算就行了,你既然给他用,我想一般来说就不怕他反编译了。
      

  3.   

    sharetop(老大不小) 请你也给我一个吧。
    [email protected]
      

  4.   

    javac不是有自代功能,能直接编译成.exe文件,那样不久解决了,不过就失去了跨平台的特性了
      

  5.   

    ibm的develop work好像有一篇文章说可以通过修改ClassLoader的类来实现加密,反正别的效果只能做到混淆,因为虚拟机的规范太透明了
      

  6.   

    给我你的mail,我给你例子!~