CN106960138B - 虚拟机指令的校验方法及装置、系统 - Google Patents

虚拟机指令的校验方法及装置、系统 Download PDF

Info

Publication number
CN106960138B
CN106960138B CN201610012149.0A CN201610012149A CN106960138B CN 106960138 B CN106960138 B CN 106960138B CN 201610012149 A CN201610012149 A CN 201610012149A CN 106960138 B CN106960138 B CN 106960138B
Authority
CN
China
Prior art keywords
instruction
check value
program
tested
virtual machine
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
CN201610012149.0A
Other languages
English (en)
Other versions
CN106960138A (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.)
Alibaba Group Holding Ltd
Original Assignee
Alibaba Group Holding Ltd
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 Alibaba Group Holding Ltd filed Critical Alibaba Group Holding Ltd
Priority to CN201610012149.0A priority Critical patent/CN106960138B/zh
Publication of CN106960138A publication Critical patent/CN106960138A/zh
Application granted granted Critical
Publication of CN106960138B publication Critical patent/CN106960138B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/121Restricting unauthorised execution of programs
    • G06F21/125Restricting unauthorised execution of programs by manipulating the program code, e.g. source code, compiled code, interpreted code, machine code

Landscapes

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

Abstract

本发明公开了一种虚拟机指令的校验方法及装置、系统。其中,该方法包括:在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令;对所述中间指令按照预设算法进行校验,得到第一校验值;比较所述校验值与所述指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序。

Description

