在java代码中往往包含着一些非常敏感的信息,有些关系到开发者的利益,有些可能因为使用环境不同而关系到软件用户的利益,于是,java程序是赤膊上阵还是全副武装这个现实问题就摆在了java开发人员的面前,所以在这种情况下,从开发商和用户两方面角度考虑,都非常有必要对java程序进行保护。以下从技术角度就常见的保护措施和常用工具来看看如何有效保护java代码:

  将java包装成exe

  特点:将jar包装成可执行文件,便于使用,但对java程序没有任何保护。

  不要以为生成了exe就和普通可执行文件效果一样了。这些包装成exe的程序运行时都会将jar文件释放到临时目录,很容易获取。

  常用的工具有exe4j、jsmooth、NativeJ等等。jsmooth生成的exe运行时临时目录在exe所在目录中或是用户临时目录 中;exe4j生成的exe运行时临时目录在用户临时目录中;NativeJ生成的exe直接用winrar打开,然后用zip格式修复成一个jar文 件,就得到了原文件。如果只是为了使用和发布方便,不需要保护java代码,使用这些工具是很好的选择。

  java混淆器

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

  这类混淆器工具很多,而且也很有成效。

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

  隔离java程序到服务端

  特点:把java程序放到服务端,让用户不能访问到class文件和相关配套文件,客户端只通过接口访问。

  这种方式在客户/服务模式的应用中能较好地保护java代码。

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

  java加密保护

  特点:自定义ClassLoader,将class文件和相关文件加密,运行时由此ClassLoader解密相关文件并装载类,要起到保护作用必须自定 义本地代码执行器将自定义ClassLoader和加密解密的相关类和配套文件也保护起来。

  此种方式能很有效地保护java代码。

  缺点:可以通过替换JRE包中与类装载相关的java类或虚拟机动态库截获java字节码。

  jar2exe属于这类工具。

  提前编译技术(AOT)

  特点:将java代码静态编译成本地机器码,脱离通用JRE。

  此种方式能够非常有效地保护java代码,且程序启动比通用JVM快一点。

  具有代表性的是GNU的gcj,可以做到对java代码完全提前编译,但gcj存在诸多局限性,如:对JRE 5不能完整支持、不支持JRE 6及以后的版本。

  由于java平台的复杂性,做到能及时支持最新java版本和JRE的完全提前编译是非常困难的,所以这类工具往往采取灵活方式,该用即时编译的地方还是 要用,成为提前编译和即时编译的混合体。

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

  Excelsior JET属于这类工具。

  使用jni方式保护

  特点:将敏感的方法和数据通过jni方式处理。

  此种方式和“隔离java程序到服务端”有些类似,可以看作把需要保护的代码和数据“隔离”到动态库中,不同的是可以在单机程序中运用。

  缺点和上述“隔离java程序到服务端”类似。

  不脱离JRE的综合方式保护

  特点:非提前编译,不脱离JRE,采用多种软保护方式,从多方面防止java程序被窃取。

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

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

  JXMaker属于此类工具。

  用加密锁硬件保护

  特点:使用与硬件相关的专用程序将java虚拟机启动程序加壳,将虚拟机配套文件和java程序加密,启动的是加壳程序,由加壳程序建立一个与硬件相关的 受保护的运行环境,为了加强安全性可以和加密锁内植入的程序互动。

  此种方式与以上“不脱离JRE的综合方式保护”相似,只是使用了专用硬件设备,也能很好地保护java代码。

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

  从以上描述中我们可以看出:

  各种保护方式都有其优缺点,应根据实际选用

  要更好地保护java代码应该使用综合的保护措施

  单机环境中要真正有效保护java代码,必须要有本地代码程序配合

  当然,安全都是相对的,一方面看你的保护措施和使用的工具能达到的程度,一方面看黑客的意愿和能力,不能只从技术上保护知识产权。总之,在java 代码保护方面可以采取各种可能的方式,不可拘泥于那些条条框框。

