一种JAVA程序的运行方法及电子终端.pdf

上传人:大师****2 文档编号:1031878 上传时间:2018-03-27 格式:PDF 页数:16 大小:431.03KB
返回 下载 相关 举报
摘要
申请专利号:

CN201010270548.X

申请日:

2010.09.01

公开号:

CN101944042A

公开日:

2011.01.12

当前法律状态:

驳回

有效性:

无权

法律详情:

发明专利申请公布后的驳回IPC(主分类):G06F 9/455申请公布日:20110112|||实质审查的生效IPC(主分类):G06F 9/455申请日:20100901|||公开

IPC分类号:

G06F9/455; G06F21/00

主分类号:

G06F9/455

申请人:

深圳市拜特科技股份有限公司

发明人:

桂艳军; 王远

地址:

518000 广东省深圳市高新区中区中钢科技园大厦M-6栋4层

优先权:

专利代理机构:

广州三环专利代理有限公司 44202

代理人:

郝传鑫;潘中毅

PDF下载: PDF下载
内容摘要

本发明实施例公开了一种Java程序的运行方法,包括:启动当前Java虚拟机,加载基于Java虚拟机工具接口的动态链接库文件;根据所述动态链接库文件识别当前Java虚拟机是否含有预设的标识信息;当识别结果为是时,正常启动所述Java虚拟机运行Java程序;当识别结果为否时,退出启动程序。相应地,本发明还公开了一种电子终端,采用本发明,实现了从二进制级别上确保Java字节码的安全,让攻击者无法取得字节码,从而从根本上保护商业软件的源代码不被窃取,更加安全的保护了商业软件的核心算法和商业机密;采用本发明的技术方案不会损失任何Java的特性,可以实现跨平台Java字节码的保护,并且部署简单,成本低。

权利要求书

1: 一种 Java 程序的运行方法, 其特征在于, 包括 : 启动当前 Java 虚拟机, 加载基于 Java 虚拟机工具接口的动态链接库文件 ; 根据所述动态链接库文件识别当前 Java 虚拟机是否含有预设的标识信息 ; 当识别结果为是时, 正常启动所述 Java 虚拟机运行 Java 程序 ; 当识别结果为否时, 退 出启动程序。
2: 如权利要求 1 所述的方法, 其特征在于, 所述启动当前 Java 虚拟机的步骤之前还包 括初始化 Java 虚拟机 ; 所述初始化 Java 虚拟机的步骤包括启动预设的 Java 启动器, 设置 Java 虚拟机的标识 信息。
3: 如权利要求 1 所述的方法, 其特征在于, 所述启动当前 Java 虚拟机的步骤之前还包 括: 基于高级加密标准 AES 加密算法, 对 Java 程序的 class 文件进行加密。
4: 如权利要求 1、 2 或 3 所述的方法, 其特征在于, 所述正常启动所述 Java 虚拟机运行 Java 程序的步骤包括 : 所述 Java 虚拟机检测所述动态链接库文件是否含有预设的标识特征信息 ; 当检测结果为是时, 根据所述动态链接库文件处理 class 文件 ; 当检测结果为否时, 退 出运行程序。
5: 如权利要求 4 所述的方法, 其特征在于, 含有预设的标识特征信息的动态链接库文 件设有对所述 class 文件进行解密的解密密钥 ; 所述 Java 虚拟机根据所述动态链接库文件处理 class 文件的步骤包括 : 所述 Java 虚拟机根据所述动态链接库文件的解密密钥, 调用 AES 算法对所述 class 文 件进行解密, 并根据解密后的 class 文件执行指令。
6: 一种电子终端, 其特征在于, 包括 : Java 虚拟机启动模块, 用于启动当前 Java 虚拟机 ; 加载模块, 用于加载基于 Java 虚拟机工具接口的动态链接库文件 ; 标识识别模块, 用于根据所述动态链接库文件识别当前 Java 虚拟机是否含有预设的 标识信息 ; 识别处理模块, 用于当所述标识识别模块的识别结果为是时, 正常启动所述 Java 虚拟 机运行 Java 程序 ; 当所述标识识别模块的识别结果为否时, 退出启动程序。
7: 如权利要求 6 所述的电子终端, 其特征在于, 还包括 : 虚拟机初始化模块, 用于初始化 Java 虚拟机 ; 所述虚拟机初始化模块启动电子终端预设的 Java 启动器, 设置 Java 虚拟机的标识信 息。
8: 如权利要求 6 所述的电子终端, 其特征在于, 还包括 : 加密模块, 用于基于 AES 加密算法, 对 Java 程序的 class 文件进行加密。
9: 如权利要求 6、 7 或 8 所述的电子终端, 其特征在于, 所述识别处理模块包括 : 触发检测单元, 用于当所述标识识别模块的识别结果为是时, 触发所述 Java 虚拟机检 测所述动态链接库文件是否含有预设的标识特征信息 ; 当所述检测结果为是时, 所述 Java 虚拟机根据所述动态链接库文件处理 class 文件 ; 2 当所述检测结果为否时, 所述 Java 虚拟机退出运行程序。
10: 如权利要求 9 所述的电子终端, 其特征在于, 含有预设的标识特征信息的动态链接 库文件设有对所述 class 文件进行解密的解密密钥 ; 当所述检测结果为是时, 所述 Java 虚拟机根据所述动态链接库文件的解密密钥, 调用 AES 算法对所述 class 文件进行解密, 并根据解密后的 class 文件执行指令。

说明书


