Java代码混淆和加密--Jocky
java源代码加密1.1 什么是Jocky?
我们知道,Java是⼀种跨平台的编程语⾔,其源码(.java⽂件)被编译成与平台⽆关的字节码(.class⽂件),然后在运⾏期动态链接。这样,编译后的类⽂件中将包含有符号表,从⽽使得Java程序很容易被反编译。相信每⼀个Java开发⼈员,都曾经⽤过诸如Jad之类的反编译器,对Java的class ⽂件进⾏反编译,从⽽观察程序的结构与实现细节。如此⼀来,对于那些需要严格进⾏知识产权保护的Java应⽤,如何有效的保护客户的商业投资,是开发⼈员经常需要⾯对的问题。于是就出现了Java混淆编译器,它的作⽤是打乱class⽂件中的符号信息,从⽽使反向⼯程变得⾮常困难。 Jocky就是这样⼀款优秀的Java混淆编译器。
1.2 为什么需要Jocky?
⽬前业界有不少商业的甚或是开源的混淆编译器,但它们普遍存在⼀些这样或者那样的问题。⼀般⽽⾔,现有的混淆器都是对编译好的class⽂件进⾏混淆,这样就需要编译和混淆两个步骤。⽽事实上,并不是所有的符号都需要混淆。如果你开发的是⼀个类库,或者某些类需要动态装载,那些公共API(或者说:那些被publish出来的API)就必须保留符号不变,只有这样,别⼈才能使⽤你的类库。现有的混淆器提供了GUI或脚本的⽅式来对那些需要保留的符号名称进⾏配置,但如果程序较⼤时,配置⼯作将变得
很复杂,⽽程序⼀旦修改,配置⼯作⼜要重新进⾏。某些混淆器能够调整字节码的顺序,使反编译更加困难,但笔者经历过混淆之后的程序运⾏出错的情况。⽽Jocky与其它混淆编译器最⼤的不同之处在于:它是直接从源码上做⽂章,也就是说编译过程本⾝就是⼀个混淆过程。
1.3 Jocky是如何⼯作的?
Jocky混淆编译器是在Sun JDK中提供的Java编译器(javac)的基础上完成的,修改了其中的代码⽣成过程,对编译器⽣成的中间代码进⾏混淆,最后再⽣成class⽂件,这样编译和混淆只需要⼀个步骤就可以完成。另外可以在源程序中插⼊符号保留指令来控制哪些符号需要保留,将混淆过程与开发过程融合在⼀起,不需要单独的配置。
以上为摘抄
Jocky的下载和配置
OperaMasks上的下载链接已经失效,请移步CSDN⾃⾏搜索下载
1、下载完成后解压得到名为org.apusic.jocky_1.0.3的⽂件夹,把这个⽂件夹放到eclipse根⽬录的plugins⽂件夹下(myeclipse和eclipse同理)。
2、重启eclipse,右键⼀个⼯程⽂件,出现Jocky选项说明OK。
3、⼀般是先进⾏设置-Jocky Settings,然后进⾏Jocky Now!。以下是settings界⾯
Enable Jocky多选框选中
Jocky build file是在项⽬创建⼀个xml⽂件,根据⾥⾯的配置进⾏混淆
Scramble level是进⾏混淆的代码等级,有none、private、package、protected、public、all,将根据设置对java⽂件中的相应修饰符修饰的⽅法代码进⾏混淆
Target VM是java虚拟机的版本,有1.4和1.5,⼀般选择1.5
Output directory是输出⽂件夹,在项⽬根⽬录下
点击确认会⾃动根据项⽬的设置⽣成xml⽂件
4、l,实际上是⼀个ant build⽂件,由系统⾃动⽣成,有⼏处需要说明
1. <pathelement location="bin"/> <pathelement location="XXX.jar"/>这类标签代表项⽬编译所需的jar包,由于是⾃动⽣成⼀般不⽤理
睬,如果出现不到相关的package之类的报错,那么有可能是location路径有问题。如果你安装系统时是⽤户名设置成了中⽂名,并且使⽤了maven,maven的jar包的下载路径设置成了默认${user}/.m2/repository/,那么jocky这⾥的路径会出现问题,中⽂名的⽤户名会乱码或者消失,请修改maven配置xml⽂件修改下载路径<localRepository>[⾃⼰指定的路径]</localRepository> 。
2. <javac destdir="${jocky.output.dir}/bin" target="${target}" encoding="UTF-8" > 代码中如果有中⽂名,必须⼿动设定编码,默认是没有
的。
3. <src path="src"/> 设定源⽂件的⽬录,因为有时候我们只想输出src⽬录下的部分包⽽不是全部。
5、最后Jocky Now!⽣成的.class⽂件要通过命令进⾏打包,下篇⽂章简单介绍。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论