[发明专利]一种防止Java程序被反编译的方法有效
申请号: | 201010620153.8 | 申请日: | 2010-12-31 |
公开(公告)号: | CN102043932A | 公开(公告)日: | 2011-05-04 |
发明(设计)人: | 张旻;胡林平;田丹;贾璐 | 申请(专利权)人: | 中国航空工业集团公司第六三一研究所 |
主分类号: | G06F21/24 | 分类号: | G06F21/24 |
代理公司: | 西安智邦专利商标代理有限公司 61211 | 代理人: | 王少文 |
地址: | 710068 *** | 国省代码: | 陕西;61 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 防止 java 程序 反编译 方法 | ||
技术领域
本发明是用于阻止对Java字节码文件进行反编译以获取Java程序源代码,即用于Java程序的保护。
背景技术
Java是一种跨平台的、解释型语言。Java编译工具将Java源代码被编译成为Java字节码文件,由Java虚拟机负责对Java字节码文件进行解释执行。与本地目标代码不同,Java字节码文件中仍然保留了方法名称、变量名称,并且通过这些名称来访问变量和方法,这些符号往往带有许多语义信息。因此,对Java字节码文件进行反编译就显得比较容易。有许多Java的反编译工具都能够从Java字节码文件生成高质量的源代码。为阻止对Java字节码文件进行反编译,目前主要采用的有以下几种方法:
(1)隔离Java程序:是指将关键的Java字节码文件放在服务器端,客户端通过访问服务器的相关接口来获得服务,而不是直接访问Java字节码文件。这样黑客就无法反编译Java字节码文件。但是对于单机运行的程序是无法采用这种方法进行隔离的。
(2)字节码混淆:主要是通过将定义的类、变量、方法和包的名字改为无意义的字符串、使用非法的字符代替变量符号和在软件中添加一些无关的指令或永远执行不到的指令等手段来增加反编译和对反编译后源代码阅读的难度。但这种方法并不能真正阻止反编译,而且混淆都有一定的规律可循,如果掌握这些规律,在反编译时仍然可以得到一定质量的源代码。
(3)转换本地代码:即将Java程序像C/C++程序一样编译成本机可执行的二进制代码。但是这样做使得Java程序失去其跨平台的特性,而且这种技术目前并不十分成熟,因此不适用于大型应用程序。
(4)自定义类加载器:是指首先将Java字节码文件进行加密处理,然后自已编写一个Java类装载器在Java字节码文件装载时再进行解密处理。这种方法的缺点在于虽然经过加密的Java字节码文件无法被反编译,但自定义的类加载器本身却不能防止被反编译。因此,加密过的Java字节码文件仍然是不安全的。
发明内容
为了解决现有的技术中阻止对Java字节码文件进行反编译的方法应用范围局限、不能从根本上杜绝Java字节码文件被反编译的技术问题,本发明提供一种防止Java程序被反编译的方法。
本发明的技术解决方案:
一种防止Java程序被反编译的方法,其特殊之处在于:包括以下步骤:
1】采用加密算法对要发布的Java字节码文件进行加密;
2】采用Java虚拟机工具接口监听Java虚拟机初始化事件;
3】采用Java虚拟机工具接口为步骤2】中Java虚拟机监听到的Java虚拟机初始化事件指定Hook函数;
4】Java虚拟机初始化完成时自动调用相应的Hook函数,并在的Hook函数中使用Java本地接口将Java虚拟机在生成类对象时调用的函数注册为自定义的代理函数;
5】Java虚拟机在生成某个类对象时调用相应的自定义的代理函数,在自定义的代理函数中对在步骤1】中加密过的Java字节码文件进行解密处理;
6】将解密后的Java字节码文件生成相应的类对象后返回给Java虚拟机。
上述步骤4】中所述Java虚拟机在生成类对象时调用的函数是函数java.lang.ClassLoader.defineclass1。
本发明所具有的优点:
1、保持了Java程序的跨平台特性:Java虚拟机工具接口和Java本地接口是Java虚拟机提供的机制,在所有支持Java虚拟机的平台上都可以应用本方法。
2、保持了Java虚拟机的通用性:不需要修改源代码重新生成Java虚拟机。
3、解密过程对用户透明:解密过程被嵌入到了Java虚拟机的类装载过程中,不保存解密后的Java字节码文件。
4、保证了解密过程的安全性:使用Java虚拟机工具接口和Java本地接口编写的程序(包括解密程序)全部编译为本机可执行的二进制代码。
附图说明
图1为本发明中与java虚拟机工具接口进行交互的时序图;
图2为Java虚拟机的初始化过程:
其中图a为现有的Java虚拟机的初始化过程;图b为使用本发明方法时Java虚拟机的初始化过程;
图3为Java虚拟机加载Java字节码的过程:
其中图a为不使用本发明方法时Java虚拟机加载Java字节码的过程;图b为使用本发明方法后Java虚拟机加载Java字节码的过程;
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国航空工业集团公司第六三一研究所,未经中国航空工业集团公司第六三一研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201010620153.8/2.html,转载请声明来源钻瓜专利网。
- 上一篇:一种利用震动来按摩眼部的眼罩按摩仪
- 下一篇:一种基于互联网的交互式情趣装置