CN107480478B - 一种java应用程序的加密方法及运行方法 - Google Patents

一种java应用程序的加密方法及运行方法 Download PDF

Info

Publication number
CN107480478B
CN107480478B CN201710696153.8A CN201710696153A CN107480478B CN 107480478 B CN107480478 B CN 107480478B CN 201710696153 A CN201710696153 A CN 201710696153A CN 107480478 B CN107480478 B CN 107480478B
Authority
CN
China
Prior art keywords
class
key
application program
java
basic device
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.)
Active
Application number
CN201710696153.8A
Other languages
English (en)
Other versions
CN107480478A (zh
Inventor
钟尚亮
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Individual
Original Assignee
Individual
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Individual filed Critical Individual
Priority to CN201710696153.8A priority Critical patent/CN107480478B/zh
Publication of CN107480478A publication Critical patent/CN107480478A/zh
Application granted granted Critical
Publication of CN107480478B publication Critical patent/CN107480478B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/12Protecting executable software
    • G06F21/14Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/105Arrangements for software license management or administration, e.g. for managing licenses at corporate level

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Multimedia (AREA)
  • Technology Law (AREA)
  • Computer Hardware Design (AREA)
  • Computer Security & Cryptography (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Storage Device Security (AREA)

Abstract

本发明公开了一种JAVA应用程序的加密方法及运行方法。首先检查JAVA虚拟机可执行文件和类加载基础器的完整性,再通过随机字符串的校验,确保执行文件检查器和类加载基础器之间的通讯安全,然后把第一密钥写入到类加载基础器的计算机程序输入流中,最后类加载基础器从计算机程序输入流获取第一密钥后,结合随机生成并供用户持有的第二密钥,加密JAVA应用程序的解码文件,并输出加密后的解码文件和第二密钥。运行时,同样先检查各模块的完整性,再确保通讯安全,最后使用获取第一密钥和用户输入的第二密钥对JAVA应用程序进行加载和解密。采用本发明实施例,即保障了JAVA应用程序的安全性,又确保了JAVA应用程序的高可移植性和兼容性。

Description

一种JAVA应用程序的加密方法及运行方法
技术领域
本发明涉及计算机技术领域,尤其涉及一种JAVA应用程序的加密方法及运行方法。
背景技术
JAVA应用程序由于其高可移植性,被广泛应用在我们生活中的智能移动终端、PC端、网页站点等,而为了达到这种高可移植性,JAVA应用程序牺牲了自身编译的彻底性,由此而带来的安全隐患是JAVA应用程序容易被进行反向编译,造成用户数据、程序数据和程序源码泄露。而现有的解决方案主要包括:代码混淆、本地化技术(Java nativeInterface,简称JNI)和代码加壳,但是这几种技术都不是最优解决方案。
首先,代码混淆作为一种降低源码可读性的措施,保持着软件功能的同时改变JAVA代码的外观和结构。常见的JAVA代码混淆器有Java Obfuscator、Zelix KlassMaster、Cinnabar Canner、Jmangle Java类粉碎机、JavaGuard、JODE等等。但是,代码混淆不能确保JAVA程序的保密性,反向编译后仍然可以获得有一定代码质量的代码。其次,本地化技术是把JAVA代码的核心部分改编为由C/C++编写的功能模块,再使用JNI技术通过JAVA代码去调用该功能模块。最后,代码加壳是把JAVA代码直接通过编译、加密、压缩封装为本地的执行文件。后两种技术牺牲了JAVA程序本身的高可移植性和拓展性。
因此,现有技术并没有即能防止JAVA应用程序的反向编译,又能确保JAVA应用程序的高可移植性和兼容性的解决方案。
发明内容
本发明实施例提出一种JAVA应用程序的加密方法及运行方法,即保障了JAVA应用程序的安全性,又确保了JAVA应用程序的高可移植性和兼容性。
本发明实施例提供一种JAVA应用程序的加密方法,包括:
执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果;
所述执行文件检查器调用所述JAVA虚拟机,并向所述JAVA虚拟机传入第一参数,以使所述JAVA虚拟机启动所述类加载基础器;其中,所述第一参数包括:由所述执行文件检查器生成的随机字符串、加密指令和需加密JAVA应用程序的名称;
所述执行文件检查器通过TCP协议的端口,接收并校验由所述类加载基础器发送的所述随机字符串;
如果所述随机字符串通过校验,则所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流;其中,所述计算机程序输入流由所述类加载基础器根据所述JAVA虚拟机的输入流而生成;
若是,则所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于加密所述JAVA应用程序的第一密钥;
所述类加载基础器从所述计算机程序输入流获取所述第一密钥后,根据所述需加密JAVA应用程序的名称,读取所述需加密JAVA应用程序的字节码文件,并根据所述加密指令、所述第一密钥和第二密钥,加密所述字节码文件;其中,所述第二密钥是由所述类加载基础器生成的随机密钥;
所述类加载基础器输出加密后的字节码文件和所述第二密钥。
进一步的,所述执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果,具体为:
所述执行文件检查器分别计算所述JAVA虚拟机的可执行文件和类加载基础器的实时MD5值,并将所述实时MD5值与预设的MD5值进行比对,获得所述完整性检查结果,在完成一次比对后更新所述循环检查次数。
进一步的,在所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于加密所述JAVA应用程序的第一密钥之后,所述执行文件检查器结束所述JAVA虚拟机可执行文件和所述类加载基础器的完整性循环检查。
进一步的,所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流,具体为:
当所述检查次数均超过一次,且所述完整性检查结果为所述JAVA虚拟机可执行文件和类加载基础器均没有被篡改时,所述执行文件检查器确定获取所述类加载基础器的计算机程序输入流;
否则,不获取所述类加载基础器的计算机程序输入流。
进一步的,所述根据所述加密指令、所述第一密钥和第二密钥,加密所述字节码文件,具体为:
使用预设的加密算法、所述第一密钥和所述第二密钥,加密所述字节码文件;
所述预设的加密算法包括:对称加密算法、非对称加密算法、或者由对称加密算法和非对称加密算法的混合使用得到的加密算法。
相应地,本发明实施例还提供一种JAVA应用程序的运行方法,包括:
执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果;
所述执行文件检查器调用所述JAVA虚拟机,并向所述JAVA虚拟机传入第二参数,以使所述JAVA虚拟机启动所述类加载基础器;其中,所述第二参数包括:由所述执行文件检查器生成的随机字符串、解密指令、需解密JAVA应用程序的名称、运行所述JAVA应用程序的运行参数;
所述执行文件检查器通过TCP协议的端口,接收并校验由所述类加载基础器发送的所述随机字符串;
如果所述随机字符串通过校验,则所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流;其中,所述计算机程序输入流由所述类加载基础器根据所述JAVA虚拟机的输入流而生成;
若是,则所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于解密所述JAVA应用程序的第一密钥;
所述类加载基础器从所述计算机程序输入流获取所述第一密钥后,根据所述需解密JAVA应用程序的名称,加载所述需解密JAVA应用程序的字节码文件,并根据所述解密指令、所述第一密钥和第二密钥,解密所述字节码文件;其中,所述第二密钥是由用户输入;
所述类加载基础器根据所述JAVA应用程序的运行参数,运行解密后的所述JAVA应用程序。
进一步的,所述执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果,具体为:
所述执行文件检查器分别计算所述JAVA虚拟机的可执行文件和类加载基础器的实时MD5值,并将所述实时MD5值与预设的MD5值进行比对,获得所述完整性检查结果,在完成一次比对后更新所述循环检查次数。
进一步的,在所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于加密所述JAVA应用程序的第一密钥之后,所述执行文件检查器结束所述JAVA虚拟机可执行文件和所述类加载基础器的完整性循环检查。
进一步的,所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流,具体为:
当所述检查次数均超过一次,且所述完整性检查结果为所述JAVA虚拟机可执行文件和类加载基础器均没有被篡改时,所述执行文件检查器确定获取所述类加载基础器的计算机程序输入流;
否则,不获取所述类加载基础器的计算机程序输入流。
进一步的,根据所述解密指令、所述第一密钥和第二密钥,解密所述字节码文件;其中,所述第二密钥是由用户输入,具体为:
使用预设的加密算法、所述第一密钥和所述第二密钥,解密所述字节码文件;
所述预设的加密算法包括:对称加密算法、非对称加密算法、或者由对称加密算法和非对称加密算法的混合使用得到的加密算法。
实施本发明实施例,具有如下有益效果:
本发明实施例提供的JAVA应用程序的加密方法及运行方法,首先检查JAVA虚拟机可执行文件和类加载基础器的完整性,再通过随机字符串的校验,确保执行文件检查器和类加载基础器之间的通讯安全,然后把第一密钥写入到类加载基础器的计算机程序输入流中,最后类加载基础器从计算机程序输入流获取第一密钥后,结合随机生成并供用户持有的第二密钥,加密JAVA应用程序的解码文件,并输出加密后的解码文件和第二密钥。运行时,同样先检查各模块的完整性,再确保执行文件检查器与类加载基础器之间的通讯安全,最后使用获取第一密钥和用户输入的第二密钥对JAVA应用程序进行加载和解密。相比于现有技术的代码混淆、本地化技术和代码加壳技术,本发明技术方案即保障了JAVA应用程序的安全性,又确保了JAVA应用程序的高可移植性和兼容性。
附图说明
图1是本发明提供的JAVA应用程序的加密方法的一种实施例的流程示意图;
图2是本发明提供的JAVA应用程序的运行方法的一种实施例的流程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
参见图1,是本发明提供的JAVA应用程序的加密方法的一种实施例的流程示意图,该方法包括步骤101至步骤108。
步骤101:执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果。
在本实施例中,本发明的技术方案由两个模块组成,分别是执行文件检查器和类加载基础器。其中,执行文件检查器是计算机操作系统的可执行文件,类加载基础器是JAVA应用程序的字节码文件。
在本实施例中,步骤101具体为:执行文件检查器分别计算所述JAVA虚拟机的可执行文件和类加载基础器的实时MD5值,并将所述实时MD5值与预设的MD5值进行比对,获得所述完整性检查结果,在完成一次比对后更新所述循环检查次数。本发明技术方案事先对JAVA虚拟机(因版本而异)、类加载基础器等两个文件进行MD5算法摘要,得到正确的两个MD5值,并把这两个值内置到执行文件检查器中。当执行文件检查器运行时,就会分两个线程不断的计算两个文件的实时MD5值,并拿实时MD5值与预设MD5值进行比对,以此来获得完整性检查结果。该完整性检查结果包括:文件没有被篡改和文件被篡改。在完成一次检查比对后,执行文件检查器更新循环检查次数。
在本实施例中,在执行文件检查器获取计算机程序输入流,并向计算机程序输入流写入用于加密所述JAVA应用程序的第一密钥之后,执行文件检查器结束JAVA虚拟机可执行文件和类加载基础器的完整性循环检查。即本发明的循环检查从执行文件检查器运行开始,到执行文件检查器获取计算机程序输入流,并向计算机程序输入流写入第一密钥为止。本发明采用循环检查的目的是:由于循环检查的时间为从执行文件检查器运行开始,执行文件检查器获取类加载基础器的计算机程序输入流,到执行文件检查器向类加载基础器的计算机程序输入流写入第一密钥的过程为止,执行文件检查器能实时获知JAVA虚拟机的可执行文件和类加载基础器的完整性情况,当循环检查的结果显示JAVA虚拟机的可执行文件或者类加载基础器遭到篡改时,执行文件检查器不会向类加载基础器的计算机程序输入流写入第一密钥,这样就可以保证第一密钥不被泄漏,以实现保护第一密钥的效果。步骤102:执行文件检查器调用JAVA虚拟机,并向JAVA虚拟机传入第一参数,以使JAVA虚拟机启动类加载基础器;其中,第一参数包括:由执行文件检查器生成的随机字符串、加密指令和需加密JAVA应用程序的名称。
在本实施例中,执行文件检查器创建子线程来调用JAVA虚拟机,让JAVA虚拟机成为执行文件检查器的子进程(执行文件检查器可以获取JAVA虚拟机的计算机程序输出流和计算机程序输入流),同时向JAVA虚拟机传入第一参数,让JAVA虚拟机启动类加载基础器。第一参数包括:由执行文件检查器生成的随机字符串、加密指令和需加密JAVA应用程序的名称。该随机字符串由执行文件检器生成,并用于本次加密的校验。JAVA虚拟机启动类加载基础器时,将第一参数也传递给类加载基础器。
步骤103:执行文件检查器通过TCP协议的端口,接收并校验由类加载基础器发送的随机字符串。
在本实施例中,执行文件检查器通过监听TCP协议的端口(例如:6300端口),接收该随机字符串,从而确认类加载基础器是否被启动,是否为合法的类加载基础器。执行文件检查器在接收到随机字符串后,将其与本地生成的随机字符串进行比对,如果一致,则校验通过,否则,校验不通过。
步骤104:如果随机字符串通过校验,则执行文件检查器根据循环检查次数和所述完整性检查结果,判断是否获取类加载基础器的计算机程序输入流;其中,计算机程序输入流由类加载基础器根据JAVA虚拟机的输入流而生成。如果是,则执行步骤105,否则,执行步骤108。
在本实施例中,执行文件检查器根据循环检查次数和完整性检查结果,判断是否获取类加载基础器的计算机程序输入流,具体为:当检查次数均超过一次,且完整性检查结果为JAVA虚拟机可执行文件和类加载基础器均没有被篡改时,执行文件检查器确定获取类加载基础器的计算机程序输入流,执行步骤105;否则,不获取类加载基础器的计算机程序输入流,执行步骤108。计算机程序输入流的定义为从计算机内存流向计算机程序的数据,计算机程序输出流的定义为从计算机程序流向计算机内存的数据。
在本实施例中,类加载基础器继承了ClassLoader类,并重写了findClass方法,根据JAVA虚拟机生成相应的计算机程序输入流。
步骤105:执行文件检查器获取计算机程序输入流,并向计算机程序输入流写入用于加密JAVA应用程序的第一密钥。
在本实施例中,第一密钥可以有用户自行设定,并预先存储在执行文件检查器中,可根据用户需求制定不同的第一密钥。
步骤106:类加载基础器从计算机程序输入流获取第一密钥后,根据需加密JAVA应用程序的名称,读取需加密JAVA应用程序的字节码文件,并根据加密指令、第一密钥和第二密钥,加密字节码文件;其中,第二密钥是由类加载基础器生成的随机密钥。
在本实施例中,根据加密指令、第一密钥和第二密钥,加密字节码文件,具体为:使用预设的加密算法、第一密钥和第二密钥,加密该字节码文件。预设的加密算法包括:对称加密算法、非对称加密算法、或者由对称加密算法和非对称加密算法的混合使用得到的加密算法。对称算法包括:DES、3DES、AES、IDEA和PBE系列等,非对称加密算法包括RSA、ElGamal等。用户可根据需求制定不同的加密算法。
步骤107:类加载基础器输出加密后的字节码文件和第二密钥。
在本实施例中,输出加密后的JAVA应用程序的字节码文件和第二密钥到计算机磁盘中,并把加密后的JAVA应用程序的字节码文件存储到一个用户自定义名称的文件夹中,类加载基础器不得在这个文件夹中。
步骤108:结束加密。
在本实施例中,类加载基础器完成加密后会自行删除该第一密钥,避免第一密钥的泄露,下次加密时会重新从执行文件检查器中获取,用户也可动态修改第一密钥,以提高加密安全性。
相应地,本发明提供了一种JAVA应用程序的运行方法,参见图2,图2是本发明提供的JAVA应用程序的运行方法的一种实施例的流程示意图。该方法包括步骤201至步骤208,各步骤具体如下:
步骤201:执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果。
步骤202:执行文件检查器调用JAVA虚拟机,并向JAVA虚拟机传入第二参数,以使JAVA虚拟机启动所述类加载基础器;其中,第二参数包括:由执行文件检查器生成的随机字符串、解密指令、需解密JAVA应用程序的名称、运行JAVA应用程序的运行参数。
步骤203:执行文件检查器通过TCP协议的端口,接收并校验由类加载基础器发送的随机字符串。
步骤204:如果随机字符串通过校验,则执行文件检查器根据循环检查次数和完整性检查结果,判断是否获取类加载基础器的计算机程序输入流;其中,计算机程序输入流由类加载基础器根据JAVA虚拟机的输入流而生成;如果是,则执行步骤205,否则,执行步骤208。
步骤205:执行文件检查器获取计算机程序输入流,并向计算机程序输入流写入用于解密JAVA应用程序的第一密钥。
在本实施例中,步骤201至步骤205的具体实现方式与步骤101至步骤105基本相同,详细说明可见上文所述。
步骤206:类加载基础器从计算机程序输入流获取所述第一密钥后,根据需解密JAVA应用程序的名称,加载需解密JAVA应用程序的字节码文件,并根据解密指令、第一密钥和第二密钥,解密字节码文件;其中,第二密钥是由用户输入。
在本实施例中,需解密的JAVA应用程序存储在用户自定义名称的目录下,第二密钥由用户持有。在类加载基础器加载加密的含有main方法的JAVA程序的字节码文件时,类加载基础器先调用父类的loadClass方法去加载该字节码文件,由JAVA虚拟机的类加载双亲委派模型原理得知该字节码文件不会被类加载基础器调用父类的loadClass方法成功加载到,而由于该字节码文件只存放在用户自定义文件夹中(用户类加载基础器不得在这个文件夹中),所以父类的loadClass方法会调用类加载基础器中被重写的findClass方法去加载该字节码文件,重写的findClass方法通过识别JAVA程序的名称,从名称为已加密的用户类的文件夹(用户自定义文件夹)中读该字节码文件和供用户持有的第二密钥,然后使用第一密钥和第二密钥对加密的含有main方法的用户类字节码文件进行解密。
步骤207:类加载基础器根据JAVA应用程序的运行参数,运行解密后的所述JAVA应用程序。
在本实施例中,解密完成后,在重写的findClass方法中直接调用defineClass方法,把含有main方法的用户JAVA程序的字节码加载到JAVA虚拟机中。最后利用java语言的反射调用机制,用户类加载基础器通过调用用户JAVA程序的main方法并传入用户JAVA程序所使用的运行参数,使得用户JAVA程序正常运行起来(注意:用户JAVA程序中的类必须声明是公共的)。如果用户JAVA程序的main方法中使用到了其他的类(这里看作是目标类),若这个目标类不在存在于用户自定义的文件夹中,则这个目标类会被类加载基础器的父类的loadClass方法加载。反之,这个目标类会被类加载基础器中被重写的findClass方法加载。
在本实施例中,用户JAVA程序成功运行起来之后,执行文件检查器通过子线程,获取子进程用户JAVA程序的计算机程序输入流,接着执行文件检查器通过另一子线程,获取子进程用户JAVA程序的计算机程序输出流,最后把获取到的计算机程序输入流和计算机程序输出流均显示在执行文件检查器的界面,由此让用户与用户JAVA程序进行交互。若用户JAVA程序拥有图形界面,则该用户JAVA程序的图形界面也会正常弹出,并且与用户进行交互。
在本实施例中,解密后的JAVA应用程序不会输出到计算机磁盘中,只是动态加载到JAVA虚拟机中,进一步确保JAVA应用程序的安全性。类加载基础器是由基于JAVA编程语言的类加载双亲委派模型技术开发的模块,能自定义JAVA应用程序的字节码文件加载过程。
步骤208:结束运行。
本发明的技术方案与现有技术有着很大的不同,首先,对于代码混淆技术,经过代码混淆处理的JAVA程序,在被反编译之后依然能输出有一定代码质量的代码,拥有可读性的源码还是会暴露出来,而本发明采用直接对JAVA应用程序直接加密的办法,由于本发明可以兼容多种加密算法,所以可以杜绝JAVA程序真正字节码文件泄露的问题。其次,对于本地化技术和代码加壳技术,虽然两者都可以避免JAVA程序容易被进行反编译的问题,但是JAVA程序被其处理后,会出现低内聚、高耦合问题和平台兼容性问题,其完全破坏了JAVA程序与生俱来的高可移植性和高拓展性。而本发明的技术方案是直接对JAVA程序的字节码文件进行加密,运行加密字节码文件的过程全程在计算机内存完成,外部难以跟踪查看,从而解决了JAVA程序的字节码文件因为运行需要而暴露在硬盘中被反编译的问题。另外,对于高可移植性和高拓展性,本发明处理JAVA程序的字节码文件的流程对于JAVA虚拟机来讲是完全透明的,所以当软件维护者要维护JAVA程序是,仅仅需要考虑如何维护即可。修改完成后,再使用本发明技术方案对JAVA程序的源码进行编译加密就完成整个维护过程。如果使用本地化技术处理的话,软件维护者除了考虑如何维护外,还需要维护其他语言开发的功能模块,从而使得维护效率降低。最后,对于跨平台高兼容性,本发明适用于windows平台和linux平台,可以做到在windows平台上加密JAVA程序字节码文件,在linux平台上正常运行该加密的JAVA程序字节码文件,反之也可以,充分体现了JAVA程序经过一次编译后可以处处运行的特性。如果使用代码加壳技术处理,则软件开发者要根据不同的操作系统,用不同的技术去编译JAVA程序,会产生一系列的平台兼容性问题和维护扩展性问题。
由上可见,本发明技术方案即保障了JAVA应用程序的安全性,又确保了JAVA应用程序的高可移植性和兼容性。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围。

Claims (10)

1.一种JAVA应用程序的加密方法,其特征在于,包括:
执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果;
所述执行文件检查器调用所述JAVA虚拟机,并向所述JAVA虚拟机传入第一参数,以使所述JAVA虚拟机启动所述类加载基础器;其中,所述第一参数包括:由所述执行文件检查器生成的随机字符串、加密指令和需加密JAVA应用程序的名称;
所述执行文件检查器通过TCP协议的端口,接收并校验由所述类加载基础器发送的所述随机字符串;
如果所述随机字符串通过校验,则所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流;其中,所述计算机程序输入流由所述类加载基础器根据所述JAVA虚拟机的输入流而生成;
若是,则所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于加密所述JAVA应用程序的第一密钥;
所述类加载基础器从所述计算机程序输入流获取所述第一密钥后,根据所述需加密JAVA应用程序的名称,读取所述需加密JAVA应用程序的字节码文件,并根据所述加密指令、所述第一密钥和第二密钥,加密所述字节码文件;其中,所述第二密钥是由所述类加载基础器生成的随机密钥;
所述类加载基础器输出加密后的字节码文件和所述第二密钥。
2.根据权利要求1所述的JAVA应用程序的加密方法,其特征在于,所述执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果,具体为:
所述执行文件检查器分别计算所述JAVA虚拟机的可执行文件和类加载基础器的实时MD5值,并将所述实时MD5值与预设的MD5值进行比对,获得所述完整性检查结果,在完成一次比对后更新所述循环检查次数。
3.根据权利要求1所述的JAVA应用程序的加密方法,其特征在于,在所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于加密所述JAVA应用程序的第一密钥之后,所述执行文件检查器结束所述JAVA虚拟机可执行文件和所述类加载基础器的完整性循环检查。
4.根据权利要求1所述的JAVA应用程序的加密方法,其特征在于,所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流,具体为:
当所述检查次数均超过一次,且所述完整性检查结果为所述JAVA虚拟机可执行文件和类加载基础器均没有被篡改时,所述执行文件检查器确定获取所述类加载基础器的计算机程序输入流;
否则,不获取所述类加载基础器的计算机程序输入流。
5.根据权利要求1所述的JAVA应用程序的加密方法,其特征在于,所述根据所述加密指令、所述第一密钥和第二密钥,加密所述字节码文件,具体为:
使用预设的加密算法、所述第一密钥和所述第二密钥,加密所述字节码文件;
所述预设的加密算法包括:对称加密算法、非对称加密算法、或者由对称加密算法和非对称加密算法的混合使用得到的加密算法。
6.一种JAVA应用程序的运行方法,其特征在于,包括:
执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果;
所述执行文件检查器调用所述JAVA虚拟机,并向所述JAVA虚拟机传入第二参数,以使所述JAVA虚拟机启动所述类加载基础器;其中,所述第二参数包括:由所述执行文件检查器生成的随机字符串、解密指令、需解密JAVA应用程序的名称、运行所述JAVA应用程序的运行参数;
所述执行文件检查器通过TCP协议的端口,接收并校验由所述类加载基础器发送的所述随机字符串;
如果所述随机字符串通过校验,则所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流;其中,所述计算机程序输入流由所述类加载基础器根据所述JAVA虚拟机的输入流而生成;
若是,则所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于解密所述JAVA应用程序的第一密钥;
所述类加载基础器从所述计算机程序输入流获取所述第一密钥后,根据所述需解密JAVA应用程序的名称,加载所述需解密JAVA应用程序的字节码文件,并根据所述解密指令、所述第一密钥和第二密钥,解密所述字节码文件;其中,所述第二密钥是由用户输入;
所述类加载基础器根据所述JAVA应用程序的运行参数,运行解密后的所述JAVA应用程序。
7.根据权利要求6所述的JAVA应用程序的运行方法,其特征在于,所述执行文件检查器循环检查JAVA虚拟机可执行文件和类加载基础器的完整性,获得循环检查次数和完整性检查结果,具体为:
所述执行文件检查器分别计算所述JAVA虚拟机的可执行文件和类加载基础器的实时MD5值,并将所述实时MD5值与预设的MD5值进行比对,获得所述完整性检查结果,在完成一次比对后更新所述循环检查次数。
8.根据权利要求7所述的JAVA应用程序的运行方法,其特征在于,在所述执行文件检查器获取所述计算机程序输入流,并向所述计算机程序输入流写入用于解密所述JAVA应用程序的第一密钥之后,所述执行文件检查器结束所述JAVA虚拟机可执行文件和所述类加载基础器的完整性循环检查。
9.根据权利要求6所述的JAVA应用程序的运行方法,其特征在于,所述执行文件检查器根据所述循环检查次数和所述完整性检查结果,判断是否获取所述类加载基础器的计算机程序输入流,具体为:
当所述检查次数均超过一次,且所述完整性检查结果为所述JAVA虚拟机可执行文件和类加载基础器均没有被篡改时,所述执行文件检查器确定获取所述类加载基础器的计算机程序输入流;
否则,不获取所述类加载基础器的计算机程序输入流。
10.根据权利要求6所述的JAVA应用程序的运行方法,其特征在于,根据所述解密指令、所述第一密钥和第二密钥,解密所述字节码文件;其中,所述第二密钥是由用户输入,具体为:
使用预设的加密算法、所述第一密钥和所述第二密钥,解密所述字节码文件;
所述预设的加密算法包括:对称加密算法、非对称加密算法、或者由对称加密算法和非对称加密算法的混合使用得到的加密算法。
CN201710696153.8A 2017-08-14 2017-08-14 一种java应用程序的加密方法及运行方法 Active CN107480478B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201710696153.8A CN107480478B (zh) 2017-08-14 2017-08-14 一种java应用程序的加密方法及运行方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201710696153.8A CN107480478B (zh) 2017-08-14 2017-08-14 一种java应用程序的加密方法及运行方法

Publications (2)

Publication Number Publication Date
CN107480478A CN107480478A (zh) 2017-12-15
CN107480478B true CN107480478B (zh) 2019-08-13

Family

ID=60599550

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201710696153.8A Active CN107480478B (zh) 2017-08-14 2017-08-14 一种java应用程序的加密方法及运行方法

Country Status (1)

Country Link
CN (1) CN107480478B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109325343B (zh) * 2018-09-17 2021-08-10 北京深思数盾科技股份有限公司 Java程序执行方法及装置
CN110069905B (zh) * 2019-04-26 2021-03-23 深圳智慧园区信息技术有限公司 一种Springboot程序加密和解密的装置及方法
CN113055152B (zh) * 2019-12-26 2022-10-18 郑珂威 基于完全同态加密技术的中间代码加密方法及密文虚拟机系统
CN111143787B (zh) * 2019-12-31 2022-02-18 方正国际软件(北京)有限公司 提高Java软件破解难度的方法及装置、验证方法及验证装置
CN111552698B (zh) * 2020-04-21 2023-06-06 重庆富民银行股份有限公司 一种解决环境差异的sql版本控制系统及方法
CN113238762A (zh) * 2021-05-10 2021-08-10 深圳前海微众银行股份有限公司 java应用远程部署方法、装置及设备
CN116383781B (zh) * 2023-06-06 2023-08-04 中航信移动科技有限公司 一种软件运行参数的控制方法、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102598017A (zh) * 2009-11-13 2012-07-18 埃德图加拿大公司 保护Java字节码代码免受恶意运行环境中的静态和动态攻击的系统和方法
CN102708322A (zh) * 2012-05-12 2012-10-03 北京深思洛克软件技术股份有限公司 安卓系统中java应用程序的保护方法
CN104866739A (zh) * 2015-06-04 2015-08-26 上海斐讯数据通信技术有限公司 安卓系统中应用程序加密方法及系统
EP3057019A1 (en) * 2015-02-13 2016-08-17 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected
CN106599627A (zh) * 2016-11-22 2017-04-26 江苏通付盾科技有限公司 基于虚拟机保护应用安全的方法及装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102598017A (zh) * 2009-11-13 2012-07-18 埃德图加拿大公司 保护Java字节码代码免受恶意运行环境中的静态和动态攻击的系统和方法
CN102708322A (zh) * 2012-05-12 2012-10-03 北京深思洛克软件技术股份有限公司 安卓系统中java应用程序的保护方法
EP3057019A1 (en) * 2015-02-13 2016-08-17 Thomson Licensing Method and device for protecting an application and method and device for executing a protected application thus protected
CN104866739A (zh) * 2015-06-04 2015-08-26 上海斐讯数据通信技术有限公司 安卓系统中应用程序加密方法及系统
CN106599627A (zh) * 2016-11-22 2017-04-26 江苏通付盾科技有限公司 基于虚拟机保护应用安全的方法及装置

Also Published As

Publication number Publication date
CN107480478A (zh) 2017-12-15

Similar Documents

Publication Publication Date Title
CN107480478B (zh) 一种java应用程序的加密方法及运行方法
Arthur et al. A practical guide to TPM 2.0: Using the new trusted platform module in the new age of security
Delaune et al. Formal analysis of protocols based on TPM state registers
RU2620712C2 (ru) Устройство виртуальной машины, имеющее управляемую ключом обфускацию, и способ
CN104298932B (zh) 一种so文件的调用方法及装置
CN104268444A (zh) 一种云OS Java源代码保护方法
US7970133B2 (en) System and method for secure and flexible key schedule generation
CN109992987B (zh) 基于Nginx的脚本文件保护方法、装置及终端设备
CN101158911A (zh) .Net程序保护方法及装置
CN104408337A (zh) 一种apk文件防逆向的加固方法
CN110278115A (zh) 热更新方法及装置
CN107196907A (zh) 一种安卓so文件的保护方法及装置
CN111191195A (zh) 一种用于保护apk的方法和装置
WO2023029447A1 (zh) 模型保护方法、装置、设备、系统以及存储介质
CN104486355A (zh) 防止代码被恶意篡改的方法和装置
CN107292135A (zh) 一种程序代码保护方法和装置
Gora et al. A flexible design flow for software IP binding in FPGA
CN108134673A (zh) 一种生成白盒库文件的方法及装置
CN115580413B (zh) 一种零信任的多方数据融合计算方法和装置
CN103853943A (zh) 程序保护方法及装置
CN108416224B (zh) 一种数据加解密方法及装置
Durante et al. CVS: A compiler for the analysis of cryptographic protocols
CN107871066B (zh) 基于安卓系统的代码编译方法及装置
CN107220528A (zh) Java程序的保护与运行方法、装置和终端
KR20140139392A (ko) 모바일 장치를 위한 애플리케이션 실행 파일 생성방법, 모바일 장치의 애플리케이션 실행 방법, 애플리케이션 실행 파일 생성 장치 및 모바일 장치

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant