java的源代码隐藏

你要的函数其实是Java代码混乱。想知道如何把Java编译成exe,可以看“参考资料”。

下面这段话摘自《Java手机/PDA编程入门》一书,可以作为混淆器性能的概观:

我没有用过DashO,所以无法对它进行个人评价。所以我现在只说明我用过的产品。从作者个人角度来说,ZKM是最好的,JAX居中,RetroGuard和ProGuard最差,一分钱一分货是永恒的真理。如果说ZKM和JAX在功能性方面都不错的话,然而JAX是IBM开发的产品,所以它也继承了大部分IBM产品的最大特点,就是“超级功能,但是不好用”。仅仅阅读JAX的配置文件可能是一个大问题。

下面介绍几种有代表性的混淆器,并对它们的产品性能进行比较。我们使用不同的混淆器对同一个java代码进行混淆,分别列出混淆后代码反编译的结果,并给出一些直接的使用体验。

原始java代码:

公共类SimpleBean实现Serializable {

private String[] name = {"name0 "," name1 "," name2 "," name 3 " };

个人分发名单myList = null

public void SimpleBean() {

my list = new ArrayList(4);

}

public void init_public() {

my list . add(" name ");

for(int I = 1;我& lt4;i++){

init _ private(I);

}

}

private void init_private(int j) {

my list . add(name[j]);

}

私有void writeObject(Java . io . object output stream out)

引发IOException {

}

}

一. ProGuard 4.5.1

ProGuard是一个免费的Java类文件压缩器、优化器和混淆器。它可以找到并删除无用类、字段、方法和属性。它还可以优化字节码,删除无用的指令。最后,它用简单无意义的名字给你的类名、字段名、方法名重新命名。经过以上操作,jar文件会变小,很难逆向工程。Eclipse集成了Proguard。它支持脚本控制,GUI界面,未加密字符串和J2ME。

具有类似功能的开源混淆器:

逆向守卫伊瓜德(逆向守卫的升级版)JODE

Jad反编译从混淆类获得的代码:

公共类SimpleBean

实现可序列化

{

公共SimpleBean()

{

a _ java _ util _ List _ fld = null

}

public void SimpleBean()

{

a _ Java _ util _ List _ fld = new ArrayList(4);

}

public void init_public()

{

a _ Java _ util _ List _ fld . add(" name ");

for(int I = 1;我& lt4;i++)

{

int j = I;

SimpleBean simplebean = this

a _ Java _ util _ List _ fld . add(simple bean . a _ Java _ lang _ String _ array 1d _ fld[j]);

}

}

私有字符串a _ Java _ lang _ String _ array 1d _ fld[]= {

"名称0 ","名称1 ","名称2 ","名称3 "

};

私有列表a _ java _ util _ List _ fld

}

优势:

1,内部私有方法调用内联,但基本达不到混淆效果;

2.文档使用详细,有很多混淆选项配置文件的例子;

3.混淆选项的粒度很细,GUI界面可以用来支持本地方法的保护。

4.支持j2me,可以集成到Eclipse中;;

5.开源。

缺点:

1,符号混淆名称有提示性,字符串不加密,没有其他混淆措施;

2.混淆主要针对Xlet、Midlet等应用,库文件混淆时配置文件会很复杂。

第二,诙谐

JOCky是金蝶中间件(原名Joc)技术负责人袁红岗先生的个人作品。本来是方便开发Apusic应用服务器,现在开放给大家免费使用。Jocky混淆编译器是在Sun JDK提供的Java编译器(javac)的基础上完成的。修改代码生成过程,对编译器生成的中间代码进行混淆,最后生成类文件,这样编译和混淆只需一步完成。换句话说,它直接从源代码上做文章,这是Jocky与其他令人困惑的编译器的最大区别。此外,可以在源程序中插入符号保留指令来控制需要保留哪些符号,混淆过程可以与开发过程集成,而不需要单独的混淆选项配置文件。Jocky的上述特点更适合java类库的混乱。

Jad反编译从混淆类获得的代码:

公共类SimpleBean

实现可序列化

{

公共SimpleBean()

{

这个;

String as[]= new String[4];

as;

as[0]= " name 0 ";

as;

JVM INSTR交换;

1;

”name 1”;

JVM INSTR aastore

JVM指令dup

JVM INSTR交换;

2;

”名称2”;

JVM INSTR aastore

JVM指令dup

JVM INSTR交换;

3;

”名称3”;

JVM INSTR aastore

_$2;

_ $ 1 = null;

返回;

}

public void SimpleBean()

{

这个;

JVM INSTR new # 9 & lt类数组列表& gt;

JVM指令dup

JVM INSTR交换;

4;

ArrayList();

_$1;

}

public void init_public()

{

_ $ 1 . add(" name ");

for(int I = 1;我& lt4;i++)

_ $ 1㈠;

}

私有void _$1(int i)

{

_ $ 1 . add(_ $ 2[I]);

}

私有void writeObject(object output stream object output stream)

抛出IOException

{

}

私有字符串_ $ 2[];

私信列表_ $ 1;

}