一种 Java 程序的运行方法及电子终端

    【技术领域】
     本发明涉及电子通信领域, 尤其涉及一种 Java 程序的运行方法及电子终端。背景技术 随着 Java 语言的普及和应用, 越来越多的软件使用 Java 进行实现。由于 Java 语 言的动态性和灵活性, 对其源代码的保护变得十分困难。
     现有技术中, 借助于反编译可以很容易地将源代码从其二进制类文件中提取出 来, 因此, 任何一个恶意用户都可以利用反编译工具, 如 Jad( 应用程序开发联系会议 ) 等工 具对软件进行逆向工程攻击, 可以破解商业软件中授权保护的程序段进而随意分发未经授 权的拷贝。而对于经验丰富的攻击者而言, 甚至不用反编译而直接修改二进制的字节码来 进行攻击, 获取源代码。
     如何更好地保护软件的知识产权, 保护软件的源代码不被攻击而泄露成为一个亟 需解决的问题。
     发明内容 本发明实施例所要解决的技术问题在于, 提供一种 Java 程序的运行方法及电子 终端。从二进制级别上确保 Java 字节码的安全, 实现了更好地保护软件核心算法和商业机 密不被窃取。
     为了解决上述技术问题, 本发明实施例提供了一种 Java 程序的运行方法, 包括 :
     启动当前 Java 虚拟机 (JavaVM, Java Virtual Machine), 加载基于 Java 虚拟机 工具接口的动态链接库文件 ;
     根据所述动态链接库文件识别当前 Java 虚拟机是否含有预设的标识信息 ;
     当识别结果为是时, 正常启动所述 Java 虚拟机运行 Java 程序 ; 当识别结果为否 时, 退出启动程序。
     其中, 所述启动当前 Java 虚拟机的步骤之前还包括初始化 Java 虚拟机 ;
     所述初始化 Java 虚拟机的步骤包括启动预设的 Java 启动器, 设置 Java 虚拟机的 标识信息。
     其中, 所述启动当前 Java 虚拟机的步骤之前还包括 :
     基于高级加密标准 AES(AES, Advanced Encryption Standard) 加密算法, 对 Java 程序的 class 文件进行加密。
     其中, 所述正常启动所述 Java 虚拟机运行 Java 程序的步骤包括 :
     所述 Java 虚拟机检测所述动态链接库文件是否含有预设的标识特征信息 ;
     当检测结果为是时, 根据所述动态链接库文件处理 class 文件 ; 当检测结果为否 时, 退出运行程序。
     其中, 含有预设的标识特征信息的动态链接库文件设有对所述 class 文件进行解 密的解密密钥 ;
     所述 Java 虚拟机根据所述动态链接库文件处理 class 文件的步骤包括 :
     所述 Java 虚拟机根据所述动态链接库文件的解密密钥, 调用 AES 算法对所述 class 文件进行解密, 并根据解密后的 class 文件执行指令。
     对应地, 本发明实施例还提供了一种电子终端, 包括 :
     Java 虚拟机启动模块, 用于启动当前 Java 虚拟机 ;
     加载模块, 用于加载基于 Java 虚拟机工具接口的动态链接库文件 ;
     标识识别模块, 用于根据所述动态链接库文件识别当前 Java 虚拟机是否含有预 设的标识信息 ;
     识别处理模块, 用于当所述标识识别模块的识别结果为是时, 正常启动所述 Java 虚拟机运行 Java 程序 ; 当所述标识识别模块的识别结果为否时, 退出启动程序。
     其中, 所述电子终端还包括 :
     虚拟机初始化模块, 用于初始化 Java 虚拟机 ;
     所述虚拟机初始化模块启动电子终端预设的 Java 启动器, 设置 Java 虚拟机的标 识信息。
     其中, 所述电子终端还包括 :
     加密模块, 用于基于高级加密标准 AES 加密算法, 对 Java 程序的 class 文件进行 加密。
     其中, 所述识别处理模块包括 :
     触发检测单元, 用于当所述标识识别模块的识别结果为是时, 触发所述 Java 虚拟 机检测所述动态链接库文件是否含有预设的标识特征信息 ;
     当所述检测结果为是时, 所述 Java 虚拟机根据所述动态链接库文件处理 class 文 件; 当所述检测结果为否时, 所述 Java 虚拟机退出运行程序。
     其中, 含有预设的标识特征信息的动态链接库文件设有对所述 class 文件进行解 密的解密密钥 ;
     当所述检测结果为是时, 所述 Java 虚拟机根据所述动态链接库文件的解密密钥, 调用 AES 算法对所述 class 文件进行解密, 并根据解密后的 class 文件执行指令。
     实施本发明实施例, 具有如下有益效果 :
     通过识别当前 Java 虚拟机是否含有预设的标识信息, 当识别出当前的 Java 虚拟 机含有预设的标识信息时才正常启动所述 Java 虚拟机运行 Java 程序, 且该 Java 虚拟机还 检测所述动态链接库文件是否含有预设的标识特征信息, 当检测到该动态链接库文件含有 预设的标识特征信息时才根据所述动态链接库文件处理 class 文件, 否则退出运行程序, 实现了从二进制级别上确保 Java 字节码的安全, 让攻击者无法取得字节码, 从而从根本 上保护商业软件的源代码不被窃取, 更加安全的保护了商业软件的核心算法和商业机密 ; 采用本发明的技术方案不会损失任何 Java 的特性, 可以实现跨平台 Java 字节码的保护 ; 采用运行期面向切面编程 (AOP, Aspect Oriented Programming) 外挂方式装载, 对现有 的 Java 软件系统没有任何侵入影响 ; 由于控制在 Java 虚拟机级别上, 对 java 平台标准版 (JavaSE) 与 java 平台企业版 (JavaEE) 环境都是通用的, 并且部署简单, 成本低。附图说明 为了更清楚地说明本发明实施例或现有技术中的技术方案, 下面将对实施例或现 有技术描述中所需要使用的附图作简单地介绍, 显而易见地, 下面描述中的附图仅仅是本 发明的一些实施例, 对于本领域普通技术人员来讲, 在不付出创造性劳动性的前提下, 还可 以根据这些附图获得其他的附图。
     图 1 是本发明 Java 程序的运行方法的第一实施例流程示意图 ;
     图 2 是本发明 Java 程序的运行方法的第二实施例流程示意图 ;
     图 3 是本发明电子终端的第一实施例的结构示意图 ;
     图 4 是本发明电子终端的第二实施例的结构示意图 ;
     图 5 是本发明电子终端的第三实施例的结构示意图 ;
     图 6 是本发明电子终端的第四实施例的结构示意图。
     具体实施方式
     下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案进行清楚、 完 整地描述, 显然, 所描述的实施例仅仅是本发明一部分实施例, 而不是全部的实施例。基于 本发明中的实施例, 本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例, 都属于本发明保护的范围。
     如图 1 示出的本发明 Java 程序的运行方法的第一实施例流程示意图, 包括 : 步骤 S101 : 启动当前 Java 虚拟机, 加载基于 Java 虚拟机工具接口的动态链接库文件 ; 具体地, 用户需要运行 Java 程序, 向电子终端发送运行 Java 程序的指令, 电子终 端接收到该指令后, 启动当前 Java 虚拟机, 并加载基于 Java 虚拟机工具接口 (JVMTI, Java Virtual Machine Tool Interface) 的动态链接库文件 ; 该 Java 虚拟机可以为用户安装 的 Java 虚拟机, 也可以电子终端本身自带的 Java 虚拟机 ; 该动态链接库文件可以为基于 windows 平台的 DLL 组件 ( 如 Agent.dll), 也可以为基于 Linux 平台的 SO 组件等等。
     步骤 S102 : 根据所述动态链接库文件识别当前 Java 虚拟机是否含有预设的标识 信息 ;
     具体地, 当识别结果为是时, 则执行步骤 S103 ; 当识别结果为否时, 则退出启动程 序, 结束流程。
     步骤 S103 : 正常启动所述 Java 虚拟机运行 Java 程序。
     需要说明的是, 本发明实施例还包括, 技术人员编写完毕 Java 程序后, 首先初始 化 Java 虚拟机, 预先设置 Java 虚拟机的标识信息, 具体地 : 技术人员定制 Java 启动器, 采 用 C 语言修改 Java.c 源文件, 以通过启动该定制的 Java 启动器, 在首次初始化 Java 虚拟 机的过程中给 Java 虚拟机预先设置标识信息, 下面列举一个初始化 Java 虚拟机, 设置 Java 虚拟机的标识信息的例子, 但不限于如下的形式 :
     /*
     *Initializes the Java Virtual Machine.Also frees options array when
     *finished.
     */
     static jboolean InitializeJVM(JavaVM**pvm, JNIEnv**penv, InvocationFunctions*ifn){ JavaVMInitArgs args ; jint r ; memset(&args, 0, sizeof(args)) ; args.version = JNI_VERSION_1_2 ; args.nOptions = numOptions ; args.options = options ; args.ignoreUnrecognized = JNI_FALSE ; if(_launcher_debug){ int i = 0 ; printf(″ JavaVM args:\n ″ ) ; printf(″ version 0x% 08lx,″, (long)args.version) ; printf(″ ignoreUnrecognized is% s,″, args.ignoreUnrecognized ?″ JNI_TRUE″ : ″ JNI_FALSE″ ) ; printf(″ nOptions is% ld\n″, (long)args.nOptions) ; for(i = 0 ; i < numOptions ; i++) printf(″ option[% 2d] =′% s′ \n″, i, args.options[i].optionString) ; } // 设置 JavaVM 的标识信息, 该标识信息包括但不限于一个为 “123456” 的序列号等等 : pvm- > reserved0 =″ 123456″ ;
     r = ifn- > CreateJavaVM(pvm, (void**)penv, &args) ;
     JLI_MemFree(options) ;
     return r == JNI_OK ;
     }
     那么在步骤 S102 中, 电子终端根据所述动态链接库文件识别当前 Java 虚拟机是 否含有预设的标识信息 (123456 的序列号 ), 若识别出当前 Java 虚拟机没有含有该序列号, 表明当前 Java 虚拟机没有权利运行 Java 程序, 为非法操作, 退出启动程序, 结束流程 ; 若识 别出当前 Java 虚拟机含有该序列号, 表明当前 Java 虚拟机为用户授权的 Java 虚拟机, 有 权利运行 Java 程序, 则执行步骤 S103, 正常启动所述 Java 虚拟机运行 Java 程序。具体地, 技术人员预先定制所述动态链接库文件 ( 如 Agent.dll), 采用 C 语言按 JVMTI 规范编写的 dll 文件, 以识别当前 Java 虚拟机是否含有预设的标识信息, 下面列举一个根据按 JVMTI 规 范编写的 dll 文件识别当前 Java 虚拟机是否含有预设的标识信息的例子, 但不限于如下的 形式 :
     /*Agent_OnLoad : This is called immediately after the shared library is
     * loaded.This is the first code executed.
     */
     JNIEXPORT jint JNICALL
     Agent_OnLoad(JavaVM*vm, char*options, void*reserved){
     // 检测 JavaVM 的序列号, 如果不一致就直接返回
     if(strcmp((*vm)- > reserved0,″ 123456″ ) != 0)
     {
     return JNI_OK ;
     }
     // 如果一致, 则执行步骤 S103 正常启动所述 Java 虚拟机运行 Java 程序
     现有技术中, 由于任何平台上的 Java 虚拟机呈现的总是相同的指令, 而 Java 的指 令系统就注定了反编译的可行性以及容易性。当前流行的源码攻击与字节码攻击技术, 这 些攻击手段都有一个共同的前提 : 首先能通过 Java 虚拟机获取到字节码, 然后反编译成源 码进行攻击或直接攻击字节码。采用本发明提供的技术方案, 通过检测 Java 虚拟机是否具 有预设的标识信息, 让攻击者无法接触到字节码, 从而破坏了攻击者获取字节码的前提, 从 根本上解决现有技术中通过 Java 虚拟机可以获取并攻击字节码的安全破绽, 达到保护核 心 Java 程序代码的目的。
     进一步地, 本发明实施例还包括 : 技术人员编写完毕 Java 程序后, 执行步骤 S101 之前, 将基于高级加密标准 AES 加密算法, 对 Java 程序的 class 文件进行加密, 得到 class 文件的密文。
     下面结合图 2 示出的本发明 Java 程序的运行方法的第二实施例流程示意图, 包 步骤 S201 : 启动当前 Java 虚拟机, 加载基于 Java 虚拟机工具接口的动态链接库 具体地, 如上述第一实施例的步骤 S101, 这里不再赘述。 步骤 S202 : 根据所述动态链接库文件识别当前 Java 虚拟机是否含有预设的标识括:
     文件 ;
     信息 ; 具体地, 如上述第一实施例的步骤 S202, , 当识别结果为是时, 则执行步骤 S203 ; 当识别结果为否时, 则退出启动程序, 结束流程。
     步骤 S203 : 所述 Java 虚拟机检测所述动态链接库文件是否含有预设的标识特征 信息 ;
     具体地, 下面列举 Java 虚拟机检测所述动态链接库文件是否含有预设的标识特 征信息的示例, 但不限于如下代码示例 :
     /*
     *JVM would like to know if it′ s created by a standard Sun launcher, or by
     *user native application, the following property indicates the former.
     */
     void SetJavaLauncherProp(){
     AddOption(″ -Dsun.java.launcher = SUN_STANDARD″, NULL) ;
     //TODO 强制开启 JVMTI 代理
     //-agentpath:E:/jdbcTracker.dll = bootJar = E:/jdbcTracker.jar
     //AddOption(″ -agentpath:E:/jdbcTracker.dll = bootJar = E:/jdbcTracker.jar″, NULL
     );AddOption(″ -agentlib:Agent″, NULL) ;
     }
     如, 预设的动态链接库文件为 Agent.dll, 那么在 Java 虚拟机 (JVM) 的启动代码中 已经绑定了我们预设的 Agent 来伴随启动, 通过 Agent 的名称 ( 相当于标识特征信息 ) 指 定了我们要在启动过程中加载 Agent.dll, 若成功加载 Agent.dll, 即步骤 S203 的检测结果 为是, 若没有成功加载 Agent.dll, 即步骤 S203 的检测结果为否。
     具体地, 当检测结果为是时, 则执行步骤 S204 ; 当检测结果为否时, 退出运行程 序; 现有技术中攻击者可以运用 JVMTI 技术, 通过监听 ClassFileLoadHook 事件来截取到解 密后的 Class 字节码 ; 本发明实施例中技术人员预先设置动态链接库文件含有标识特征信 息 ( 如特征码信息等 ), 只有当 Java 虚拟机检测到该动态链接库文件含有该标识特征信息 才进行后续的运行处理, 表明 Java 虚拟机检测到攻击者使用的动态链接库文件没有含有 预设的标识特征信息时, 则运行程序, 从而杜绝了攻击者注入的任何外挂代码, 能更好地保 护 Java 程序代码。
     步骤 S204 : 根据所述动态链接库文件处理 class 文件。
     具体地, 含有预设的标识特征信息的动态链接库文件设有对所述 class 文件进行 解密的解密密钥, 所述 Java 虚拟机根据所述动态链接库文件的解密密钥, 调用 AES 算法对 所述 class 文件进行解密, 并根据解密后的 class 文件执行指令。因此, 攻击者若没有技术 人员预设的含有标识特征信息的动态链接库文件, 无法对所述 class 文件进行解密。如下 面列举的当根据按 JVMTI 规范编写的 dll 文件识别当前 Java 虚拟机含有预设的标识信息 后, 根据所述动态链接库文件的解密密钥, 调用 AES 算法对所述 class 文件进行解密例子, , 但不限于如下的形式 :
     /*Agent_OnLoad : This is called immediately after the shared library is
     * loaded.This is the first code executed.
     */
     JNIEXPORT jint JNICALL
     Agent_OnLoad(JavaVM*vm, char*options, void*reserved){
     // 检测 JavaVM 的序列号, 如果不一致就直接返回
     if(strcmp((*vm)- > reserved0,″ 123456″ ) != 0)
     {
     return JNI_OK ;
     }
     static GlobalAgentData data ;
     jvmtiEnv*jvmti ;
     jvmtiError error ;
     jint res ;
     TraceFlavor flavor ;
     jvmtiCapabilities capabilities ;
     jvmtiEventCallbacks callbacks ;static Trace empty ; // 内存初始化 (void)memset((void*)&data, 0, sizeof(data)) ; gdata = &data ; /* 获取 JVMTI 环境 */ res = (*vm)- > GetEnv(vm, (void**)&jvmti, JVMTI_VERSION_1) ; if(res != JNI_OK){ fatal_error(″ ERROR : Unable to access JVMTI Version 1(0x% x), ″ ″ is your JDK a 5.0or newer version ?″ ″ JNIEnv′ s GetEnv()returned% d\n″, JVMTI_VERSION_1, res) ; } //...... 调用标准 AES 算法解密过程省略 // return JNI_OK ;}
     需要说明的是, 本发明实施例中以 Agent.dll 进行 class 文件的解密, 这个解密只 影响了那些被加密保护的 class 文件, 对于那些没用加密的 class 文件也照样能够在 Java 虚拟机环境中运行 ; 即本发明提供的保护环境并不是私自专用的环境, 对于一些在 java 平 台企业版 (JavaEE) 服务器中运行的程序来说, 往往需要一个 Java 虚拟机来启动的, 而本发 明实施例采用运行期面向切面编程 (AOP, Aspect Oriented Programming) 外挂方式装载, 加上 Agent.dll 就可以处理加密的 class 文件, 我们移除 Agent.dll 的话, 也并没有削弱处 理普通没加密的 class 的能力, 因此现有的 Java 软件系统没有任何侵入影响。
     通过上述实施例, 电子终端识别当前 Java 虚拟机是否含有预设的标识信息, 当识 别出当前的 Java 虚拟机含有预设的标识信息时才正常启动所述 Java 虚拟机运行 Java 程 序, 且该 Java 虚拟机还检测所述动态链接库文件是否含有预设的标识特征信息, 当检测到 该动态链接库文件含有预设的标识特征信息时才根据所述动态链接库文件处理 class 文 件, 否则退出运行程序, 实现了从二进制级别上确保 Java 字节码的安全, 让攻击者无法取 得字节码, 从而从根本上保护商业软件的源代码不被窃取, 更加安全的保护了商业软件的 核心算法和商业机密 ; 采用本发明的技术方案不会损失任何 Java 的特性, 可以实现跨平台 Java 字节码的保护 ; 采用运行期面向切面编程 (AOP, Aspect Oriented Programming) 外挂 方式装载, 对现有的 Java 软件系统没有任何侵入影响 ; 由于控制在 Java 虚拟机级别上, 对 java 平台标准版 (JavaSE) 与 java 平台企业版 (JavaEE) 环境都是通用的, 并且部署简单, 成本低。
     上面详细说明了本发明实施例的 Java 程序的运行方法, 下面对应地, 详细说明本 发明实施例的电子终端。
     如图 3 示出的本发明电子终端的第一实施例的结构示意图, 电子终端 3 包括 Java 虚拟机启动模块 31、 加载模块 32、 标识识别模块 33 以及识别处理模块 34, 其中
     Java 虚拟机启动模块 31 用于启动当前 Java 虚拟机 ;
     加载模块 32 用于加载基于 Java 虚拟机工具接口的动态链接库文件 ;
     具体地, 用户需要运行 Java 程序, 向电子终端 3 发送运行 Java 程序的指令, 电子终端 3 接收到该指令后, Java 虚拟机启动模块 31 启动当前 Java 虚拟机, 加载模块 32 加载 基于 Java 虚拟机工具接口 (JVMTI, Java Virtual Machine Tool Interface) 的动态链接 库文件 ; 该 Java 虚拟机可以为用户安装的 Java 虚拟机, 也可以电子终端本身自带的 Java 虚拟机 ; 该动态链接库文件可以为基于 windows 平台的 DLL 组件 ( 如 Agent.dll), 也可以 为基于 Linux 平台的 SO 组件等等。
     标识识别模块 33 用于根据所述动态链接库文件识别当前 Java 虚拟机是否含有预 设的标识信息 ;
     识别处理模块 34 用于当标识识别模块 33 的识别结果为是时, 正常启动所述 Java 虚拟机运行 Java 程序 ; 当标识识别模块 33 的识别结果为否时, 退出启动程序。
     进一步地, 如图 4 示出的本发明电子终端的第二实施例的结构示意图, 电子终端 3 包括 Java 虚拟机启动模块 31、 加载模块 32、 标识识别模块 33 以及识别处理模块 34 外, 还 包括虚拟机初始化模块 35, 虚拟机初始化模块 35 用于初始化 Java 虚拟机 ; 具体地,
     技术人员编写完毕 Java 程序后, 首先通过虚拟机初始化模块 35 初始化 Java 虚拟 机, 预先设置 Java 虚拟机的标识信息, 具体地 : 技术人员定制一个 Java 启动器, 采用 C 语 言修改 Java.c 源文件, 虚拟机初始化模块 35 通过启动该定制的 Java 启动器, 在首次初始 化 Java 虚拟机的过程中给 Java 虚拟机预先设置标识信息, 那么后续标识识别模块 33 将根 据所述动态链接库文件识别当前 Java 虚拟机是否含有虚拟机初始化模块 35 预设的标识信 息。 现有技术中, 由于任何平台上的 Java 虚拟机呈现的总是相同的指令, 而 Java 的指 令系统就注定了反编译的可行性以及容易性。当前流行的源码攻击与字节码攻击技术, 这 些攻击手段都有一个共同的前提 : 首先能通过 Java 虚拟机获取到字节码, 然后反编译成源 码进行攻击或直接攻击字节码。采用本发明提供的技术方案, 通过检测 Java 虚拟机是否具 有预设的标识信息, 让攻击者无法接触到字节码, 从而破坏了攻击者获取字节码的前提, 从 根本上解决现有技术中通过 Java 虚拟机可以获取并攻击字节码的安全破绽, 达到保护核 心 Java 程序代码的目的。
     再进一步地, 如图 5 示出的本发明电子终端的第三实施例的结构示意图, 电子终 端 3 包括 Java 虚拟机启动模块 31、 加载模块 32、 标识识别模块 33、 识别处理模块 34 以及虚 拟机初始化模块 35 外, 还包括加密模块 36, 用于基于 AES 加密算法, 对 Java 程序的 class 文件进行加密。具体地, 技术人员编写完毕 Java 程序后, Java 虚拟机启动模块 31 启动当 前 Java 虚拟机之前, 将基于高级加密标准 AES 加密算法, 对 Java 程序的 class 文件进行加 密, 得到 class 文件的密文。
     再进一步地, 如图 6 示出的本发明电子终端的第四实施例的结构示意图, 电子终 端 3 中的识别处理模块 34 还包括触发检测单元 341, 用于当标识识别模块 33 的识别结果为 是时, 触发所述 Java 虚拟机检测所述动态链接库文件是否含有预设的标识特征信息, 当所 述检测结果为是时, 所述 Java 虚拟机根据所述动态链接库文件处理 class 文件 ; 当所述检 测结果为否时, 所述 Java 虚拟机退出运行程序。现有技术中攻击者可以运用 JVMTI 技术, 通过监听 ClassFileLoadHook 事件来截取到解密后的 Class 字节码 ; 本发明实施例中技术 人员预先设置动态链接库文件含有标识特征信息 ( 如特征码信息等 ), 只有当 Java 虚拟机 检测到该动态链接库文件含有该标识特征信息才进行后续的运行处理, 表明 Java 虚拟机
     检测到攻击者使用的动态链接库文件没有含有预设的标识特征信息时, 则运行程序, 从而 杜绝了攻击者注入的任何外挂代码, 能更好地保护 Java 程序代码。
     需要说明的是, 含有预设的标识特征信息的动态链接库文件设有对所述 class 文 件进行解密的解密密钥 ; 当所述 Java 虚拟机的检测结果为是时, 所述 Java 虚拟机根据所 述动态链接库文件的解密密钥, 调用 AES 算法对所述 class 文件进行解密, 并根据解密后的 class 文件执行指令。 因此, 攻击者若没有技术人员预设的含有标识特征信息的动态链接库 文件, 无法对所述 class 文件进行解密。
     综上所述, 通过识别当前 Java 虚拟机是否含有预设的标识信息, 当识别出当前的 Java 虚拟机含有预设的标识信息时才正常启动所述 Java 虚拟机运行 Java 程序, 且该 Java 虚拟机还检测所述动态链接库文件是否含有预设的标识特征信息, 当检测到该动态链接库 文件含有预设的标识特征信息时才根据所述动态链接库文件处理 class 文件, 否则退出运 行程序, 实现了从二进制级别上确保 Java 字节码的安全, 让攻击者无法取得字节码, 从而 从根本上保护商业软件的源代码不被窃取, 更加安全的保护了商业软件的核心算法和商业 机密 ; 采用本发明的技术方案不会损失任何 Java 的特性, 可以实现跨平台 Java 字节码的保 护; 采用运行期面向切面编程 (AOP, Aspect Oriented Programming) 外挂方式装载, 对现有 的 Java 软件系统没有任何侵入影响 ; 由于控制在 Java 虚拟机级别上, 对 java 平台标准版 (JavaSE) 与 java 平台企业版 (JavaEE) 环境都是通用的, 并且部署简单, 成本低。 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程, 是可以 通过计算机程序来指令相关的硬件来完成, 所述的程序可存储于一计算机可读取存储介质 中, 该程序在执行时, 可包括如上述各方法的实施例的流程。其中, 所述的存储介质可为磁 碟、 光盘、 只读存储记忆体 (Read-Only Memory, ROM) 或随机存储记忆体 (Random Access Memory, RAM) 等。
     以上所揭露的仅为本发明一种较佳实施例而已, 当然不能以此来限定本发明之权 利范围, 因此依本发明权利要求所作的等同变化, 仍属本发明所涵盖的范围。
    

一种JAVA程序的运行方法及电子终端.pdf_第1页
第1页 / 共16页
一种JAVA程序的运行方法及电子终端.pdf_第2页
第2页 / 共16页
一种JAVA程序的运行方法及电子终端.pdf_第3页
第3页 / 共16页
点击查看更多>>
资源描述

《一种JAVA程序的运行方法及电子终端.pdf》由会员分享,可在线阅读,更多相关《一种JAVA程序的运行方法及电子终端.pdf(16页珍藏版)》请在专利查询网上搜索。

1、10申请公布号CN101944042A43申请公布日20110112CN101944042ACN101944042A21申请号201010270548X22申请日20100901G06F9/455200601G06F21/0020060171申请人深圳市拜特科技股份有限公司地址518000广东省深圳市高新区中区中钢科技园大厦M6栋4层72发明人桂艳军王远74专利代理机构广州三环专利代理有限公司44202代理人郝传鑫潘中毅54发明名称一种JAVA程序的运行方法及电子终端57摘要本发明实施例公开了一种JAVA程序的运行方法,包括启动当前JAVA虚拟机,加载基于JAVA虚拟机工具接口的动态链接库文件。

2、;根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;当识别结果为是时,正常启动所述JAVA虚拟机运行JAVA程序;当识别结果为否时,退出启动程序。相应地,本发明还公开了一种电子终端,采用本发明,实现了从二进制级别上确保JAVA字节码的安全,让攻击者无法取得字节码,从而从根本上保护商业软件的源代码不被窃取,更加安全的保护了商业软件的核心算法和商业机密;采用本发明的技术方案不会损失任何JAVA的特性,可以实现跨平台JAVA字节码的保护,并且部署简单,成本低。51INTCL19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书9页附图4页CN101944049A1/2。

3、页21一种JAVA程序的运行方法,其特征在于,包括启动当前JAVA虚拟机,加载基于JAVA虚拟机工具接口的动态链接库文件;根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;当识别结果为是时,正常启动所述JAVA虚拟机运行JAVA程序;当识别结果为否时,退出启动程序。2如权利要求1所述的方法,其特征在于,所述启动当前JAVA虚拟机的步骤之前还包括初始化JAVA虚拟机;所述初始化JAVA虚拟机的步骤包括启动预设的JAVA启动器,设置JAVA虚拟机的标识信息。3如权利要求1所述的方法,其特征在于,所述启动当前JAVA虚拟机的步骤之前还包括基于高级加密标准AES加密算法,对JAVA程。

4、序的CLASS文件进行加密。4如权利要求1、2或3所述的方法,其特征在于,所述正常启动所述JAVA虚拟机运行JAVA程序的步骤包括所述JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息;当检测结果为是时,根据所述动态链接库文件处理CLASS文件;当检测结果为否时,退出运行程序。5如权利要求4所述的方法,其特征在于,含有预设的标识特征信息的动态链接库文件设有对所述CLASS文件进行解密的解密密钥;所述JAVA虚拟机根据所述动态链接库文件处理CLASS文件的步骤包括所述JAVA虚拟机根据所述动态链接库文件的解密密钥,调用AES算法对所述CLASS文件进行解密,并根据解密后的CLASS文。

5、件执行指令。6一种电子终端,其特征在于,包括JAVA虚拟机启动模块,用于启动当前JAVA虚拟机;加载模块,用于加载基于JAVA虚拟机工具接口的动态链接库文件;标识识别模块,用于根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;识别处理模块,用于当所述标识识别模块的识别结果为是时,正常启动所述JAVA虚拟机运行JAVA程序;当所述标识识别模块的识别结果为否时,退出启动程序。7如权利要求6所述的电子终端,其特征在于,还包括虚拟机初始化模块,用于初始化JAVA虚拟机;所述虚拟机初始化模块启动电子终端预设的JAVA启动器,设置JAVA虚拟机的标识信息。8如权利要求6所述的电子终端,其。

6、特征在于,还包括加密模块,用于基于AES加密算法,对JAVA程序的CLASS文件进行加密。9如权利要求6、7或8所述的电子终端,其特征在于,所述识别处理模块包括触发检测单元,用于当所述标识识别模块的识别结果为是时,触发所述JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息;当所述检测结果为是时,所述JAVA虚拟机根据所述动态链接库文件处理CLASS文件;权利要求书CN101944042ACN101944049A2/2页3当所述检测结果为否时,所述JAVA虚拟机退出运行程序。10如权利要求9所述的电子终端,其特征在于,含有预设的标识特征信息的动态链接库文件设有对所述CLASS文件进行。

7、解密的解密密钥;当所述检测结果为是时,所述JAVA虚拟机根据所述动态链接库文件的解密密钥,调用AES算法对所述CLASS文件进行解密,并根据解密后的CLASS文件执行指令。权利要求书CN101944042ACN101944049A1/9页4一种JAVA程序的运行方法及电子终端技术领域0001本发明涉及电子通信领域,尤其涉及一种JAVA程序的运行方法及电子终端。背景技术0002随着JAVA语言的普及和应用,越来越多的软件使用JAVA进行实现。由于JAVA语言的动态性和灵活性,对其源代码的保护变得十分困难。0003现有技术中,借助于反编译可以很容易地将源代码从其二进制类文件中提取出来,因此,任何一。

8、个恶意用户都可以利用反编译工具,如JAD应用程序开发联系会议等工具对软件进行逆向工程攻击,可以破解商业软件中授权保护的程序段进而随意分发未经授权的拷贝。而对于经验丰富的攻击者而言,甚至不用反编译而直接修改二进制的字节码来进行攻击,获取源代码。0004如何更好地保护软件的知识产权,保护软件的源代码不被攻击而泄露成为一个亟需解决的问题。发明内容0005本发明实施例所要解决的技术问题在于,提供一种JAVA程序的运行方法及电子终端。从二进制级别上确保JAVA字节码的安全,实现了更好地保护软件核心算法和商业机密不被窃取。0006为了解决上述技术问题,本发明实施例提供了一种JAVA程序的运行方法,包括00。

9、07启动当前JAVA虚拟机JAVAVM,JAVAVIRTUALMACHINE,加载基于JAVA虚拟机工具接口的动态链接库文件;0008根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;0009当识别结果为是时,正常启动所述JAVA虚拟机运行JAVA程序;当识别结果为否时,退出启动程序。0010其中,所述启动当前JAVA虚拟机的步骤之前还包括初始化JAVA虚拟机;0011所述初始化JAVA虚拟机的步骤包括启动预设的JAVA启动器,设置JAVA虚拟机的标识信息。0012其中,所述启动当前JAVA虚拟机的步骤之前还包括0013基于高级加密标准AESAES,ADVANCEDENCRY。

10、PTIONSTANDARD加密算法,对JAVA程序的CLASS文件进行加密。0014其中,所述正常启动所述JAVA虚拟机运行JAVA程序的步骤包括0015所述JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息;0016当检测结果为是时,根据所述动态链接库文件处理CLASS文件;当检测结果为否时,退出运行程序。0017其中,含有预设的标识特征信息的动态链接库文件设有对所述CLASS文件进行解密的解密密钥;说明书CN101944042ACN101944049A2/9页50018所述JAVA虚拟机根据所述动态链接库文件处理CLASS文件的步骤包括0019所述JAVA虚拟机根据所述动态链接。

11、库文件的解密密钥,调用AES算法对所述CLASS文件进行解密,并根据解密后的CLASS文件执行指令。0020对应地,本发明实施例还提供了一种电子终端,包括0021JAVA虚拟机启动模块,用于启动当前JAVA虚拟机;0022加载模块,用于加载基于JAVA虚拟机工具接口的动态链接库文件;0023标识识别模块,用于根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;0024识别处理模块,用于当所述标识识别模块的识别结果为是时,正常启动所述JAVA虚拟机运行JAVA程序;当所述标识识别模块的识别结果为否时,退出启动程序。0025其中,所述电子终端还包括0026虚拟机初始化模块,用于初始。

12、化JAVA虚拟机;0027所述虚拟机初始化模块启动电子终端预设的JAVA启动器,设置JAVA虚拟机的标识信息。0028其中,所述电子终端还包括0029加密模块,用于基于高级加密标准AES加密算法,对JAVA程序的CLASS文件进行加密。0030其中,所述识别处理模块包括0031触发检测单元,用于当所述标识识别模块的识别结果为是时,触发所述JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息;0032当所述检测结果为是时,所述JAVA虚拟机根据所述动态链接库文件处理CLASS文件;当所述检测结果为否时,所述JAVA虚拟机退出运行程序。0033其中,含有预设的标识特征信息的动态链接库文件。

13、设有对所述CLASS文件进行解密的解密密钥;0034当所述检测结果为是时,所述JAVA虚拟机根据所述动态链接库文件的解密密钥,调用AES算法对所述CLASS文件进行解密,并根据解密后的CLASS文件执行指令。0035实施本发明实施例,具有如下有益效果0036通过识别当前JAVA虚拟机是否含有预设的标识信息,当识别出当前的JAVA虚拟机含有预设的标识信息时才正常启动所述JAVA虚拟机运行JAVA程序,且该JAVA虚拟机还检测所述动态链接库文件是否含有预设的标识特征信息,当检测到该动态链接库文件含有预设的标识特征信息时才根据所述动态链接库文件处理CLASS文件,否则退出运行程序,实现了从二进制级别。

14、上确保JAVA字节码的安全,让攻击者无法取得字节码,从而从根本上保护商业软件的源代码不被窃取,更加安全的保护了商业软件的核心算法和商业机密;采用本发明的技术方案不会损失任何JAVA的特性,可以实现跨平台JAVA字节码的保护;采用运行期面向切面编程AOP,ASPECTORIENTEDPROGRAMMING外挂方式装载,对现有的JAVA软件系统没有任何侵入影响;由于控制在JAVA虚拟机级别上,对JAVA平台标准版JAVASE与JAVA平台企业版JAVAEE环境都是通用的,并且部署简单,成本低。说明书CN101944042ACN101944049A3/9页6附图说明0037为了更清楚地说明本发明实施。

15、例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。0038图1是本发明JAVA程序的运行方法的第一实施例流程示意图;0039图2是本发明JAVA程序的运行方法的第二实施例流程示意图;0040图3是本发明电子终端的第一实施例的结构示意图;0041图4是本发明电子终端的第二实施例的结构示意图;0042图5是本发明电子终端的第三实施例的结构示意图;0043图6是本发明电子终端的第四实施例的结构示意图。具体实施方式0044。

16、下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。0045如图1示出的本发明JAVA程序的运行方法的第一实施例流程示意图,包括0046步骤S101启动当前JAVA虚拟机,加载基于JAVA虚拟机工具接口的动态链接库文件;0047具体地,用户需要运行JAVA程序,向电子终端发送运行JAVA程序的指令,电子终端接收到该指令后,启动当前JAVA虚拟机,并加载基于JAVA虚拟机工具接口JVMTI,。

17、JAVAVIRTUALMACHINETOOLINTERFACE的动态链接库文件;该JAVA虚拟机可以为用户安装的JAVA虚拟机,也可以电子终端本身自带的JAVA虚拟机;该动态链接库文件可以为基于WINDOWS平台的DLL组件如AGENTDLL,也可以为基于LINUX平台的SO组件等等。0048步骤S102根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;0049具体地,当识别结果为是时,则执行步骤S103;当识别结果为否时,则退出启动程序,结束流程。0050步骤S103正常启动所述JAVA虚拟机运行JAVA程序。0051需要说明的是,本发明实施例还包括,技术人员编写完毕JAV。

18、A程序后,首先初始化JAVA虚拟机,预先设置JAVA虚拟机的标识信息,具体地技术人员定制JAVA启动器,采用C语言修改JAVAC源文件,以通过启动该定制的JAVA启动器,在首次初始化JAVA虚拟机的过程中给JAVA虚拟机预先设置标识信息,下面列举一个初始化JAVA虚拟机,设置JAVA虚拟机的标识信息的例子,但不限于如下的形式0052/0053INITIALIZESTHEJAVAVIRTUALMACHINEALSOFREESOPTIONSARRAYWHEN0054FINISHED0055/说明书CN101944042ACN101944049A4/9页70056STATICJBOOLEANINIT。

19、IALIZEJVMJAVAVMPVM,JNIENVPENV,0057INVOCATIONFUNCTIONSIFN0058JAVAVMINITARGSARGS;0059JINTR;0060MEMSETARGS,0,SIZEOFARGS;0061ARGSVERSIONJNI_VERSION_1_2;0062ARGSNOPTIONSNUMOPTIONS;0063ARGSOPTIONSOPTIONS;0064ARGSIGNOREUNRECOGNIZEDJNI_FALSE;0065IF_LAUNCHER_DEBUG0066INTI0;0067PRINTFJAVAVMARGSN;0068PRINTFVER。

20、SION0X08LX,LONGARGSVERSION;0069PRINTFIGNOREUNRECOGNIZEDISS,0070ARGSIGNOREUNRECOGNIZEDJNI_TRUEJNI_FALSE;0071PRINTFNOPTIONSISLDN,LONGARGSNOPTIONS;0072FORI0;INUMOPTIONS;I0073PRINTFOPTION2DSN,I,ARGSOPTIONSIOPTIONSTRING;00740075/设置JAVAVM的标识信息,该标识信息包括但不限于一个为“123456”的序列号等等0076PVMRESERVED0123456;0077RIFNCRE。

21、ATEJAVAVMPVM,VOIDPENV,ARGS;0078JLI_MEMFREEOPTIONS;0079RETURNRJNI_OK;00800081那么在步骤S102中,电子终端根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息123456的序列号,若识别出当前JAVA虚拟机没有含有该序列号,表明当前JAVA虚拟机没有权利运行JAVA程序,为非法操作,退出启动程序,结束流程;若识别出当前JAVA虚拟机含有该序列号,表明当前JAVA虚拟机为用户授权的JAVA虚拟机,有权利运行JAVA程序,则执行步骤S103,正常启动所述JAVA虚拟机运行JAVA程序。具体地,技术人员预先定制。

22、所述动态链接库文件如AGENTDLL,采用C语言按JVMTI规范编写的DLL文件,以识别当前JAVA虚拟机是否含有预设的标识信息,下面列举一个根据按JVMTI规范编写的DLL文件识别当前JAVA虚拟机是否含有预设的标识信息的例子,但不限于如下的形式0082/AGENT_ONLOADTHISISCALLEDIMMEDIATELYAFTERTHESHAREDLIBRARYIS0083LOADEDTHISISTHEFIRSTCODEEXECUTED0084/0085JNIEXPORTJINTJNICALL说明书CN101944042ACN101944049A5/9页80086AGENT_ONLOAD。

23、JAVAVMVM,CHAROPTIONS,VOIDRESERVED0087/检测JAVAVM的序列号,如果不一致就直接返回0088IFSTRCMPVMRESERVED0,123456000890090RETURNJNI_OK;00910092/如果一致,则执行步骤S103正常启动所述JAVA虚拟机运行JAVA程序0093现有技术中,由于任何平台上的JAVA虚拟机呈现的总是相同的指令,而JAVA的指令系统就注定了反编译的可行性以及容易性。当前流行的源码攻击与字节码攻击技术,这些攻击手段都有一个共同的前提首先能通过JAVA虚拟机获取到字节码,然后反编译成源码进行攻击或直接攻击字节码。采用本发明提供。

24、的技术方案,通过检测JAVA虚拟机是否具有预设的标识信息,让攻击者无法接触到字节码,从而破坏了攻击者获取字节码的前提,从根本上解决现有技术中通过JAVA虚拟机可以获取并攻击字节码的安全破绽,达到保护核心JAVA程序代码的目的。0094进一步地,本发明实施例还包括技术人员编写完毕JAVA程序后,执行步骤S101之前,将基于高级加密标准AES加密算法,对JAVA程序的CLASS文件进行加密,得到CLASS文件的密文。0095下面结合图2示出的本发明JAVA程序的运行方法的第二实施例流程示意图,包括0096步骤S201启动当前JAVA虚拟机,加载基于JAVA虚拟机工具接口的动态链接库文件;0097具。

25、体地,如上述第一实施例的步骤S101,这里不再赘述。0098步骤S202根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;0099具体地,如上述第一实施例的步骤S202,当识别结果为是时,则执行步骤S203;当识别结果为否时,则退出启动程序,结束流程。0100步骤S203所述JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息;0101具体地,下面列举JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息的示例,但不限于如下代码示例0102/0103JVMWOULDLIKETOKNOWIFITSCREATEDBYASTANDARDSUNLAUNCHER,OR。

26、BY0104USERNATIVEAPPLICATION,THEFOLLOWINGPROPERTYINDICATESTHEFORMER0105/0106VOIDSETJAVALAUNCHERPROP0107ADDOPTIONDSUNJAVALAUNCHERSUN_STANDARD,NULL;0108/TODO强制开启JVMTI代理0109/AGENTPATHE/JDBCTRACKERDLLBOOTJARE/JDBCTRACKERJAR0110/ADDOPTIONAGENTPATHE/JDBCTRACKERDLLBOOTJARE/JDBCTRACKERJAR,NULL说明书CN101944042A。

27、CN101944049A6/9页90111;0112ADDOPTIONAGENTLIBAGENT,NULL;01130114如,预设的动态链接库文件为AGENTDLL,那么在JAVA虚拟机JVM的启动代码中已经绑定了我们预设的AGENT来伴随启动,通过AGENT的名称相当于标识特征信息指定了我们要在启动过程中加载AGENTDLL,若成功加载AGENTDLL,即步骤S203的检测结果为是,若没有成功加载AGENTDLL,即步骤S203的检测结果为否。0115具体地,当检测结果为是时,则执行步骤S204;当检测结果为否时,退出运行程序;现有技术中攻击者可以运用JVMTI技术,通过监听CLASSFI。

28、LELOADHOOK事件来截取到解密后的CLASS字节码;本发明实施例中技术人员预先设置动态链接库文件含有标识特征信息如特征码信息等,只有当JAVA虚拟机检测到该动态链接库文件含有该标识特征信息才进行后续的运行处理,表明JAVA虚拟机检测到攻击者使用的动态链接库文件没有含有预设的标识特征信息时,则运行程序,从而杜绝了攻击者注入的任何外挂代码,能更好地保护JAVA程序代码。0116步骤S204根据所述动态链接库文件处理CLASS文件。0117具体地,含有预设的标识特征信息的动态链接库文件设有对所述CLASS文件进行解密的解密密钥,所述JAVA虚拟机根据所述动态链接库文件的解密密钥,调用AES算法。

29、对所述CLASS文件进行解密,并根据解密后的CLASS文件执行指令。因此,攻击者若没有技术人员预设的含有标识特征信息的动态链接库文件,无法对所述CLASS文件进行解密。如下面列举的当根据按JVMTI规范编写的DLL文件识别当前JAVA虚拟机含有预设的标识信息后,根据所述动态链接库文件的解密密钥,调用AES算法对所述CLASS文件进行解密例子,但不限于如下的形式0118/AGENT_ONLOADTHISISCALLEDIMMEDIATELYAFTERTHESHAREDLIBRARYIS0119LOADEDTHISISTHEFIRSTCODEEXECUTED0120/0121JNIEXPORTJI。

30、NTJNICALL0122AGENT_ONLOADJAVAVMVM,CHAROPTIONS,VOIDRESERVED0123/检测JAVAVM的序列号,如果不一致就直接返回0124IFSTRCMPVMRESERVED0,123456001250126RETURNJNI_OK;01270128STATICGLOBALAGENTDATADATA;0129JVMTIENVJVMTI;0130JVMTIERRORERROR;0131JINTRES;0132TRACEFLAVORFLAVOR;0133JVMTICAPABILITIESCAPABILITIES;0134JVMTIEVENTCALLBACK。

31、SCALLBACKS;说明书CN101944042ACN101944049A7/9页100135STATICTRACEEMPTY;0136/内存初始化0137VOIDMEMSETVOIDDATA,0,SIZEOFDATA;0138GDATADATA;0139/获取JVMTI环境/0140RESVMGETENVVM,VOIDJVMTI,JVMTI_VERSION_1;0141IFRESJNI_OK0142FATAL_ERRORERRORUNABLETOACCESSJVMTIVERSION10XX,0143ISYOURJDKA50ORNEWERVERSION0144JNIENVSGETENVRET。

32、URNEDDN,JVMTI_VERSION_1,RES;01450146/调用标准AES算法解密过程省略/0147RETURNJNI_OK;01480149需要说明的是,本发明实施例中以AGENTDLL进行CLASS文件的解密,这个解密只影响了那些被加密保护的CLASS文件,对于那些没用加密的CLASS文件也照样能够在JAVA虚拟机环境中运行;即本发明提供的保护环境并不是私自专用的环境,对于一些在JAVA平台企业版JAVAEE服务器中运行的程序来说,往往需要一个JAVA虚拟机来启动的,而本发明实施例采用运行期面向切面编程AOP,ASPECTORIENTEDPROGRAMMING外挂方式装载,加。

33、上AGENTDLL就可以处理加密的CLASS文件,我们移除AGENTDLL的话,也并没有削弱处理普通没加密的CLASS的能力,因此现有的JAVA软件系统没有任何侵入影响。0150通过上述实施例,电子终端识别当前JAVA虚拟机是否含有预设的标识信息,当识别出当前的JAVA虚拟机含有预设的标识信息时才正常启动所述JAVA虚拟机运行JAVA程序,且该JAVA虚拟机还检测所述动态链接库文件是否含有预设的标识特征信息,当检测到该动态链接库文件含有预设的标识特征信息时才根据所述动态链接库文件处理CLASS文件,否则退出运行程序,实现了从二进制级别上确保JAVA字节码的安全,让攻击者无法取得字节码,从而从根。

34、本上保护商业软件的源代码不被窃取,更加安全的保护了商业软件的核心算法和商业机密;采用本发明的技术方案不会损失任何JAVA的特性,可以实现跨平台JAVA字节码的保护;采用运行期面向切面编程AOP,ASPECTORIENTEDPROGRAMMING外挂方式装载,对现有的JAVA软件系统没有任何侵入影响;由于控制在JAVA虚拟机级别上,对JAVA平台标准版JAVASE与JAVA平台企业版JAVAEE环境都是通用的,并且部署简单,成本低。0151上面详细说明了本发明实施例的JAVA程序的运行方法,下面对应地,详细说明本发明实施例的电子终端。0152如图3示出的本发明电子终端的第一实施例的结构示意图,电。

35、子终端3包括JAVA虚拟机启动模块31、加载模块32、标识识别模块33以及识别处理模块34,其中0153JAVA虚拟机启动模块31用于启动当前JAVA虚拟机;0154加载模块32用于加载基于JAVA虚拟机工具接口的动态链接库文件;0155具体地,用户需要运行JAVA程序,向电子终端3发送运行JAVA程序的指令,电子说明书CN101944042ACN101944049A8/9页11终端3接收到该指令后,JAVA虚拟机启动模块31启动当前JAVA虚拟机,加载模块32加载基于JAVA虚拟机工具接口JVMTI,JAVAVIRTUALMACHINETOOLINTERFACE的动态链接库文件;该JAVA虚。

36、拟机可以为用户安装的JAVA虚拟机,也可以电子终端本身自带的JAVA虚拟机;该动态链接库文件可以为基于WINDOWS平台的DLL组件如AGENTDLL,也可以为基于LINUX平台的SO组件等等。0156标识识别模块33用于根据所述动态链接库文件识别当前JAVA虚拟机是否含有预设的标识信息;0157识别处理模块34用于当标识识别模块33的识别结果为是时,正常启动所述JAVA虚拟机运行JAVA程序;当标识识别模块33的识别结果为否时,退出启动程序。0158进一步地,如图4示出的本发明电子终端的第二实施例的结构示意图,电子终端3包括JAVA虚拟机启动模块31、加载模块32、标识识别模块33以及识别处。

37、理模块34外,还包括虚拟机初始化模块35,虚拟机初始化模块35用于初始化JAVA虚拟机;具体地,0159技术人员编写完毕JAVA程序后,首先通过虚拟机初始化模块35初始化JAVA虚拟机,预先设置JAVA虚拟机的标识信息,具体地技术人员定制一个JAVA启动器,采用C语言修改JAVAC源文件,虚拟机初始化模块35通过启动该定制的JAVA启动器,在首次初始化JAVA虚拟机的过程中给JAVA虚拟机预先设置标识信息,那么后续标识识别模块33将根据所述动态链接库文件识别当前JAVA虚拟机是否含有虚拟机初始化模块35预设的标识信息。0160现有技术中,由于任何平台上的JAVA虚拟机呈现的总是相同的指令,而J。

38、AVA的指令系统就注定了反编译的可行性以及容易性。当前流行的源码攻击与字节码攻击技术,这些攻击手段都有一个共同的前提首先能通过JAVA虚拟机获取到字节码,然后反编译成源码进行攻击或直接攻击字节码。采用本发明提供的技术方案,通过检测JAVA虚拟机是否具有预设的标识信息,让攻击者无法接触到字节码,从而破坏了攻击者获取字节码的前提,从根本上解决现有技术中通过JAVA虚拟机可以获取并攻击字节码的安全破绽,达到保护核心JAVA程序代码的目的。0161再进一步地,如图5示出的本发明电子终端的第三实施例的结构示意图,电子终端3包括JAVA虚拟机启动模块31、加载模块32、标识识别模块33、识别处理模块34以。

39、及虚拟机初始化模块35外,还包括加密模块36,用于基于AES加密算法,对JAVA程序的CLASS文件进行加密。具体地,技术人员编写完毕JAVA程序后,JAVA虚拟机启动模块31启动当前JAVA虚拟机之前,将基于高级加密标准AES加密算法,对JAVA程序的CLASS文件进行加密,得到CLASS文件的密文。0162再进一步地,如图6示出的本发明电子终端的第四实施例的结构示意图,电子终端3中的识别处理模块34还包括触发检测单元341,用于当标识识别模块33的识别结果为是时,触发所述JAVA虚拟机检测所述动态链接库文件是否含有预设的标识特征信息,当所述检测结果为是时,所述JAVA虚拟机根据所述动态链接。

40、库文件处理CLASS文件;当所述检测结果为否时,所述JAVA虚拟机退出运行程序。现有技术中攻击者可以运用JVMTI技术,通过监听CLASSFILELOADHOOK事件来截取到解密后的CLASS字节码;本发明实施例中技术人员预先设置动态链接库文件含有标识特征信息如特征码信息等,只有当JAVA虚拟机检测到该动态链接库文件含有该标识特征信息才进行后续的运行处理,表明JAVA虚拟机说明书CN101944042ACN101944049A9/9页12检测到攻击者使用的动态链接库文件没有含有预设的标识特征信息时,则运行程序,从而杜绝了攻击者注入的任何外挂代码,能更好地保护JAVA程序代码。0163需要说明的。

41、是,含有预设的标识特征信息的动态链接库文件设有对所述CLASS文件进行解密的解密密钥;当所述JAVA虚拟机的检测结果为是时,所述JAVA虚拟机根据所述动态链接库文件的解密密钥,调用AES算法对所述CLASS文件进行解密,并根据解密后的CLASS文件执行指令。因此,攻击者若没有技术人员预设的含有标识特征信息的动态链接库文件,无法对所述CLASS文件进行解密。0164综上所述,通过识别当前JAVA虚拟机是否含有预设的标识信息,当识别出当前的JAVA虚拟机含有预设的标识信息时才正常启动所述JAVA虚拟机运行JAVA程序,且该JAVA虚拟机还检测所述动态链接库文件是否含有预设的标识特征信息,当检测到该。

42、动态链接库文件含有预设的标识特征信息时才根据所述动态链接库文件处理CLASS文件,否则退出运行程序,实现了从二进制级别上确保JAVA字节码的安全,让攻击者无法取得字节码,从而从根本上保护商业软件的源代码不被窃取,更加安全的保护了商业软件的核心算法和商业机密;采用本发明的技术方案不会损失任何JAVA的特性,可以实现跨平台JAVA字节码的保护;采用运行期面向切面编程AOP,ASPECTORIENTEDPROGRAMMING外挂方式装载,对现有的JAVA软件系统没有任何侵入影响;由于控制在JAVA虚拟机级别上,对JAVA平台标准版JAVASE与JAVA平台企业版JAVAEE环境都是通用的,并且部署简。

43、单,成本低。0165本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体READONLYMEMORY,ROM或随机存储记忆体RANDOMACCESSMEMORY,RAM等。0166以上所揭露的仅为本发明一种较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。说明书CN101944042ACN101944049A1/4页13图1说明书附图CN101944042ACN101944049A2/4页14图2说明书附图CN101944042ACN101944049A3/4页15图3图4说明书附图CN101944042ACN101944049A4/4页16图5图6说明书附图CN101944042A。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 计算;推算;计数


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1