java代码保护

84 篇文章 0 订阅

为什么要进行Java代码保护?

传统的C/C++编译生成的.o文件,安全性相对较高,而Java编译生成的.class文件很容易被反编译,java代码很容易被窃取,因此java代码的保护应该受到重视。

一 Java自身提供的安全机制

Java技术提供了三种确保安全的机制:

  1. 语言设计特性,例如对数组的边界进行检查,不接受无检查类型的转换和无指针算法等。
  2. 访问控制机制,用于控制代码能够执行的功能,比如文件访问、网络访问等。
  3. 代码签名,代码的作者可以使用加密算法来标明java代码的身份,这样,该代码的使用者就能够准确地知道谁创建了该代码,以及代码被标识后是否被修改过。

二 第三方java代码保护机制

2.1 将java伪装成exe文件

优点:将jar包伪装成exe可执行文件,便于使用。

缺点:这种伪装成exe的程序运行时会将jar文武兼释放到临时目录,很容易获取。

工具:exe4j、jsmooth、NativeJ

2.2 Java代码混淆

优点:使用一种或多种处理方式将class文件或java源代码进行混淆处理后生成新的class,使用混淆后的代码不容易被反编译,而且反编译后的代码难以阅读和理解。

缺点:虽然混淆的代码反编译后不易读懂,但对于有经验的人或是多花些时间,还是能找到或计算出你代码中隐藏的敏感内容,而且在很多应用中不是全部代码都能混淆的,往往一些关键的库、类名、方法名、变量名等因使用要求的限制反而还不能混淆

工具:Proguard

2.3 隔离java程序到服务端

优点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。这样可以比较好的保护java代码。

缺点必须是客户/服务模式,这种特点限制了此种方式的使用范围;客户端因为逻辑的暴露始终是较为薄弱的环节,所以访问接口时一般都需要安全性认证。

2.4 提前编译技术AOT

优点:将java代码静态编译成本地机器码,脱离通用JRE。此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。

缺点:由于与通用JRE的差异和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护,只能使用此种工具提供的一个运行环境,如果工具更新滞后或你需要特定版本的JRE,有可能得不到此种工具的支持。

工具:GNU的gcj

2.5 使用jni方式保护

优点:将敏感方法和数据通过JNI方式封装到底层库中。

缺点:降低了代码的可移植性,需要进行多平台版本开发。

工具:NDK

2.6 不脱离JRE的综合方式保护

优点: 此种方式由于采取了多种保护措施,比如自定义执行器和装载器、加密、JNI、安全性检测、生成可执行文件等等,使保护力度大大增强,同样能够非常有效地保 护java代码。

缺点:由于jar文件存在方式的改变和java运用中的复杂性,并非java程序中的所有jar都能得到完全的保护;很有可能并不支持所有的JRE版本。

工具:JXMaker

2.7 使用加密锁硬件保护

优点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的 受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。此种方式与以上不脱离JRE的综合方式保护相似,只是使用了专用硬件设备,也能很好地保护java代码。

缺点:有人认为加密锁用户使用上不太方便,且每个安装需要附带一个。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
众所周知,java开发语言提供了很方便的开发平台,而且开发出来的程序很容易在不同的平台上面进行移植,现在越来越多的人使用它开发软件。 Java有了它方便的一个方面,但是他同时也带给了开发者一个烦恼,这就是保护的办法不多,而且大多数不是很好用,这样自己辛苦开发出来的程序很容易被人反编译过来而据为己有,一般情况下,大多数的人都是用混编器(java obfuscator)来把开发出来的程序进行打乱以达到没有办法来反编译观看源代码,但是这种办法在网上很容易找到相关的软件来重新整理,那么这个混编只能控制一些本来也没有办法动您的软件的人,而对于一些掌握工具的人几乎是透明的,还有就是利用硬件加密锁,但大多数公司提供的硬件加密锁只是提供了一些dll的连接或简单的api调用,只要反编译他们,就很容易把一些api调用去掉,这样硬件加密锁也就不起作用了,但是现在到底有没有好的办法呢? 市场上现有的几款防止反编译工具其实都是改进了加载过程。但是加载到JAVA虚拟机后一样可以得到CLASS字节码的。 只要懂JAVA原理的人其实很用意破解的. JAVACOMPILE 这款工具就不一样了,javacompile 它是修改了虚拟机内核, 用户目录里没有需要的JAVA字节码,而是当JAVA需要调用函数的时候才通过网络下载相对应的已经二次编译的字节码,就算用户通过 CLASS.getClass 也得不到可以用来反编译字节码。 真正意义上保护JAVA知识产权。 个人版限制编译30个CLASS文件,文件打包方式下载。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值