CN102346834A - Java应用软件加密保护的方法 - Google Patents
Java应用软件加密保护的方法 Download PDFInfo
- Publication number
- CN102346834A CN102346834A CN2011103834181A CN201110383418A CN102346834A CN 102346834 A CN102346834 A CN 102346834A CN 2011103834181 A CN2011103834181 A CN 2011103834181A CN 201110383418 A CN201110383418 A CN 201110383418A CN 102346834 A CN102346834 A CN 102346834A
- Authority
- CN
- China
- Prior art keywords
- java
- application software
- machine
- class loader
- java application
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Landscapes
- Storage Device Security (AREA)
Abstract
本发明公开了一种通过代理类加载器封装实现的较为严密可靠的Java应用软件加密保护方法,准确地说,是利用修改Java虚拟机启动时所执行的特殊代理类通过JavaNativeInterface或JavaNativeAccess方式加载自定义的二进制加密解密原生代码库,实现对目标Java应用软件字节码进行任意自定义规则的加密及解密操作。本发明解决了长久以来采用Java编写的应用软件由于字节码能够被反编译还原为源程序代码而无法保护防止破解盗版的问题,解决了Java混淆器只能对代码进行混淆,降低反编译生成的源代码可读性但无法彻底防止反编译的问题。该方法可广泛适用于任何基于JavaSE/JavaEE标准开发的应用软件保护,支持Windows/Linux/Unix操作系统环境,可极大地提高Java应用软件的版权保护能力。
Description
技术领域
本发明涉及Java应用软件加密保护的方法。
背景技术
目前大量的企业级应用软件及互联网应用软件都是通过Java编写的。由于Java通过虚拟机方式运行,所有采用Java编写的应用软件源程序代码经过Java编译器编译后,并不生成二进制原生本机机器代码,而是生成Java字节码。Java字节码独立于计算机硬件及操作系统,在运行时由Java虚拟机负责解释并即时生成本机机器代码而执行。Java字节码非常容易被各类反编译工具分析并反编译还原为Java源程序代码,这就导致了各类Java应用软件在版权保护、防止盗版破解等方面的能力变得异常薄弱。虽然随后出现了Java混淆器可以将Java字节码进行扰乱混淆,以便使反编译工具在反编译还原操作后生成的Java源程序代码晦涩难懂,增加了阅读理解难度,但仍然无法从本质上阻止反编译工具对Java字节码的反向工程。因此,如何彻底解决Java应用软件的加密保护,继而防止对其进行反向工程就成为一个亟待解决的问题。由于Java字节码始终是由Java虚拟机来解释的,因此任何对Java字节码的加密保护都需要提供一个字节码执行入口,该入口却不能被加密,否则Java虚拟机仍然无法解释执行。但该入口的存在又会导致理论上被反编译器跟踪进而完全被反向工程的可能性,因此,必须寻找到一个在Java虚拟机启动时提前加载并执行字节码的方式,并能够彻底接管虚拟机后续字节码类加载操作,并将字节码加解密以C/C++实现,并通过Java Native Interface或Java Native Access方式由虚拟机调用,对后续即将载入的真正的应用程序被加密过的字节码进行解密还原,以供虚拟机解释执行,从而达到软件加密保护的目的。
发明内容
本发明所要解决的技术问题是提供一种Java应用软件加密保护的方法,克服现有Java应用软件难以加密保护的缺陷。
为解决上述技术问题,本发明提供一种Java应用软件加密保护的方法,其特征在于,包括以下步骤:
步骤1、利用Java开发实现加密工具程序,对应用程序的正常类文件或JAR软件包进行加密处理及重新打包;并将加密过程中产生的公私钥作为软件许可证颁发给授权用户;
步骤2、编写一个代理类加载器;
步骤3、开发本机机器代码解密函数库;
步骤4、所述代理类加载器在JVM启动提前加载,并接管虚拟机后续所有类加载操作;
步骤5、所述代理类加载器通过Java Native Interface或Java Native Access方式调用所述本机机器代码解密函数库,对虚拟机试图加载的每一个Java类进行分析识别,如果是应用程序已加密过的字节码数据,则在计算机内存中解码还原为正常字节码数据并提交虚拟机运行。
所述代理类加载器通过继承并修改通用类加载器实现。所述修改通用类加载器的方式包括自定义类加载器的字节码生成方法。
所述加密工具程序采用DES算法对字节码进行加密解密。
所述本机机器代码解密函数库为C/C++开发实现的二进制本机机器代码解密函数库。
由于本发明的加密解密算法的实现代码全部由二进制原生机器代码实现,目标Java应用软件字节码则完全被事先按照自定义规则进行了编码,使得目前所有的Java字节码反编译器均无法正常工作,无法反编译出Java源代码,从而起到了保护了Java应用软件不被反向工程破解的目的,具有目前所有Java混淆器都无法比拟的优点。这种方法解决了长久以来采用Java编写的应用软件由于字节码能够被反编译还原为源程序代码而无法保护防止破解盗版的问题,解决了Java混淆器只能对代码进行混淆,降低反编译生成的源代码可读性但无法彻底防止反编译的问题。该方法可广泛适用于任何基于Java SE/Java EE标准开发的应用软件保护,支持Windows/Linux/Unix操作系统环境,可极大地提高Java应用软件的版权保护能力。
附图说明
下面结合附图和具体实施方式对本发明的技术方案作进一步具体说明。
图1为本发明的加密流程图。
图2为本发明的JVM解密流程图。
具体实施方式
如图1所示,本发明的加密方法,包括步骤:读取原始的Java程序类文件,利用DES标准算法实现可逆加密,产生公私钥,将加密后的字节码重新组装为Java软件包。将加密过程中产生的公私钥作为软件许可证颁发给授权用户。
针对上述加密方法,采用C/C++开发实现解密函数库,并编译为二进制本机机器代码解密函数库,如Windows平台的DLL文件,或Linux/Unix平台的so文件。
本发明的核心在于解密方法。在解密之前,通过继承并修改Java通用类加载器ClassLoader,自定义其字节码生成方法,生成一个代理类加载器。此后,具体在JVM上的解密过程如图2所示,包括步骤:
Java虚拟机启动时,率先加载该代理类加载器,常驻虚拟机内存,然后代理类加载器全面接管虚拟机上后续所有的类字节码数据加载。
代理类加载器进行拦截扫描后续加载的每一个类,并分析识别是否为应用软件加密类。如果判断不是应用程序加密过的字节码而是普通未加密的其他应用程序字节码,则立即交由虚拟机执行;如果判断是目标应用程序加密过的字节码,则继续检查是否具有基于公私钥的软件许可证,如果没有发现有效的基于公私钥的软件许可证,则不允许解密并直接结束;如果存在有效的软件许可证,则通过JNI/JNA调用由C/C++开发实现的解密函数库完成对加密字节码数据在内存中的解密,将解密后的正常字节码交由虚拟机执行,从而完成整个解密运行过程。
由于解密的具体操作由C/C++生成的二进制机器代码实现,采用常规反编译手段是无法得到源程序代码的,而加密过的字节码也无法反编译得到源程序代码,而修改的类加载器字节码虽然是未被加密的,但反编译后的源程序代码只能看到JNI/JNA调用,没有任何意义,所以彻底实现了对Java应用软件的保护。
最后所应说明的是,以上具体实施方式仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或者等同替换,而不脱离本发明技术方案的精神和范围,其均应涵盖在本发明的权利要求范围当中。
Claims (5)
1.一种Java应用软件加密保护的方法,其特征在于,包括以下步骤:
步骤1、利用Java开发实现加密工具程序,对应用程序的正常类文件或JAR软件包进行加密处理及重新打包;并将加密过程中产生的公私钥作为软件许可证颁发给授权用户;
步骤2、编写一个代理类加载器;
步骤3、开发本机机器代码解密函数库;
步骤4、所述代理类加载器在JVM启动提前加载,并接管虚拟机后续所有类加载操作;
步骤5、所述代理类加载器通过Java Native Interface或Java Native Access方式调用所述本机机器代码解密函数库,对虚拟机试图加载的每一个Java类进行分析识别,如果是应用程序已加密过的字节码数据,则在计算机内存中解码还原为正常字节码数据并提交虚拟机运行。
2.根据权利要求1所述的Java应用软件加密保护的方法,其特征在于,所述代理类加载器通过继承并修改通用类加载器实现。
3.根据权利要求2所述的Java应用软件加密保护的方法,其特征在于,所述修改通用类加载器的方式包括自定义类加载器的字节码生成方法。
4.根据权利要求1-3之一所述的Java应用软件加密保护的方法,其特征在于,所述加密工具程序采用DES算法对字节码进行加密解密。
5.根据权利要求4所述的Java应用软件加密保护的方法,其特征在于,所述本机机器代码解密函数库为C/C++开发实现的二进制本机机器代码解密函数库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103834181A CN102346834A (zh) | 2011-11-25 | 2011-11-25 | Java应用软件加密保护的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103834181A CN102346834A (zh) | 2011-11-25 | 2011-11-25 | Java应用软件加密保护的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102346834A true CN102346834A (zh) | 2012-02-08 |
Family
ID=45545502
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103834181A Pending CN102346834A (zh) | 2011-11-25 | 2011-11-25 | Java应用软件加密保护的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102346834A (zh) |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103971034A (zh) * | 2014-04-24 | 2014-08-06 | 福建联迪商用设备有限公司 | 一种保护Java软件的方法及装置 |
CN104077504A (zh) * | 2013-03-25 | 2014-10-01 | 联想(北京)有限公司 | 一种应用程序加密的方法及装置 |
CN104657635A (zh) * | 2013-11-20 | 2015-05-27 | 方正信息产业控股有限公司 | 一种应用处理方法、装置和服务器 |
CN104680039A (zh) * | 2013-11-28 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 一种应用程序安装包的数据保护方法及装置 |
CN104951674A (zh) * | 2014-03-28 | 2015-09-30 | 中国银联股份有限公司 | 用于应用程序的信息隐藏方法 |
CN105574368A (zh) * | 2015-12-10 | 2016-05-11 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN106557350A (zh) * | 2015-09-30 | 2017-04-05 | 北京金山安全软件有限公司 | 应用程序安装包中java字节码转换方法、装置及设备 |
CN108804913A (zh) * | 2018-04-27 | 2018-11-13 | 北京奇艺世纪科技有限公司 | 应用程序的运行方法和装置 |
CN108829396A (zh) * | 2018-06-15 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN108898008A (zh) * | 2018-04-27 | 2018-11-27 | 北京奇艺世纪科技有限公司 | 应用程序的运行方法和装置 |
CN110096851A (zh) * | 2019-05-13 | 2019-08-06 | 北京奇艺世纪科技有限公司 | 一种字节码的加密方法及系统 |
CN110532737A (zh) * | 2019-08-29 | 2019-12-03 | 深圳前海环融联易信息科技服务有限公司 | Jar包加密管理方法、装置、计算机设备及存储介质 |
CN110866226A (zh) * | 2019-11-15 | 2020-03-06 | 中博信息技术研究院有限公司 | 一种基于加密技术的java应用软件版权保护方法 |
CN111159658A (zh) * | 2019-12-16 | 2020-05-15 | 广州三七互娱科技有限公司 | 字节码处理方法、系统、装置、计算机设备和存储介质 |
CN112131536A (zh) * | 2020-05-19 | 2020-12-25 | 北京天德科技有限公司 | 一种防止Java程序被反编译的方法 |
CN112241519A (zh) * | 2020-11-05 | 2021-01-19 | 王志平 | 一种软件版权保护的实现方法 |
CN112395563A (zh) * | 2020-11-30 | 2021-02-23 | 广州市都享信息科技有限公司 | 软件产品加密的方法、装置、存储介质及处理器 |
CN113221077A (zh) * | 2021-05-31 | 2021-08-06 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN113742656A (zh) * | 2020-05-28 | 2021-12-03 | 千寻位置网络有限公司 | 软件授权认证方法及装置 |
CN114586032A (zh) * | 2019-10-30 | 2022-06-03 | 国际商业机器公司 | 安全的工作负载配置 |
CN117150563A (zh) * | 2023-10-27 | 2023-12-01 | 国建大数据科技(辽宁)有限公司 | 一种软件开发数据加密保护方法及系统 |
CN117932648A (zh) * | 2024-03-20 | 2024-04-26 | 厦门星纵数字科技有限公司 | 一种字节码保护方法、终端设备及存储介质 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814124A (zh) * | 2010-04-20 | 2010-08-25 | 浪潮电子信息产业股份有限公司 | 一种基于Java的软件安全性加强的方法 |
-
2011
- 2011-11-25 CN CN2011103834181A patent/CN102346834A/zh active Pending
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101814124A (zh) * | 2010-04-20 | 2010-08-25 | 浪潮电子信息产业股份有限公司 | 一种基于Java的软件安全性加强的方法 |
Cited By (36)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104077504A (zh) * | 2013-03-25 | 2014-10-01 | 联想(北京)有限公司 | 一种应用程序加密的方法及装置 |
CN104077504B (zh) * | 2013-03-25 | 2017-04-19 | 联想(北京)有限公司 | 一种应用程序加密的方法及装置 |
CN104657635A (zh) * | 2013-11-20 | 2015-05-27 | 方正信息产业控股有限公司 | 一种应用处理方法、装置和服务器 |
CN104680039A (zh) * | 2013-11-28 | 2015-06-03 | 腾讯科技(深圳)有限公司 | 一种应用程序安装包的数据保护方法及装置 |
CN104680039B (zh) * | 2013-11-28 | 2019-02-26 | 腾讯科技(深圳)有限公司 | 一种应用程序安装包的数据保护方法及装置 |
CN104951674B (zh) * | 2014-03-28 | 2018-01-23 | 中国银联股份有限公司 | 用于应用程序的信息隐藏方法 |
CN104951674A (zh) * | 2014-03-28 | 2015-09-30 | 中国银联股份有限公司 | 用于应用程序的信息隐藏方法 |
CN103971034A (zh) * | 2014-04-24 | 2014-08-06 | 福建联迪商用设备有限公司 | 一种保护Java软件的方法及装置 |
CN106557350A (zh) * | 2015-09-30 | 2017-04-05 | 北京金山安全软件有限公司 | 应用程序安装包中java字节码转换方法、装置及设备 |
CN106557350B (zh) * | 2015-09-30 | 2019-12-13 | 北京金山安全软件有限公司 | 应用程序安装包中java字节码转换方法、装置及设备 |
CN105574368B (zh) * | 2015-12-10 | 2018-05-04 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN105574368A (zh) * | 2015-12-10 | 2016-05-11 | 华青融天(北京)技术股份有限公司 | 一种Python程序模块的安全调用方法和装置 |
CN108898008A (zh) * | 2018-04-27 | 2018-11-27 | 北京奇艺世纪科技有限公司 | 应用程序的运行方法和装置 |
CN108804913A (zh) * | 2018-04-27 | 2018-11-13 | 北京奇艺世纪科技有限公司 | 应用程序的运行方法和装置 |
CN108804913B (zh) * | 2018-04-27 | 2021-04-06 | 北京奇艺世纪科技有限公司 | 应用程序的运行方法和装置 |
CN108829396B (zh) * | 2018-06-15 | 2022-02-01 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN108829396A (zh) * | 2018-06-15 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN110096851A (zh) * | 2019-05-13 | 2019-08-06 | 北京奇艺世纪科技有限公司 | 一种字节码的加密方法及系统 |
CN110096851B (zh) * | 2019-05-13 | 2021-02-09 | 北京奇艺世纪科技有限公司 | 一种字节码的加密方法及系统 |
CN110532737A (zh) * | 2019-08-29 | 2019-12-03 | 深圳前海环融联易信息科技服务有限公司 | Jar包加密管理方法、装置、计算机设备及存储介质 |
CN114586032B (zh) * | 2019-10-30 | 2023-03-21 | 国际商业机器公司 | 安全的工作负载配置 |
CN114586032A (zh) * | 2019-10-30 | 2022-06-03 | 国际商业机器公司 | 安全的工作负载配置 |
CN110866226A (zh) * | 2019-11-15 | 2020-03-06 | 中博信息技术研究院有限公司 | 一种基于加密技术的java应用软件版权保护方法 |
CN110866226B (zh) * | 2019-11-15 | 2022-05-24 | 中博信息技术研究院有限公司 | 一种基于加密技术的java应用软件版权保护方法 |
CN111159658A (zh) * | 2019-12-16 | 2020-05-15 | 广州三七互娱科技有限公司 | 字节码处理方法、系统、装置、计算机设备和存储介质 |
CN111159658B (zh) * | 2019-12-16 | 2022-04-01 | 广州三七互娱科技有限公司 | 字节码处理方法、系统、装置、计算机设备和存储介质 |
CN112131536A (zh) * | 2020-05-19 | 2020-12-25 | 北京天德科技有限公司 | 一种防止Java程序被反编译的方法 |
CN113742656A (zh) * | 2020-05-28 | 2021-12-03 | 千寻位置网络有限公司 | 软件授权认证方法及装置 |
CN112241519A (zh) * | 2020-11-05 | 2021-01-19 | 王志平 | 一种软件版权保护的实现方法 |
CN112395563A (zh) * | 2020-11-30 | 2021-02-23 | 广州市都享信息科技有限公司 | 软件产品加密的方法、装置、存储介质及处理器 |
CN113221077A (zh) * | 2021-05-31 | 2021-08-06 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN113221077B (zh) * | 2021-05-31 | 2023-11-14 | 平安科技(深圳)有限公司 | 基于spring容器的class文件加密方法及设备 |
CN117150563A (zh) * | 2023-10-27 | 2023-12-01 | 国建大数据科技(辽宁)有限公司 | 一种软件开发数据加密保护方法及系统 |
CN117150563B (zh) * | 2023-10-27 | 2024-02-20 | 国建大数据科技(辽宁)有限公司 | 一种软件开发数据加密保护方法及系统 |
CN117932648A (zh) * | 2024-03-20 | 2024-04-26 | 厦门星纵数字科技有限公司 | 一种字节码保护方法、终端设备及存储介质 |
CN117932648B (zh) * | 2024-03-20 | 2024-06-04 | 厦门星纵数字科技有限公司 | 一种字节码保护方法、终端设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102346834A (zh) | Java应用软件加密保护的方法 | |
JP5689472B2 (ja) | 悪意ある実行環境内での静的および動的攻撃からJavaバイトコードを保護するシステムおよび方法 | |
CN102043932B (zh) | 一种防止Java程序被反编译的方法 | |
KR101391982B1 (ko) | 안드로이드 어플리케이션의 디컴파일 방지를 위한 암호화 방법 | |
RU2439669C2 (ru) | Способ предотвращения обратного инжиниринга программного обеспечения, неавторизованной модификации и перехвата данных во время выполнения | |
JP5785762B2 (ja) | 自己修正計算機コードのチェックサム検証のための方法、装置およびコンピュータ・プログラム担体 | |
US20160203087A1 (en) | Method for providing security for common intermediate language-based program | |
US8402448B2 (en) | Compiler system and a method of compiling a source code into an encrypted machine language code | |
CN106650341A (zh) | 基于smali流程混淆技术的Android应用加固方法 | |
CN101872404B (zh) | 一种保护Java软件程序的方法 | |
CN102576391A (zh) | 嵌入在shell代码中的软件许可 | |
WO2013170724A1 (zh) | 安卓系统中java应用程序的保护方法 | |
CN104268444A (zh) | 一种云OS Java源代码保护方法 | |
CN106415491B (zh) | 一种应用保护方法、服务器以及终端 | |
Kim et al. | Design and performance evaluation of binary code packing for protecting embedded software against reverse engineering | |
CN104680039A (zh) | 一种应用程序安装包的数据保护方法及装置 | |
CN101957903A (zh) | 一种保护类文件的方法和装置 | |
CN103971034A (zh) | 一种保护Java软件的方法及装置 | |
Götzfried et al. | Soteria: Offline software protection within low-cost embedded devices | |
CN105229652A (zh) | 检测针对软件应用的利用 | |
KR20200136142A (ko) | 소프트웨어 보안을 위한 메모리 데이터의 암호화 및 복호화 방법, 이를 수행하기 위한 기록매체 및 장치 | |
CN112613037A (zh) | 一种代码校验方法及装置 | |
JP5575950B2 (ja) | 無線端末装置およびシステム保護方法 | |
CN104657635A (zh) | 一种应用处理方法、装置和服务器 | |
CN112733094A (zh) | 一种Java应用程序的安全保护方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120208 |