java隐藏输出代码 java隐藏按钮( 二 )


{
a_java_util_List_fld.add("name");
for(int i = 1; i4; i++)
{
int j = i;
SimpleBean simplebean = this;
a_java_util_List_fld.add(simplebean.a_java_lang_String_array1d_fld[j]);
}
}
private String a_java_lang_String_array1d_fld[] = {
"name0", "name1", "name2", "name3"
};
private List a_java_util_List_fld;
}
优点:
1、对内部private方法的调用进行了内联,但基本达不到混淆效果;
2、使用文档详尽 , 混淆选项配置文件的编写示例多;
3、混淆选项粒度较细,可以使用GUI界面,支持本地方法的保护等;
4、支持j2me,可以集成到Eclipse;
5、开源 。
缺点:
1、符号混淆的命名具有提示性,字符串未加密,没有其它的混淆措施;
2、混淆主要针对Xlet、Midlet等应用,混淆库文件时配置文件将会很复杂 。
二、Jocky
Jocky是金蝶中间件技术领袖袁红岗先生的个人作品(旧有名称JOC) 。原本是方便Apusic 应用服务器的开发 , 现在开放出来,供大家自由使用 。Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成 。也就是说,它是直接从源码上做文章,这是Jocky与其它混淆编译器最大的不同之处 。另外可以在源程序中插入符号保留指令来控制哪些符号需要保留 , 将混淆过程与开发过程融合在一起,不需要单独的混淆选项配置文件 。Jocky的上述特点较适合于java类库的混淆 。
Jad反编译混淆后class得到的代码:
public class SimpleBean
implements Serializable
{
public SimpleBean()
{
this;
String as[] = new String[4];
as;
as[0] = "name0";
as;
JVM INSTR swap ;
1;
"name1";
JVM INSTR aastore ;
JVM INSTR dup ;
JVM INSTR swap ;
2;
"name2";
JVM INSTR aastore ;
JVM INSTR dup ;
JVM INSTR swap ;
3;
"name3";
JVM INSTR aastore ;
_$2;
_$1 = null;
return;
}
public void SimpleBean()
{
this;
JVM INSTR new #9Class ArrayList;
JVM INSTR dup ;
JVM INSTR swap ;
4;
ArrayList();
_$1;
【java隐藏输出代码 java隐藏按钮】}
public void init_public()
{
_$1.add("name");
for(int i = 1; i4; i++)
_$1(i);
}
private void _$1(int i)
{
_$1.add(_$2[i]);
}
private void writeObject(ObjectOutputStream objectoutputstream)
throws IOException
{
}
private String _$2[];
private List _$1;
}
优点:
1、除符号混淆外增加了数据混淆(字符数组初始化);
2、有一些语句反编译只能得到字节码指令;
3、在Sun JDK中提供的Java编译器(javac)的基础上完成 , 编译和混淆一体完成,不需要先生成class文件再混淆;
4、提供了Eclipse的插件,能够直接在Eclipse中使用Jocky 。
缺点:
1、混淆选项粒度较粗,使用中可能要在具体代码中添加@preserve指令来实现,工作量大;
2、没有控制流混淆 。
三、Allatori 3.1_demo
Allatori属于第二代混淆器,具有全方位保护你的知识产权的能力 。Allatori具有以下几种保护方式:命名混淆,流混淆,调试信息混淆,字符串编码,以及水印技术 。对于教育和非商业项目来说这个混淆器是免费的 。2.1版本支持war和ear文件格式,并且允许对需要混淆代码的应用程序添加有效日期 。
Jad反编译混淆后class得到的代码:

推荐阅读