JBuilder里也带混淆器,编译的时候选上就可以了。

解决方案 »

  1.   

    Jbuilder 8以后就支持混淆器了,但是对性能有影响
      

  2.   

    只能使用混淆器了,因为java的字节吗的调用使用了简单的堆栈!而且本身又有着严格的语法规范!所以非常容易恢复成源文件!混淆器只能增加反编译的难度,却不能从根本上杜绝反编译。
      

  3.   

    我下过国外高手写的.class,用JAD反编译得到的结果竟然是什么都没有
    请问这是为什么?
      

  4.   

    Jbuilder7以上版本的Wizard菜单里面可以生成.exe文件了。这样就可以起到简单的加密功能/
      

  5.   

    我刚在文档中心看了篇文章,一个牛人写的大家可以看看http://www.csdn.net/develop/Read_Article.asp?Id=18807
      

  6.   

    只能增加反汇编的难度,不可能完全杜绝,即使编译成exe也可以轻松的被反编译!
      

  7.   

    http://www-900.ibm.com/developerWorks/cn/java/l-protectjava/index.shtml
    http://www-900.ibm.com/developerWorks/cn/java/j-staticsec/index.shtml
      

  8.   

    DES加密
    生成密钥:
    // GenerateKey.javaimport java.security.*;
    import javax.crypto.*;
    import javax.crypto.spec.*;public class GenerateKey
    {
      static public void main( String args[] ) throws Exception {
        String keyFilename = "key.data";
        String algorithm = "DES";    // 生成密匙
        SecureRandom sr = new SecureRandom();
        KeyGenerator kg = KeyGenerator.getInstance( algorithm );
        kg.init( sr );
        SecretKey key = kg.generateKey();    // 把密匙数据保存到文件
        Util.writeFile( keyFilename, key.getEncoded() );
      }
    }
    加密解密:
    import java.io.*;
    import java.security.*;
    import java.lang.reflect.*;
    import javax.crypto.*;
    import javax.crypto.spec.*;public class Encrypt extends ClassLoader{
      public Encrypt(){}  static public void main( String args[] ) throws Exception {
        String keyFilename = "key.data";
        String algorithm = "DES";
        Cipher cipher;
        // 生成密匙
        SecureRandom sr = new SecureRandom();
        byte rawKey[] = Util.readFile( keyFilename );
        DESKeySpec dks = new DESKeySpec( rawKey );
        SecretKeyFactory keyFactory = SecretKeyFactory.getInstance( algorithm );
        SecretKey key = keyFactory.generateSecret( dks );    // 创建用于实际加密操作的Cipher对象
        Cipher ecipher = Cipher.getInstance( algorithm );
        Cipher dcipher = Cipher.getInstance( algorithm );
        ecipher.init( Cipher.ENCRYPT_MODE, key, sr );
        dcipher.init( Cipher.DECRYPT_MODE, key, sr );    // 加密命令行中指定的每一个类      String filename = "Foo.class";
          String filename1 = "FooEncrypt.class";
          String filename2 = "FooDecrypt.class";
          // 读入类文件
          byte classData[] = Util.readFile( filename );      // 加密
          byte encryptedClassData[] = ecipher.doFinal( classData );
          Util.writeFile( filename1, encryptedClassData );
          //解密
          byte decryptedClassData[] = dcipher.doFinal( encryptedClassData );
          Util.writeFile( filename2, decryptedClassData );
      }public Class getClass(String name,byte[] data)
      {
        return defineClass( name, data,
                0, data.length );
      }
    }
    //读写文件:
    // Util.javaimport java.io.*;public class Util
    {
      // 把文件读入byte数组
      static public byte[] readFile( String filename ) throws IOException {
        File file = new File( filename );
        long len = file.length();
        byte data[] = new byte[(int)len];
        FileInputStream fin = new FileInputStream( file );
        int r = fin.read( data );
        if (r != len)
          throw new IOException( "Only read "+r+" of "+len+" for "+file );
        fin.close();
        return data;
      }  // 把byte数组写出到文件
      static public void writeFile( String filename, byte data[] )
          throws IOException {
        FileOutputStream fout = new FileOutputStream( filename );
        fout.write( data );
        fout.close();
      }
    }
    其他还在研究