优势:

1,除了符号混淆,还增加了数据混淆(字符数组初始化);

2.有些语句只能通过反编译得到字节码指令;

3.在孙JDK提供的Java编译器(javac)基础上完成,编译和混淆一次完成,不需要生成一个类文件再混淆;

4.提供了一个Eclipse的插件,可以在Eclipse中直接使用Jocky。

缺点:

1,混淆选项粒度较粗,可能需要在具体代码中添加@preserve指令才能实现,工作量较大;

2.没有控制流混淆。

三。阿拉托里3.1 _演示

阿拉托里属于第二代混淆器,有能力全方位保护你的知识产权。Allatori有以下保护方法:命名混淆、流混淆、调试信息混淆、字符串编码和水印技术。这个混淆器是免费的教育和非商业项目。版本2.1支持war和ear文件格式,并允许向需要混乱代码的应用程序添加生效日期。

Jad反编译从混淆类获得的代码:

公共类SimpleBean

实现可序列化

{

public void init_public()

{

d . add(c . k(" { u { 0 "));

int I = 1;

goto _L1

_L3:

h(一);

++ I;

_L1:

4;

JVM INSTR icmplt 21;

去L2 L3

_L2:

}

public void SimpleBean()

{

d =新数组列表(4);

}

私有void H(int a)

{

d . add(c[a]);

}

公共SimpleBean()

{

d =空;

}

私有void H(object output stream object output stream)

抛出IOException

{

}

私有字符串c[] = {

c.k("\177q\177te "),c.k("\177q\177td "),c.k("\177q\177tg "),c.k("\177q\177tf ")

};

私人名单d;

}

注意:c.k是C类的一个静态方法,是为字符串加密额外生成的。

优势:

1,设计考虑了库文件混淆的使用场景;

2.文档使用详细,有很多混淆选项配置文件的例子;

3.除了符号混淆,还使用了两种高级混淆方法:控制混淆(为循环重写)和字符串加密(字符串数组初始化);

4.混淆选项的粒度很细,支持局部方法的保护。

5.支持水印技术,允许在需要混淆的代码中添加生效日期;

6.支持j2me;

缺点:

1,商业软件(价格附后),教育和非商业用途免费(网址链接为/price.html)。

附:价格情况

单一开发者许可证

1许可证290美元

2-5个许可证260美元

6-10许可证230美元

11+许可证200美元

网站许可证3750美元

营业执照4850美元

年度支持更新45美元

第四,泽利克斯·克拉斯马斯特(ZKM)

Zelix KlassMaster是来自Zelix Pty Ltd的商业混淆器,在官方文档中很少介绍它的混淆功能。其保护功能非常强大,可以进行符号混淆和控制混淆,支持字符串、堆栈混淆、异常重构、增量混淆和J2ME的复杂加密保护。Zelix KlassMaster提供了一个试用版,可以从。

动词 (verb的缩写)DashO Pro

DashO Pro是由Preemptive Solutions开发的商业混淆器。可以下载免费的评估版。DashO Pro代码保护强大易用,方便灵活(商业软件,非开源)。这个Java混淆器是Sun的选择。对于企业应用程序,作为其Java开发包的一部分,Sun Microsystems使用DashO Pro来混淆其加密库。Dashoporo可以重命名ID,使其成为无意义的字符;混乱的元数据;改变控制流等。,所有这些操作都让java代码混乱难懂。产品特性包括:

领先的Java源代码保护机制;

使用获得专利的重载诱导技术重命名包/类/方法/域;

先进的过程控制混淆机制;

字符串加密技术;

阻止反编译器生成有用的输出;

水印软件;

提高Java源代码的效率;

不带类/方法/域完全删除常量存储库;

在类/方法级别优化以提高JIT效果;

动态加载检测到的类;

全面高效的Java源代码扩展和部署;

支持包括1.5在内的所有JDK版本(JSE、J2EE、J2ME等);

自动堆栈跟踪转换;

指定路径中的包或javajars

支持任何打包的Java内容——程序、库、小应用程序、小服务器程序、EJB等。支持J2ME CLDC架构,包括MIDP和iAppli;

CLDC预检图书馆支持类;

可以从指定的路径、Zip压缩包或jars中提取;

支持导出100%纯Java,并提供验证;

命令行界面适合集成到构建环境中;

基于XML的配置文件,简单易用;

全面准确的PDF格式用户指南。