【CSDN 7月23日消息】从事Java编程的人都知道,可以通过逆向工程反编译得到Java程序的源代码,这种反编译工具之一就是JAD。因此,为保护我们的劳动成果,尽可能给反编译人员制造障碍,我们可以使用Java Obfuscator(Java混淆器)保护Java的类文件。

Java Obfuscator的原理就是将字节码转换为一个逻辑上的对等物,这种转换后的版本极难拆散。即使有人试图去反编译,过程将极其艰难复杂,并很难绕过转换后模糊晦涩的编码。主要的过程如下:

用一个常规编译器(比如JDK)编译Java源代码运行混淆器,在受保护的环境下生成编译类文件。最后生成的会是一个不同的输出文档,也许扩展名也会不同。

这个被重命名为.class file的文件在功能上与原字节码是对等的,由于虚拟机仍然可以对其进行解译,因此对性能不会产生影响。

以下是一些可用来混淆(obfuscate)Java字节码的工具:

Zelix KlassMaster

Zelix KlassMaster是一款用Java写的实用工具,能读取和修改Java类文件,可以运行在任何支持1.1.6版Java虚拟机的平台上。
下载:http://www.zdnetindia.com/downloads/info/898255.html

Cinnabar Canner

Canner通过创建一个原生Windows可执行文件(EXE文件)保护你的代码不被逆向工程反编译,这个可执行文件包含了你的应用程序类和资源的全部加密版本,只有在被JVM调用到内存中时才处于非加密状态。
网站:http://www.cinnabarsystems.com/canner.html
下载:http://www.cinnabarsystems.com/download.html

Jmangle Java类粉碎机

Jmangle是用来阻止反编译Java程序,降低盗版的软件,开发者可用其粉碎类文件中的符号。
网站:http://www.elegant-software.com/software/jmangle/
下载:http://www.elegant-software.com/software/jmangle/download.html

RetroGuard

JavaGuard是一款通用的字节码混淆器,用来无缝融入你的日常构建和测试过程中,使得你辛苦编写宝贵的Java代码更加安全。
网站:http://java-source.net/open-source/obfuscators/javaguard

JODE

JODE是一款含Java解码器和优化器的java包。
网站:http://java-source.net/open-source/obfuscators/jode

最后要说的是,你也可使用其他几款类似的实用工具,这些工具运用许多不同的方法达到了相同的目标。他们也有共同之处,就是允许通过不同的过程转换生成.exe文件,将.class和.jar文件模糊化。Google Directory上有一张它们的综合列表:
http://directory.google.com/Top/Computers/Programming/Languages/Java/Development_Tools/Obfuscators/(译/Wilson)