虚拟机指令的校验方法及装置、系统
技术领域
本发明涉及软件安全领域,具体而言,涉及一种虚拟机指令的校验方法及装置、系统。
背景技术
随着软件工业的飞速发展,软件的安全日益重要,如何保证软件的完整性成为一个重要的问题。目前用于保证代码的完整性的方案主要有以下几种:数字水印技术,通过向目标程序嵌入软件所有者的身份信息来达到身份认证的目的;软件加壳,通过对软件加壳,来防止对核心逻辑的篡改;代码整体自校验技术,通过运行时基于文件级别的整体校验,从而发现基于文件的篡改。
但是,上述方案均存在一些缺点,例如:对于软件水印技术,虽然可以实现身份验证识别,但是不能有效阻止软件的盗版,例如虽然微软对各种盗版windows系统依然具有版权,但是依然无法阻止这种行为;对于软件加壳技术,通过脱壳等方式就可以完全还原被保护软件的所有逻辑;对于代码整体自校验技术,只能用于整个软件的完整性保护,而不能实现对代码块级别的保护,例如破解者可以针对被保护的软件,从其中截取核心算法指令序列,就可以在不用分析出软件本身逻辑的基础上实现软件的盗版。
发明内容
根据本申请实施例的一个方面,提供了一种虚拟机指令的校验方法,包括:在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令;对所述中间指令按照预设算法进行校验,得到第一校验值;比较所述校验值与所述指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序。
根据本申请实施例的另一方面,还提供了一种虚拟机指令的校验装置,包括:获取模块,用于在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令;校验模块,用于对所述中间指令按照预设算法进行校验,得到第一校验值;处理模块,用于比较所述第一校验值与所述指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序。
根据本申请实施例的另一方面,还提供了一种虚拟机指令的校验系统,包括:虚拟机解释引擎和虚拟机保护编译器;其中,所述虚拟机保护编译器,用于将待测程序编译为字节码文件;所述虚拟机解释引擎,用于在执行待测程序时,获取所述待测程序的当前字节码文件中的中间指令;对所述中间指令按照预设算法进行校验,得到第一校验值;以及比较所述第一校验值与所述指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序;其中,该中间指令为位于成对出现的指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令。
在本申请实施例中,采用在待测程序的字节码文件中使用类似插桩的方式将成对出现的指令之间的中间指令,利用实时生成的校验值和预设的校验值进行比较,并在比较结果指示相同时,确定继续执行待测程序的方式,从而有效提高软件的安全性,同时可以从代码块级别对软件进行保护,也提高了保护精度,进而解决了相关技术中无法更有效地对软件进行完整性保护的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1为根据本申请实施例1的一种可选的虚拟机指令的校验系统的结构框图;
图2为根据本申请实施例1的一种可选的虚拟机保护(Virtual Machine Project,简称为VMP)编译器(Compiler)的结构框图;
图3为根据本申请实施例的一种可选的VMP Compiler的另一结构框图;
图4为根据本申请实施例的一种可选的虚拟机解释引擎的工作流程示意图;
图5为根据本申请实施例的一种可选的虚拟机指令的校验系统的实现原理示意图;
图6为根据本申请实施例的一种可选的虚拟内存模型的架构示意图;
图7是根据本申请实施例的一种可选的用于实现虚拟机指令的校验方法的计算机终端的结构示意图;
图8是根据本申请实施例的一种可选的虚拟机指令的校验方法的示意图;
图9是根据本申请实施例的一种可选的虚拟机指令的校验装置的结构示意图;
图10是根据本申请实施例的一种可选的计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为了便于理解,现将本申请实施例中可能涉及到的术语解释如下:
1.bc:全称byte code,字节码,表示生成的虚拟机指令,其区别与Native Code(直接运行在物理机上的代码);
2;
3.Guest:客户机,运行字节码指令的虚拟机;
4.Host:宿主机,运行客户机的物理机,区别于客户机;
5.opcode:指令操作码,用于指明指令操作类型;
6.LLVM:全称lowlevel virtual machine,一款开源的编译器框架;
7.IR:全称Intermediate representation,中间表示,编译器对于源程序进行扫描后生成的内部表示,代表源程序的语义和语法结构;
8.O-llvm:Obfuscator-llvm,基于LLVM框架开发的代码混淆工具;
9.基于栈的虚拟机:进程级虚拟机的一种实现方式,指令执行时用于运算的输入操作数和输出操作数均存放在栈中;
10.基于寄存器的虚拟机:进程级虚拟机的一种实现方式,指令执行时用于运算的输入操作数和输出操作数均存放在寄存器中;
11.加壳:软件加密保护的一种方法,通过将原程序做压缩加密变换,并在外层增加一层壳代码来实现软件保护。壳代码优先于原程序执行,其功能是还原原程序内容,并跳回还原后的原程序执行。
11.RISC:精简指令集,cpu的一种设计模式,这种指令集对指令的种类和寻址方式等做了简化。
实施例1
根据本申请实施例,提供了一种虚拟机指令的校验系统,该系统用于实现对虚拟机指令的校验过程。图1为根据本申请实施例1的一种虚拟机指令的校验系统的结构框图,如图1所示,该系统包括:虚拟机解释引擎10和虚拟机保护编译器12;其中,
关于虚拟机保护编译器(即VMP Compiler)12:
虚拟机保护编译器12,用于将待测程序编译为字节码文件;
可选地,虚拟机保护编译器12,还用于按照以下方式确定第二校验值,以便与程序执行期间实时生成的校验值进行比较:在上述待测程序的源字节码文件中插入上述成对出现的指定类型指令(此时,插入成对出现的指定类型指令后的源字节码文件即为虚拟机解释引擎在加载或执行上述待测程序时的当前字节码文件),其中,上述源字节码文件为上述待测程序的源程序生成的字节码文件;以随机数和上述中间指令作为输入,调用所述预设算法计算上述中间指令的校验值,得到上述第二校验值。可选地,上述成对出现的指定类型指令可以通过在上述字节码文件进行插桩实现(即插入一系列的自定义指令,以下将该自定义指令称为桩指令),具体地,虚拟机保护编译器12的上述功能可以表现为以下形式:
虚拟机保护编译器12可以在编译字节码的开始阶段生成随机数,将其作为随机数种子;然后在生成的虚拟机字节码中进行插桩处理,其中,每对桩指令中包括一个用于表示开始的桩指令,以及一个用于表示结束的桩指令;接着,虚拟机保护编译器针对每对桩指令间的中间指令,利用预设算法以及上述随机数种子计算上述中间指令的校验值,将计算得到的校验值携带于桩指令中(例如,携带于用于表示结束的桩指令中)。
可选地,如图2所示,虚拟机保护编译器12,包括:编译器前端120,用于接收指定编程语言格式的上述待测程序的源代码;中间表示(IR)端122,用于将上述指定编程语言格式的源代码转换为中间表示IR语言的代码;编译器后端124,用于将上述IR指令转换为字节码文件,得到上述待测程序的字节码文件。其中,编译器前端100可以支持多种编程语言格式的源代码输入;编译器后端124也可以支持多种类型的指令集。以下结合图3说明一下虚拟机保护编译器的架构,但是需要说明的是,图3所示架构仅是本申请实施例中虚拟机保护编译器12一个示例,即本申请实施例中虚拟机保护编译器10的架构可以包括但不限于图3所示架构。如图3所示:
图3左侧为LLVM前端(Frontend)30(相当于图2中编译器前端100),支持各种编程语言,例如图3中左侧所示的C前端(支持C/C++语言的前端)、公式翻译(FormulaTranslation,简称为Fortran)前端(即支持Fortran语言的前端)、Ada语言等。图3中间为LLVM IR 32(相当于图2中所示的IR端102),用于支持LLVM的中间表示语言;图3右侧为LLVM后端34,LLVM项目支持已有的多种后端(Backend),包括x86后端和PowerPC后端等。本申请实施例中的VMP Compiler在此基础上增加了一种新型的后端VMPRISC后端,并实现了从LLVM IR到VMPRISC指令集的生成过程。
关于虚拟机解释引擎10:
虚拟机解释引擎10,用于在执行待测程序时,获取上述待测程序的当前字节码文件中的中间指令;对上述中间指令按照预设算法进行校验,得到第一校验值;以及比较上述第一校验值与上述指定类型指令中预先设置的第二校验值,在上述第一校验值和上述第二校验值相同时,确定上述中间指令通过校验并继续执行上述待测程序;其中,该中间指令为位于成对出现的指定类型指令之间的指令,上述成对出现的指定类型指令包括用于指示开始对上述中间指令进行校验的开始指令和用于指示结束对上述中间指令进行校验的结束指令。可选地,上述第二校验值可以携带于上述结束指令中。
在一个可选实施例中,第一校验值和第二校验值可以以随机数为种子,利用校验和算法得到,例如,以随机数为种子构造一个初始值,并附加上成对出现的桩指令中间区域的指令(即中间指令),将结果作为输入参数,调用循环冗余码校验(CRC)算法,计算中间指令的校验和,从而得到上述第一校验值或第二校验值。当然,除CRC算法之外,也可以选用任何其它一种校验和算法,包括但不限于传输控制协议(Transmission Control Protocol,简称为TCP)/互联网协议((Internet Protocol,简称为IP)中ip头部的检验和算法,md5算法,sha1算法等。
可选地,虚拟机解释引擎10,还用于以所述中间指令和所述开始指令中携带的随机数作为输入,调用所述预设算法计算上述中间指令的校验值,得到上述第一校验值。需要说明的是,此处开始指令中携带的随机数与虚拟机保护编译器12计算上述第二校验值所使用的随机数是相同的,以确保可以利用上述第一校验值和第二校验值的异同来判断中间指令是否合法,即是否通过校验。由于将随机数携带于上述成对出现的指令中,因此,可以有效阻止破解者从被保护虚拟机字节码文件中截取部分指令并嵌入其他字节码文件中,来实现窃取关键函数逻辑的方法。
需要说明的是,虚拟机解释引擎10,还用于在上述第一校验值和上述第二校验值不同时,确定上述中间指令未通过校验;以及停止执行上述待测程序。这样,便实现了对待测程序的保护,即一旦检测出上述待测程序被破解者篡改,则立即停止执行该待测程序,从而实现对待测程序的核心逻辑进行保护。
在一个可选实施例中,虚拟机解释引擎作为VMP保护程序工具中的重要组件,其工作流程如图4所示,包括:
步骤S402,取指令过程,获取当前虚拟机PC寄存器指向的虚拟机字节码内容;
步骤S404,解码指令,根据读取的虚拟机字节码内容,解码出虚拟机指令结构;
步骤S406,调用指令模拟函数,根据指令解码结果,调用相应指令的处理过程,模拟指令的运行;
步骤S408,移动PC,将PC步进一条指令,也就是PC=PC+4;
步骤S410,判断停机条件,如果不满足停机条件则转步骤S402,否则结束。
对于上述实施例及其可选实施例中的虚拟机指令的校验系统,其实现原理如图5所示:虚拟机指令的校验系统在对指令进行校验时大致分为两个过程:
(一)字节码生成过程,对应于模块VMP Compiler
被保护代码(即上述待测程序的程序代码)以c语言源代码形式提供,通过VMPCompiler最终生成虚拟机字节码文件(即bc文件)。需要说明的是,源代码的表现形式不仅限于C语言,还可以为Fortran语言、Ada语言等。
(二)字节码解释执行过程,对应于模块VMP SDK,其中,VMP SDK中主要依据虚拟机解释引擎来完成字节码的执行过程。
其中,图5中的普通逻辑指的是不会被VMP保护的代码,由于其安全性比较低,所以不是软件需要保护的核心逻辑(即图中的核心程序.h.c)。其作用是负责初始化和调用VMPSDK。目前由于各种系统的程序的启动过程都不一致,VMP SDK没有针对不同系统做不同的初始化处理,所以需要普通逻辑代码来初始化和调用VMP SDK。例如,Android程序的入口点是在java代码中,而iOS程序的入口点在Object-C中,这些代码就是普通逻辑,负责初始化和调用VMP SDK。
当需要调用被保护代码的功能时通过VMP SDK来调用被保护代码,VMP SDK加载并执行虚拟机字节码文件。
其中,对于上述实施例及其优选实施例中所涉及的虚拟机可以通过以下架构实现,但不限于此:
1)虚拟CPU架构:
1.32位RISC指令集,内存地址和寄存器均为32位。
2.指令编码存储格式为小端模式。
3.指令寻址方式为立即数和寄存器寻址,针对内存的访问必须通过load/store指令完成;
2)内存架构
图6左侧的主机(Host)代表运行时的被保护程序,右侧的客户端(guest)代表运行的VM。
Host通过VMP SDK来调用VM,由于VMP SDK封装了VM实现细节,所以Host可以做到平台无关,即可以兼容目前所有主流操作系统以及CPU。
Guest以沙盒模式运行,具有自己独立的内存地址空间,guest内存空间被划分为以下部分:
1)以0x0开始的无效地址空间;
2)虚拟机字节码区域,用于存放需要运行的虚拟机指令;
3)堆区域,满足虚拟机代码执行时动态内存分配需求;
4)栈区域,满足虚拟机代码运行时临时变量以及返回地址存放等临时空间分配需求。
需要说明的是,上述实施例及其可选实施例中所涉及的编译器和虚拟机解释引擎可以以软件或硬件的形式实现,对于后者,可以表现为可以实现编译器和虚拟机解释引擎的功能的计算机或处理器等,但不限于此。
通过上述实施例及其可选实施例中的方案,利用代码插桩来实现的字节码随机校验技术,可以有效地防止对生成的虚拟机字节码的非法篡改:可以防止破解者在字节码中插入自定义指令理解被保护软件逻辑;可以防止破解者篡改被保护软件,通过重发布等方式窃取软件开发者的成果,一旦运行篡改过并重新发布的虚拟机字节码文件,则虚拟机解释引擎会检测出来并停止运行,保护核心逻辑;软件的完整性校验细化到切片级别,切片的粒度为桩指令的粒度;完整性校验算法附带编译器生成的随机数种子(即在成对出现的指令中携带随机数),这样可以有效阻止破解者从被保护虚拟机字节码文件中截取部分指令并嵌入其他字节码文件中,来实现窃取关键函数逻辑的方法。
实施例2
根据本申请实施例,还提供了一种虚拟机指令的校验方法实施例,需要说明的是,在附图的流程图示出的步骤可以在诸如一组计算机可执行指令的计算机系统中执行,并且,虽然在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。以运行在计算机终端上为例,图7是本申请实施例的一种虚拟机指令的校验方法的计算机终端的硬件结构框图。如图7所示,计算机终端70可以包括一个或多个(图中仅示出一个)处理器702(处理器702可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器704、以及用于通信功能的传输装置706。本领域普通技术人员可以理解,图7所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端70还可包括比图7中所示更多或者更少的组件,或者具有与图7所示不同的配置。
存储器704可用于存储应用软件的软件程序以及模块,如本申请实施例中的虚拟机指令的校验方法对应的程序指令/模块,处理器702通过运行存储在存储器704内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的虚拟机指令的校验方法。存储器704可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器704可进一步包括相对于处理器702远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端70。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置706用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端70的通信供应商提供的无线网络。在一个实例中,传输装置706包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置706可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
在上述运行环境下,本申请提供了如图8所示的虚拟机指令的校验方法。图8是根据本申请实施例8的虚拟机指令的校验方法的流程图。如图8所示,该方法包括步骤S802-S806:
步骤S802,在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,上述成对出现的指定类型指令包括用于指示开始对上述中间指令进行校验的开始指令和用于指示结束对上述中间指令进行校验的结束指令;
可选地,对于上述成对出现的指定类型指令可以表现为对上述字节码文件进行插桩操作,例如插入成对出现的自定义指令(以下称为桩指令。成对出现的自定义指令中其中一个指令用于表示开始对中间指令进行校验,另一指令用于表示结束对中间指令的校验)。
步骤S804,对上述中间指令按照预设算法进行校验,得到第一校验值;上述预设算法包括但不限于:校验和算法。
由此可见,由于在对待测程序进行校验时,可以对成对出现的特定指令之间的指令校验,因此可以对待测程序的字节码文件进行分片校验或分区域校验,提高了校验精度。
可选地,以上述中间指令和上述开始指令中携带的随机数作为输入,调用所述预设算法计算所述中间指令的校验值,得到上述第一校验值。例如,以随机数为种子构造一个初始值,并附加上成对出现的桩指令中间区域的指令(即中间指令),将结果作为输入参数,调用循环冗余码校验(CRC)算法,计算中间指令的校验和。当然,除CRC算法之外,也可以选用任何其它一种校验和算法,包括但不限于传输控制协议(Transmission ControlProtocol,简称为TCP)/互联网协议((Internet Protocol,简称为IP)中ip头部的检验和算法,md5算法,sha1算法等。
步骤S806,比较上述第一校验值与上述指定类型指令中预先设置的第二校验值,在上述第一校验值和上述第二校验值相同时,确定上述中间指令通过校验并继续执行上述待测程序。
可选地,上述第二校验值可以通过以下方式确定:在上述待测程序的源字节码文件中插入上述成对出现的指定类型指令(此时,插入成对出现的指定类型指令后的源字节码文件即为步骤S802中所述的当前字节码文件),其中,上述源字节码文件为上述待测程序的源程序生成的字节码文件;对上述源字节码文件中上述成对出现的指定类型指令之间的上述中间指令,以随机数和上述中间指令作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第二校验值。
需要说明的是,该第二校验值的生成方式可以采用与第一校验值相同的方式,但是,由于两者为不同过程中的参数,因此,其生成过程中所使用参数的来源是不同的,例如,在生成第一校验值时,可以使用编译器生成的随机数;而在生成第二校验值时,采用上述中间指令中携带的随机数。当然两者所使用随机数的来源并不限于上述形式。需要说明的是,在生成第一校验值和第二校验值时所使用的随机数是相同的。
可选地,在上述第一校验值和上述第二校验值不同时,确定上述中间指令未通过校验;以及停止执行上述待测程序。这样,便利用执行待测程序时生成的校验值和预先设置在上述指定类型指令中的校验值的比较结果完成了对上述中间指令的校验过程。
可选地,上述第二校验值携带于上述结束指令中。
可选地,上述待测程序的字节码文件可以通过以下方式获取:将采用指定编程语言的上述待测程序的源代码转换为中间表示IR语言的代码;将上述IR语言的代码转换为字节码文件,得到上述待测程序的字节码文件。
需要说明的是,本实施例及其可选实施例中所涉及的方法可以运行于实施例1中所述的虚拟机指令的校验系统,当然,该系统也可以运行于图7所示的计算机终端70上,但并不限于图7所示计算机终端70的结构。例如,可以利用实施例1中的虚拟机保护编译器12生成上述第二校验值以及字节码文件,可以利用虚拟机解释引擎10执行步骤S802-S806。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例所述的方法。
通过上述实施例及其可选实施例中的方案,利用代码插桩来实现的字节码随机校验技术,可以有效地防止对生成的虚拟机字节码的非法篡改:可以防止破解者在字节码中插入自定义指令理解被保护软件逻辑,例如通过插入日志输出函数调用来输出关键路径的中间结果;可以防止破解者篡改被保护软件,通过重发布等方式窃取软件开发者的成果,一旦运行篡改过并重新发布的虚拟机字节码文件,则虚拟机解释引擎会检测出来并停止运行,保护核心逻辑;软件的完整性校验细化到切片级别,切片的粒度为桩指令的粒度;完整性校验算法附带编译器生成的随机数种子(即在成对出现的指令中携带随机数),这样可以有效阻止破解者从被保护虚拟机字节码文件中截取部分指令并嵌入其他字节码文件中,来实现窃取关键函数逻辑的方法。
实施例3
根据本申请实施例,还提供了一种用于实现虚拟机指令的校验方法的装置,需要说明的是,该装置可以运行于实施例2中所示的计算机终端上,但是,并不限于实施例2中所述计算机终端,例如,可以与实施例2中所述计算机终端较多或较少的结构特征等。图9是根据本申请实施例的一种可选的虚拟机指令的校验装置的结构示意图。如图9所示,该装置包括以下模块:
获取模块90,用于在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,上述成对出现的指定类型指令包括用于指示开始对上述中间指令进行校验的开始指令和用于指示结束对上述中间指令进行校验的结束指令;
校验模块92,连接至获取模块90,用于对上述中间指令按照预设算法进行校验,得到第一校验值;可选地,校验模块92,可以通过以下方式获取上述第一校验值:以上述中间指令和上述开始指令中携带的随机数作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第一校验值。这样,通过将随机数携带于开始指令中,可以有效防止破解者从被保护虚拟机字节码文件中截取部分指令,从而得到待测程序的核心逻辑。
处理模块94,连接至校验模块92,用于比较上述第一校验值与上述指定类型指令中预先设置的第二校验值,在上述第一校验值和上述第二校验值相同时,确定上述中间指令通过校验并继续执行上述待测程序。可选地,上述第二校验值为通过以下方式确定的校验值:在上述待测程序的源字节码文件中插入上述成对出现的指定类型指令,其中,上述源字节码文件为上述待测程序的源程序生成的字节码文件;对上述源字节码文件中上述成对出现的指定类型指令之间的上述中间指令,以随机数和上述中间指令作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第二校验值。可选地,上述第二校验值携带于上述结束指令中。
可选地,处理模块94,还用于在上述第一校验值和上述第二校验值不同时,确定上述中间指令未通过校验;以及停止执行上述待测程序。这样,可以在校验不通过时,及时阻止程序的进一步运行,从而防止对指令进行篡改。
需要说明的是,本实施例中所涉及的各个模块,是可以通过软件或硬件来实现的,对于后者,可以表现为以下形式:获取模块90、校验模块92和处理模块94位于同一处理器中;或者,获取模块90、校验模块92和处理模块94分别位于第一处理器、第二处理器和第三处理器中;或者,获取模块90、校验模块92和处理模块94中的任意两个模块位于同一处理器中,另一模块位于一个处理器中。
另外,本实施例提供的虚拟机指令的校验装置的优选实施方式可以参见实施例1和2中的描述,此处不再赘述。
通过上述虚拟机指令的校验装置中各个模块的功能,可以有效提高软件的安全性,同时可以从代码块级别对软件进行保护,也提高了保护精度,进而解决了相关技术中无法更有效地对软件进行完整性保护的技术问题。
实施例4
本申请的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行虚拟机指令的校验方法中以下步骤的程序代码:在执行待测程序时,获取待测程序的字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,上述成对出现的指定类型指令包括用于指示开始对上述中间指令进行校验的开始指令和用于指示结束对上述中间指令进行校验的结束指令;对上述中间指令按照预设算法进行校验,得到第一校验值;比较上述校验值与上述指定类型指令中预先设置的第二校验值,在上述第一校验值和上述第二校验值相同时,确定上述中间指令通过校验并继续执行上述待测程序。
可选地,图10是根据本申请实施例的一种计算机终端的结构框图。如图10所示,该计算机终端A可以包括:一个或多个(图中仅示出一个)处理器、存储器、以及传输装置。
其中,存储器可用于存储软件程序以及模块,如本申请实施例中的虚拟机指令的校验方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的虚拟机指令的校验方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端A。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:在执行待测程序时,获取待测程序的字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,上述成对出现的指定类型指令包括用于指示开始对上述中间指令进行校验的开始指令和用于指示结束对上述中间指令进行校验的结束指令;对上述中间指令按照预设算法进行校验,得到第一校验值;比较上述校验值与上述指定类型指令中预先设置的第二校验值,在上述第一校验值和上述第二校验值相同时,确定上述中间指令通过校验并继续执行上述待测程序。
可选的,上述处理器还可以执行如下步骤的程序代码:在上述待测程序的源字节码文件中插入上述成对出现的指定类型指令,其中,上述源字节码文件为上述待测程序的源程序生成的字节码文件;以随机数和上述中间指令作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第二校验值。
可选的,上述处理器还可以执行如下步骤的程序代码:以上述中间指令和上述开始指令中携带的随机数作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第一校验值。
可选的,上述处理器还可以执行如下步骤的程序代码:在所述第一校验值和所述第二校验值不同时,确定所述中间指令未通过校验;以及停止执行所述待测程序。
可选的,上述处理器还可以执行如下步骤的程序代码:将采用指定编程语言的所述待测程序的源代码转换为中间表示IR语言的代码;将所述IR语言的代码转换为字节码文件,得到所述待测程序的字节码文件。
本领域普通技术人员可以理解,图10所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌上电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图10其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图10中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图10所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指示终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例5
本申请的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例2所提供的虚拟机指令的校验方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:在执行待测程序时,获取待测程序的字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,上述成对出现的指定类型指令包括用于指示开始对上述中间指令进行校验的开始指令和用于指示结束对上述中间指令进行校验的结束指令;对上述中间指令按照预设算法进行校验,得到第一校验值;比较上述校验值与上述指定类型指令中预先设置的第二校验值,在上述第一校验值和上述第二校验值相同时,确定上述中间指令通过校验并继续执行上述待测程序。
可选地,在本实施例中,存储介质还可以被设置为存储用于执行以下步骤的程序代码:以上述中间指令和上述开始指令中携带的随机数作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第一校验值。
可选地,在本实施例中,存储介质还可以被设置为存储用于执行以下步骤的程序代码:在上述待测程序的源字节码文件中插入上述成对出现的指定类型指令,其中,上述源字节码文件为上述待测程序的源程序生成的字节码文件;以随机数和上述中间指令作为输入,调用上述预设算法计算上述中间指令的校验值,得到上述第二校验值。
可选地,在本实施例中,存储介质还可以被设置为存储用于执行以下步骤的程序代码:在所述第一校验值和所述第二校验值不同时,确定所述中间指令未通过校验;以及停止执行所述待测程序。
可选地,在本实施例中,存储介质还可以被设置为存储用于执行以下步骤的程序代码:将采用指定编程语言的所述待测程序的源代码转换为中间表示IR语言的代码;将所述IR语言的代码转换为字节码文件,得到所述待测程序的字节码文件。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (16)

1.一种虚拟机指令的校验方法,其特征在于,包括:
在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令;
对所述中间指令按照预设算法进行校验,得到第一校验值,包括:以所述中间指令和所述开始指令中携带的随机数作为输入,调用所述预设算法计算所述中间指令的校验值,得到所述第一校验值;
比较所述第一校验值与所述指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序。
2.根据权利要求1所述的方法,其特征在于,所述第二校验值通过以下方式确定:
在所述待测程序的源字节码文件中插入所述成对出现的指定类型指令,其中,所述源字节码文件为所述待测程序的源程序生成的字节码文件;
以随机数和所述中间指令作为输入,调用所述预设算法计算所述中间指令的校验值,得到所述第二校验值。
3.根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述第一校验值和所述第二校验值不同时,确定所述中间指令未通过校验;以及停止执行所述待测程序。
4.根据权利要求1所述的方法,其特征在于,所述第二校验值携带于所述结束指令中。
5.根据权利要求1所述的方法,其特征在于,获取待测程序的字节码文件中的中间指令之前,所述方法还包括:
将采用指定编程语言的所述待测程序的源代码转换为中间表示IR语言的代码;将所述IR语言的代码转换为字节码文件,得到所述待测程序的字节码文件。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述预设算法包括:校验和算法。
7.一种虚拟机指令的校验装置,其特征在于,包括:
获取模块,用于在执行待测程序时,获取待测程序的当前字节码文件中的中间指令,其中,该中间指令为位于成对出现的指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令;
校验模块,用于对所述中间指令按照预设算法进行校验,得到第一校验值,所述校验模块以所述中间指令和所述开始指令中携带的随机数作为输入,调用所述预设算法计算所述中间指令的校验值,得到所述第一校验值;
处理模块,用于比较所述第一校验值与所述指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序。
8.根据权利要求7所述的装置,其特征在于,所述第二校验值为通过以下方式确定的校验值:在所述待测程序的源字节码文件中插入所述成对出现的指定类型指令,其中,所述源字节码文件为所述待测程序的源程序生成的字节码文件;以随机数和所述中间指令作为输入,调用所述预设算法计算所述中间指令的校验值,得到所述第二校验值。
9.根据权利要求7所述的装置,其特征在于,所述处理模块,还用于在所述第一校验值和所述第二校验值不同时,确定所述中间指令未通过校验;以及停止执行所述待测程序。
10.根据权利要求7所述的装置,其特征在于,所述第二校验值携带于所述结束指令中。
11.一种虚拟机指令的校验系统,其特征在于,包括:虚拟机解释引擎和虚拟机保护编译器;其中,
所述虚拟机保护编译器,用于将待测程序编译为字节码文件;
所述虚拟机解释引擎,用于在执行待测程序时,获取所述待测程序的当前字节码文件中的中间指令;对所述中间指令按照预设算法进行校验,得到第一校验值;以及比较所述第一校验值与指定类型指令中预先设置的第二校验值,在所述第一校验值和所述第二校验值相同时,确定所述中间指令通过校验并继续执行所述待测程序;其中,该中间指令为位于成对出现的所述指定类型指令之间的指令,所述成对出现的指定类型指令包括用于指示开始对所述中间指令进行校验的开始指令和用于指示结束对所述中间指令进行校验的结束指令,所述虚拟机解释引擎,还用于以所述中间指令和所述开始指令中携带的随机数作为输入,调用所述预设算法计算所述中间指令的校验值,得到所述第一校验值。
12.根据权利要求11所述的系统,其特征在于,所述虚拟机保护编译器,用于按照以下方式确定所述第二校验值:在所述待测程序的源字节码文件中插入所述成对出现的指定类型指令,其中,所述源字节码文件为所述待测程序的源程序生成的字节码文件;对所述源字节码文件中所述成对出现的指定类型指令之间的所述中间指令,以随机数和所述中间指令作为输入,调用所述预设算法计算所述中间指令的校验值,得到所述第二校验值。
13.根据权利要求11所述的系统,其特征在于,所述虚拟机解释引擎,还用于在所述第一校验值和所述第二校验值不同时,确定所述中间指令未通过校验;以及停止执行所述待测程序。
14.根据权利要求11所述的系统,其特征在于,所述第二校验值携带于所述结束指令中。
15.根据权利要求11所述的系统,其特征在于,所述虚拟机保护编译器,包括:
编译器前端,用于接收指定编程语言格式的所述待测程序的源代码;
中间表示IR端,用于将所述指定编程语言格式的源代码转换为中间表示IR语言的代码;
编译器后端,用于将所述IR语言的代码转换为字节码文件,得到所述待测程序的字节码文件。
16.根据权利要求15所述的系统,其特征在于,所述编译器前端支持多种编程语言格式的源代码输入;和/或所述编译器后端支持多种类型的指令集。
CN201610012149.0A 2016-01-08 2016-01-08 虚拟机指令的校验方法及装置、系统 Active CN106960138B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610012149.0A CN106960138B (zh) 2016-01-08 2016-01-08 虚拟机指令的校验方法及装置、系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201610012149.0A CN106960138B (zh) 2016-01-08 2016-01-08 虚拟机指令的校验方法及装置、系统

Publications (2)

Publication Number Publication Date
CN106960138A CN106960138A (zh) 2017-07-18
CN106960138B true CN106960138B (zh) 2020-08-25

Family

ID=59480694

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610012149.0A Active CN106960138B (zh) 2016-01-08 2016-01-08 虚拟机指令的校验方法及装置、系统

Country Status (1)

Country Link
CN (1) CN106960138B (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109739620A (zh) * 2018-12-20 2019-05-10 武汉科锐逆向科技有限公司 一种基于vm引擎的保护方法
CN109635567B (zh) * 2019-01-29 2022-12-16 腾讯科技(深圳)有限公司 针对应用客户端的校验方法、装置及服务器平台
CN112668004B (zh) * 2019-10-16 2022-06-21 武汉斗鱼网络科技有限公司 一种基于llvm的函数校验方法及相关装置
CN111538665A (zh) * 2020-04-27 2020-08-14 北京奇艺世纪科技有限公司 程序的测试方法和装置、存储介质、电子装置

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739280A (zh) * 2008-11-11 2010-06-16 爱思开电讯投资(中国)有限公司 用于java卡的字节码优化系统和方法
CN101882190A (zh) * 2010-06-25 2010-11-10 清华大学 字节码中间表示程序的分模块形式化验证方法
CN103593617A (zh) * 2013-10-27 2014-02-19 西安电子科技大学 基于vmm的软件完整性校验系统及其方法
CN103679029A (zh) * 2013-12-11 2014-03-26 北京奇虎科技有限公司 一种修复山寨应用程序的方法及装置
CN104134021A (zh) * 2013-06-20 2014-11-05 腾讯科技(深圳)有限公司 软件的防篡改验证方法及装置
CN104598808A (zh) * 2015-01-08 2015-05-06 中国科学院信息工程研究所 基于寄存器架构的Android应用完整性验证方法

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101739280A (zh) * 2008-11-11 2010-06-16 爱思开电讯投资(中国)有限公司 用于java卡的字节码优化系统和方法
CN101882190A (zh) * 2010-06-25 2010-11-10 清华大学 字节码中间表示程序的分模块形式化验证方法
CN104134021A (zh) * 2013-06-20 2014-11-05 腾讯科技(深圳)有限公司 软件的防篡改验证方法及装置
CN103593617A (zh) * 2013-10-27 2014-02-19 西安电子科技大学 基于vmm的软件完整性校验系统及其方法
CN103679029A (zh) * 2013-12-11 2014-03-26 北京奇虎科技有限公司 一种修复山寨应用程序的方法及装置
CN104598808A (zh) * 2015-01-08 2015-05-06 中国科学院信息工程研究所 基于寄存器架构的Android应用完整性验证方法

Also Published As

Publication number Publication date
CN106960138A (zh) 2017-07-18

Similar Documents

Publication Publication Date Title
CN104462959B (zh) 一种安卓应用的加固保护方法、服务器和系统
KR101471589B1 (ko) 공통중간언어 기반 프로그램을 위한 보안 제공 방법
CN106960138B (zh) 虚拟机指令的校验方法及装置、系统
CN104239757A (zh) 应用程序防止逆向的方法及装置、运行方法及终端
US20160275019A1 (en) Method and apparatus for protecting dynamic libraries
CN109784007B (zh) 一种字节码加密的方法、字节码解密的方法及终端
KR101434860B1 (ko) 해시를 이용한 동적코드의 무결성 검증 방법
US10007520B1 (en) Systems and methods for using alternate computer instruction sets
WO2015192637A1 (zh) 软件安装包的加固保护方法和装置
CN105512521A (zh) 一种软件安装包的加固保护方法和系统
EP3126973A1 (en) Method, apparatus, and computer-readable medium for obfuscating execution of application on virtual machine
CN105579955A (zh) 应用控制流模型
Habibi et al. Mavr: Code reuse stealthy attacks and mitigation on unmanned aerial vehicles
CN112231702B (zh) 应用保护方法、装置、设备及介质
CN115062309B (zh) 一种新型电力系统下基于设备固件仿真的漏洞挖掘方法及存储介质
CN103198239A (zh) 经由在线服务器的内容保护和安全操作系统中的代码执行
CN114341800A (zh) 用于在电子设备中的应用更新之后提高运行时性能的方法和装置
CN103902908A (zh) 一种对Android加固应用的恶意代码检测方法及系统
CN113467784A (zh) 应用程序处理方法及其装置、计算机可读存储介质
CN111176685A (zh) 一种升级方法及装置
CN107145342B (zh) 应用的渠道信息的处理方法和装置
US20150039864A1 (en) Systems and methods for defeating malware with randomized opcode values
CN103106356B (zh) 一种在安全环境中生成代码提高软件保护强度的方法
CN110597496B (zh) 应用程序的字节码文件获取方法及装置
Bleier et al. Of ahead time: Evaluating disassembly of android apps compiled to binary oats through the art

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