Jocky代码混淆器是使用小心得

Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码生成过程,对编译器生成的中间代码进行混淆,最后再生成class文件,这样编译和混淆只需要一个步骤就可以完成。另外可以在源程序中插入 符号保留指令 来控制哪些符号需要保留,将混淆过程与开发过程融合在一起,不需要单独的配置。

使用步骤:
1、下载jocky.jar和jocky-ant.jar,并加到工程的WEB-INF/lib目录下。

2、在工程下编写ant的脚本文件,主要是加上
<!--引入jocky任务-->
<path id="kocky.lib">
<pathelement location="${web.inf}/lib/jocky.jar"/>
<pathelement location="${web.inf}/lib/jocky_ant.jar"/>
</path>
<taskdef resource="jockytasks" classpathref="kocky.lib" > </taskdef>
在执行javac任务之前加上

<jocky jar="${web.inf}/lib/jocky.jar" enable="true" level="protected"> </jocky>

例如:
<target name="compile" depends="copy.spring_test" description="compile the source">
<jocky jar="${web.inf}/lib/jocky.jar" enable="true" level="protected"> </jocky>
<javac srcdir="${src}" destdir="${web.inf}/classes" fork="true" memorymaximumsize="500M" source="1.5" target="1.5" debug="true" >
<classpath refid="project.class.path" />
</javac>
</target>
Level的取值情况说明:
none 不进行混淆;
private 对所有private访问级别的元素进行混淆;
package 对所有private或package private元素进行混淆;
protected 对所有private, package private, protected元素进行混淆;
public 对所有的元素都进行混淆;
all 相当于public;
推荐使用protected以下的混淆级别,不要对public的进行混淆,否则容易出错,因为public 的东西与类外界交互多,易于出错。

3、使用ant运行编写的脚本,中间可能会出的错:
? 代码版本不对,将源代码工程的buildpath的jdk版本换成1.5,这东西只支持这个版本
? 工程的某个地方代码有错,有时是null,有时是classnotfound,等等,这是由于混淆后,一些类或者类中的东西变得不可识别了,这就是风险啊,找到出错的地方,出错代码的上方加上/**
* @preserve
*/
这种注释。表示这里不用混淆。
? 如果在myeclipse里直接运行脚本出错的话,就用控制台,cd到脚本所在的目录使用命令:
Ant -f <脚本文件名> 进行运行(前提是ant配置在系统path中)

4、经过运行ant脚本,那么系统中你所要进行混淆的代码就已经生成了混淆后的class文件,可以用反编译工具来看下,里面很多变量都换了莫名其妙的名字,目的达到,之后就是打包,发布了。

其实之前工作以来学了些东西,但是都是太懒,从来都没弄上来,以后勤快点,自己也要努力。

猜你喜欢

转载自a14.iteye.com/blog/1152805