常见的5种方式看保护java代码(java混淆器)相关推荐

  1. 遍历集合常见的两种方式

    package sun;import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.u ...

  2. 揭秘:企业做知识管理常见的几种方式!

    企业做知识管理的方式有很多种,下面将介绍比较常见的几种方式,并分享如何做好知识管理. 一.企业做知识管理的方式 创建知识库 创建知识库是最基本的知识管理方式,它可以帮助企业把知识信息整理归类,以便更好 ...

  3. Eclipse设置jsp的编码格式最简单常见的两种方式

    Eclipse设置jsp的编码格式最简单常见的两种方式 为什么要改变编码方式,原因不外是为了程序运行时的方便,不会出现乱码,最初的jsp的编码并不是utf-8,而是其他iso-8859-1等等,但这样 ...

  4. 两种方式设置SVN提交代码时必须填写日志

    两种方式设置SVN提交代码时必须填写日志 咱们在使用SVN的时候,团队中难免有同事提交代码时忘记填写日志而直接提交,这样会导致后期维护极不方便,这并不是我们想看到的.于是下面给出两种方式来解决这个问题 ...

  5. Java代码加密混淆工具有哪些?

    在Java中,代码加密混淆工具可以帮助开发者将源代码进行加密和混淆处理,以增加代码的安全性和保护知识产权.以下是一些流行的Java代码加密混淆工具: 第一款:ProGuard:ProGuard Pro ...

  6. 【项目实战】Java代码反编译工具的使用 以及 如何对Java代码进行混淆?

    一.背景 现在交付给客户的代码,虽然不是以源码的形式交付,但是还经常会需要进行反编译,如何更好的做到反编译呢?本文探讨的是如何进行反编译的方法. 二. Java代码反编译工具的使用 (1)使用jad ...

  7. VBA 工程代码加密混淆器,保护你的宏作品

    个人制作的 VBA 代码加密混淆器,帮你加密你的宏代码,让它不再那么易读.因 VBA 的方便一直以来都喜欢用它写一些小工具,了解多了也就知道这种代码编写的工具完全没有安全性可言,工程密码形同虚设,很容 ...

  8. spring 配置的三种方式:XML配置,JAVA配置和注解配置

    spring自从3.0开始以后,就全面推荐使用配置的方式进行代码编写了,这种方式确实可以避免了之前一个项目里面一大堆XML的情况,毕竟XML的可读性实在不怎么样,而且一会写JAVA,一会写XML,确实 ...

  9. 短视频时代是靠什么赚钱的,介绍常见的5种方式,简单明了

    目前,短视频越来越火热,大家都知道做短视频可以赚钱,那么究竟是靠什么赚钱的,又有几个人知道呢?短视频创业有个人.有团队,怎么实现团队的生存和发展. 常见的几种变现方式有: 1.平台分成 各个短视频平台 ...

最新文章

  1. C#二进制格式与文件相互转换
  2. 分布式发布订阅消息系统Kafka单实例测试
  3. docker环境配置
  4. php url 调度
  5. 登陆界面(jsp)客户端验证
  6. flask 对excel上传下载操作和文件处理
  7. VS2015快捷键使用与常见问题
  8. ios java aes_PHP7 AES加密解密函数_兼容ios/andriod/java对等加解密
  9. BCG全球资产管理报告:行业增长的驱动力
  10. saas mysql数据库设计_SaaS模式实现架构实例分析=数据库层的设计
  11. 解决webView不支持网页input type=“file“上传功能。接个文章搜索,自己写的代码,确保可以使用。
  12. mysql虚拟列表_动态网页制作-官方版合集下载-多特
  13. python3 接入IOS推送apn
  14. wps ppt 自动播放怎么怎么办
  15. 打印英文字母阵列c语言,UG软件做英文字母的阵列自动递增,这个方法太好用了!...
  16. 鸿蒙系统兼容微软,效仿华为鸿蒙系统!微软放大招:新版Win10系统兼容安卓应用...
  17. TCP/IP协议及常见状态码说明(SYN,FIN,ACK,PSH,RST)
  18. 盛世昊通上市美国纳斯达克,汽车后市场再变亿万级存量市场
  19. 小曹谈技术之中文拼音输入法
  20. 江西现代职业技术学院单招计算机网络技术,江西现代职业技术学院2020年单招录取分数线...

热门文章

  1. k折交叉验证python代码_K折交叉验证法原理及python实现
  2. Bootstrap 弹出框
  3. 怎么把联通ADSL上网的家庭网关当做无线路由器使用?
  4. php taint扩展,PHP Taint – 一个用来检测XSS/SQL/Shell注入漏洞的扩展
  5. 天地图一,加载天地图。
  6. 前端工程师必须掌握—《Webpack教程》
  7. 第2部分 字符串算法(提高篇)--第1章 哈希和哈希表1463:门票
  8. 曾经我们的想象力如此丰富
  9. 昆明,成都,重庆(2007-06-12 13:26:39)
  10. 商业模式得到肯定 投资ofo朱啸虎信心满满