CN108121565B - 生成指令集编码的方法、装置和系统 - Google Patents
生成指令集编码的方法、装置和系统 Download PDFInfo
- Publication number
- CN108121565B CN108121565B CN201611075913.5A CN201611075913A CN108121565B CN 108121565 B CN108121565 B CN 108121565B CN 201611075913 A CN201611075913 A CN 201611075913A CN 108121565 B CN108121565 B CN 108121565B
- Authority
- CN
- China
- Prior art keywords
- instruction
- code
- instruction set
- random number
- encoding
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
- Storage Device Security (AREA)
Abstract
本发明公开了一种生成指令集编码的方法、装置和系统。其中,该方法包括:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;其中,随机数参数用于确定指令编码过程中操作码和操作数分别在指令编码中的分布。本发明解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
Description
技术领域
本发明涉及信息安全领域,具体而言,涉及一种生成指令集编码的方法、装置和系统。
背景技术
虚拟机保护是用软件进行代码保护的较强方案,然而目前所有的虚拟机保护产品均采用固定或半固定的指令编码。与固定指令集编码相对应的是可变指令集编码,其中,半固定指令集编码也可以称作半可变指令集编码。对于固定指令集编码的虚拟机保护执行器,虚拟机的指令集一旦被黑客破解,该保护器便失去了保护作用,变得名存实亡;而对于采用了半固定指令集编码的虚拟机保护执行器,黑客破解指令集一次后,后续破解的难度就会下降,一旦指令集被破解,该虚拟机保护执行器的保护作用就极大的弱化了。
针对上述虚拟机指令集易被黑客破解以及指令集破解后虚拟机安全性能差的问题,目前尚未提出有效的解决方案。
发明内容
本发明实施例提供了一种生成指令集编码的方法、装置和系统,以至少解决现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
根据本发明实施例的一个方面,提供了一种生成指令集编码的方法,包括:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
根据本发明实施例的另一方面,还提供了一种生成指令集编码的装置,包括:第一获取模块,用于获取指令集和随机数参数,其中,随机数参数为动态变化的数据;第一编码模块,用于基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
根据本发明实施例的另一方面,还提供了一种基于指令集编码的应用保护方法,包括:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;根据指令编码,生成安全编译器,其中,安全编译器用于将代码进行编译,生成嵌入至应用程序中的编译代码;如果执行器运行应用程序,则间接执行安全编译器编译得到的编译代码。
根据本发明实施例的另一方面,还提供了一种基于指令编码的应用保护装置,包括:第二获取模块,用于获取指令集和随机数参数,其中,随机数参数为动态变化的数据;第二编码模块,用于基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;第一生成模块,用于根据指令编码,生成安全编译器,其中,安全编译器用于将代码进行编译,生成嵌入至应用程序中的编译代码;如果执行器运行应用程序,则间接执行安全编译器编译得到的编译代码。
根据本发明实施例的另一方面,还提供了一种基于指令集编码的应用保护方法,包括:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;根据指令编码,生成安全翻译器,其中,安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行应用程序,则间接执行安全翻译器翻译得到的翻译代码。
根据本发明实施例的另一方面,还提供了一种基于指令集编码的应用保护装置,包括:第三获取模块,用于获取指令集和随机数参数,其中,随机数参数为动态变化的数据;第三编码模块,基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;第二生成模块,根据指令编码,生成安全翻译器,其中,安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行应用程序,则间接执行安全翻译器翻译得到的翻译代码。
根据本发明实施例的另一方面,还提供了一种基于指令集编码的应用保护系统,包括:第一编译器,用于将第一代码进行编译,生成应用程序;安全编译器,用于将第二代码进行编译,生成嵌入至应用程序中的编译代码,其中,安全编译器根据指令编码而生成,指令编码为基于随机数参数对预定指令集进行编码而得到,随机数参数为动态变化的数据;第一执行器,用于在运行应用程序之后,间接执行编译代码。
根据本发明实施例的另一方面,还提供了一种基于指令集编码的应用保护系统,包括:第一编译器,用于将第一代码进行编译,生成应用程序;安全翻译器,用于将第二代码进行翻译,生成嵌入至应用程序中的翻译代码,其中,安全翻译器根据指令编码而生成,指令编码为基于随机数参数对预定指令集进行编码而得到,随机数参数为动态变化的数据;第二执行器,用于在运行应用程序之后,间接执行编译代码。
在本发明实施例中,采用对虚拟机指令集进行编码的方式,通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是根据本发明实施例的一种可选的生成指令集编码的方法的计算机终端的硬件结构框图;
图2是根据本发明实施例的一种生成指令集编码的方法的流程图;
图3是根据本发明实施例的一种可选的生成指令集编码的方法的流程图;
图4是根据本发明实施例的一种可选的编码树的结构示意图;
图5(a)是根据本发明实施例的一种可选的指令集编码生成器生成的指令集的示意图;
图5(b)是根据本发明实施例的一种可选的指令集编码生成器生成的指令集的示意图;
图6是根据本发明实施例的一种可选的根据编码指令集生成保护文件的示意图;
图7是根据本发明实施例的一种可选的生成指令集编码的方法的流程图;
图8(a)是根据本发明实施例的一种可选的虚拟机保护系统的基本系统框架示意图;
图8(b)是根据本发明实施例的一种可选的虚拟机保护系统的连接示意图;
图9是根据本发明实施例的一种可选的生成指令集编码的方法的流程图;
图10是根据本发明实施例的一种可选的基于二进制翻译器的系统框架示意图;
图11是根据本发明实施例的一种生成指令集编码的装置的结构示意图;
图12是根据本发明实施例的一种基于指令集编码的应用保护方法的流程图;
图13是根据本发明实施例的一种基于指令集编码的应用保护装置的结构示意图;
图14是根据本发明实施例的一种基于指令集编码的应用保护方法的流程图;
图15是根据本发明实施例的一种基于指令集编码的应用保护装置的结构示意图;
图16是根据本发明实施例的一种基于指令集编码的应用保护系统的结构示意图;
图17是根据本发明实施例的一种基于指令集编码的应用保护系统的结构示意图;以及
图18是根据本发明实施例的一种可选的计算机终端的结构框图。
具体实施方式
为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
首先,在对本申请实施例进行描述的过程中出现的部分名词或术语适用于如下解释:
1.虚拟机:通过软件模拟的具有完整硬件系统功能的、运行在一个隔离环境中的计算机系统,例如可以是JAVA虚拟机。
2.指令集:指对处理器进行编程的指令的集合,包含多条指令,其中,每条指令有一个处理器可识别的编码,可以指导处理器对寄存器、内存、处理器状态等进行操作。
3.指令:是由指令集架构定义的单个的处理器操作,通常一条指令由一个操作码和可选的多个操作数组成。
4.操作码:用于指明和识别指令的操作类型。
5.操作数:用于指明和识别指令的操作对象。
6.字节码:一种二进制格式,用来存储和表示用虚拟机指令集所实现的代码逻辑。
7.编译器:一种用于从高级语言生成汇编语言或二进制文件的工具,一般情况下,编译器包括汇编器和链接器。
8.汇编器:用于从汇编语言生成二进制文件的工具。
9.反汇编器:用于从二进制文件生成汇编语言的工具。
10.链接器:用于将多个二进制文件链接组合成一个二进制文件的工具。
11.虚拟机保护执行器:用于执行虚拟机字节码形式的代码逻辑的软件,通常以库的形式存在。
12.翻译器:用于将一种格式的代码翻译成另一种格式的代码,例如,可以是一种二进制翻译器,将某种格式的代码翻译成二进制格式的代码,其输入可以是一种虚拟机指令集编码的字节码,其输出为二进制格式的代码。
13.中间表示:对于编译器等工具而言,最终输出是汇编代码或二进制代码,然而在工具运行过程中,可以把中间过程中存在的表示代码的数据导出,这种导出的内容即为中间表示。中间表示可以是文本格式的或二进制格式。
14.固定指令编码:指指令集的操作码和操作数在存储时均占用固定的比特(即固定长度)。
15.半固定指令集编码:指操作码和操作数部分固定。
实施例1
本发明实施例提供了一种生成指令集编码的方法实施例。
本申请实施例一所提供的方法实施例可以在移动终端、计算机终端或者类似的运算装置中执行。图1示出了一种用于实现生成指令集编码的方法的计算机终端(或移动设备)的硬件结构框图。如图1所示,计算机终端10(或移动设备10)可以包括一个或多个(图中采用102a、102b,……,102n来示出)处理器102(处理器102可以包括但不限于微处理器MCU或可编程逻辑器件FPGA等的处理装置)、用于存储数据的存储器104、以及用于通信功能的传输模块106。除此以外,还可以包括:显示器、输入/输出接口(I/O接口)、通用串行总线(USB)端口(可以作为I/O接口的端口中的一个端口被包括)、网络接口、电源和/或相机。本领域普通技术人员可以理解,图1所示的结构仅为示意,其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图1中所示更多或者更少的组件,或者具有与图1所示不同的配置。
应当注意到的是上述一个或多个处理器102和/或其他数据处理电路在本文中通常可以被称为“数据处理电路”。该数据处理电路可以全部或部分的体现为软件、硬件、固件或其他任意组合。此外,数据处理电路可为单个独立的处理模块,或全部或部分的结合到计算机终端10(或移动设备)中的其他元件中的任意一个内。如本申请实施例中所涉及到的,该数据处理电路作为一种处理器控制(例如与接口连接的可变电阻终端路径的选择)。
存储器104可用于存储应用软件的软件程序以及模块,如本发明实施例中的生成指令集编码的方法对应的程序指令/数据存储装置,处理器102通过运行存储在存储器104内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的应用程序的漏洞检测方法。存储器104可包括高速随机存储器,还可包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器104可进一步包括相对于处理器102远程设置的存储器,这些远程存储器可以通过网络连接至计算机终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
传输装置106用于经由一个网络接收或者发送数据。上述的网络具体实例可包括计算机终端10的通信供应商提供的无线网络。在一个实例中,传输装置106包括一个网络适配器(Network Interface Controller,NIC),其可通过基站与其他网络设备相连从而可与互联网进行通讯。在一个实例中,传输装置106可以为射频(Radio Frequency,RF)模块,其用于通过无线方式与互联网进行通讯。
显示器可以例如触摸屏式的液晶显示器(LCD),该液晶显示器可使得用户能够与计算机终端10(或移动设备)的用户界面进行交互。
此处需要说明的是,在一些可选实施例中,上述图1所示的计算机设备(或移动设备)可以包括硬件元件(包括电路)、软件元件(包括存储在计算机可读介质上的计算机代码)、或硬件元件和软件元件两者的结合。应当指出的是,图1仅为特定具体实例的一个实例,并且旨在示出可存在于上述计算机设备(或移动设备)中的部件的类型。
在上述运行环境下,本申请提供了如图2所示的生成指令集编码的方法,该方法具体包括如下步骤:
步骤S202,获取指令集和随机数参数,其中,随机数参数为动态变化的数据。
在上述步骤限定的方案中,上述随机数参数可以是随机数种子,该随机数种子可以为二进制数据。
具体的,在如图6所示的根据指令的指令编码生成保护文件的示意图中,指令编码生成器605在获取指令集601和随机数参数603之后,根据随机数参数603对指令集601进行编码处理。
需要说明的是,由于上述随机数参数可以由用户直接给出或由随机数发生器产生,可以在虚拟机保护系统中进行处理,并且该随机数参数是随机变化的,而指令集由多条指令集合而成,每条指令有该指令的操作码和操作数组成,其中,操作码用于指明指令的操作类型,操作数用于指明指令的操作对象。因此,在上述步骤中,通过定期或不定期地更新指令集以及随机数参数,使指令集的更新速度大于黑客破解指令集的速度可以提高虚拟机的安全性。
步骤S204,基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;其中,随机数参数用于确定指令编码过程中操作码和操作数分别在指令编码中的分布。
在上述步骤限定的方案中,上述第一参数信息可用于指明或识别指令的操作类型,上述操作数可用于指明或识别指令的操作对象。具体的,可以通过图6所示的指令编码生成器605来对指令集601中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序,例如,操作码的比特位的位数可以小于操作码预定的比特位的位数,并且操作码的组成顺序可以不设置成由左至右的顺序,而是可以对其进行随机设置。又例如,指令的长度为m,即有m位比特表示一条指令,其中包括x位操作码和y位操作数,随机数参数可以随机为操作码和操作数分配比特位,只要m、x和y满足下式即可:
m≥x+y
需要说明的是,上述配置是自动且随机化的,用户可以通过改变指令编码生成器的随机数参数来生成不同的指令编码。
通过上述步骤,可以保证指令集中的每条指令都具有独特的编码,从而可以实现对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果。
在一种可选的实施例中,上述指令集为Java虚拟机指令集,该指令集包含五条指令,如表1所示(为便于说明,以字母代替具体的指令含义):
表1
指令A | 指令B | 指令C | 指令D | 指令E |
iconst 0 | iload 0 | fload 0 | dload 0 | dstore 0 |
表1中的五个指令可以用如图4所示的二叉树的形式进行编码,对于指令A,指令A的父节点为4,叶子节点4的父节点为9,叶子节点9的父节点为3,所以指令A的操作码的比特位为3、9、4,对应的操作码为001;同样对于指令B的操作码为000,操作码的比特位为3、9、4;指令C的操作码为01,操作码的比特位为3、9;指令D的操作码为10,操作码的比特位为3、4;指令E的操作码为11,操作码的比特位为3、4。
上述仅给出了对指令中的操作码进行编码的过程,由于操作数的编码过程与操作码的过程相似,在此不再赘述。
基于上述实施例中步骤S202至步骤S204所公开的方案,可以获知通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,容易注意到的是,由于上述随机数参数是随机的、动态的变化,并且对指令集中的指令进行编码时也是根据随机数参数进行编码的,因此,生成的指令编码也是随机的,具有不确定性,因此,通过获取指令集和随机数参数,并根据随机数参数对指令集中的指令进行编码,最后得到的指令编码,可以达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
图3示出了在上述步骤S202所公开的技术方案中,基于随机数参数对指令集中的指令进行编码,获取指令的指令编码的方法流程图。如图3所示,该方法具体包括如下步骤:
步骤S302,基于随机数参数将指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;
步骤S302,将指令集中的指令分别随机存储至二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的指令编码,其中,每个非叶子节点与子节点之间的权重值也是随机生成的。
在上述步骤S302至步骤S304所公开的方案中,上述指令编码可以用二叉树的形式表示,称该树为编码树。图4示出了一个包含5条指令的编码树,如图4所示,该编码树的5条指令分别为A、B、C、D、E,如图中的方形叶子节点所示;图中的每个圆形节点的数字代表一个比特位,每条连线上的数字为0或1,其中,每条连线上的数字为上述非叶子节点与子节点之间的权重值,例如,比特位标识为“3”的根节点的左分支上的权重值可以随机设置为“0”。在一种可选的实施例中,根据图4可以进行如下过程的编码:
首先检查指令的第3位,如果该位为0,则检查与标注为0的连线相连的第9位,否则检查与标注为1的连线相连的第4位,以此类推,直到检查到任意一条指令。需要说明的是,编码树中每一层的节点既可以检查相同的比特位,也可以检查不同的比特位,并且每个节点检查的比特位不能在此节点的父节点以及其他的祖先节点中出现。根据上述编码过程可知,A指令的操作码为001,该操作码的位为3、9、4。
需要说明的是,通过执行上述步骤S302至步骤S304可自动生成指令集的每条指令的操作码,然后用每条指令的剩余比特位来编码操作数。其中,只需要随机决定每个比特位的用法即可完成对操作数的编码。
在另一种可选的实施例中,如果指令集中的指令因操作码占用的比特位过多而无法有充足的比特位来对操作数进行编码,则需要重复执行上述步骤S302至步骤S304,直到完成对操作数的编码为止。其中,通过调整随机数参数可以改变生成的指令编码。
在上述步骤S302至步骤S304所公开的方案中,第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序,第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为“11000”时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54位的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行编码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
在执行完上述步骤S204之后,生成指令编码的方法还包括:根据指令的指令编码,生成保护文件。其中,图6示出了指令集601和随机数参数603经过指令编码生成器605后生成的保护文件的示意图。如图6所示,保护文件至少包括如下对象的代码和配置文件:指令集文档607、汇编器609、反汇编器611、链接器613、解码器615、翻译器617。指令编码生成器根据随机数参数对指令集进行编码处理后可生成指令集文档,该文档可用来记录编码后的指令集;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成汇编器所需要的代码和配置文件,根据上述代码和配置文件,可生成汇编器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成反汇编器所需要的代码和配置文件,根据上述代码和配置文件,可生成反汇编器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成链接器所需要的代码和配置文件,根据上述代码和配置文件,可生成链接器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成解码器所需要的代码和配置文件,根据上述代码和配置文件,可生成解码器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成翻译器所需要的代码和配置文件,根据上述代码和配置文件,可生成翻译器,该翻译器可以将一种指令集的二进制文件翻译成另一种指令集的二进制文件。
图7示出了在根据编码指令集,生成保护文件之后的方法流程图,该方法包括如下步骤:
步骤S502,接收源代码,此处的源代码可以是基于业务逻辑生成的逻辑代码;
步骤S504,采用编译器对逻辑代码进行编译,生成编译代码,其中,编译器至少包括:保护文件中的汇编器和链接器。
在一种可选的实施例中,指令编码生成器可以在虚拟机保护系统中应用,其中,虚拟机保护系统的基本系统框架示意图如图8(a)所示。图8(a)中的系统框架分为两部分:普通逻辑代码803经普通编译器805编译后与虚拟机保护执行器801链接形成应用程序807,以及需要保护的逻辑代码809经过编译器811编译后形成字节码文件813,其中,字节码采用指令编码生成器所自动生成的编码格式。在为不同应用和不同用户提供不同指令集的虚拟机保护执行器之后,即使黑客破解了其中一套字节码的编码,也无法直接利用该信息破解其它虚拟机保护执行器。不管是否被破解,用户都可以定时或不定时更新字节码文件和虚拟机保护执行器,从而使得黑客不得不反复消耗时间进行破解。
需要说明的是,编译器包含汇编器和链接器,并且汇编器和链接器均为基于前述的指令编码生成器生成的代码及配置文件所生成。
如图7所示,在执行完步骤S504之后,上述方法还包括:
步骤S506,将编译代码载入对应的应用程序,其中,不同的应用程序载入不同的编译代码。
在一种可选的实施例中,如图8(b)所示,字节码文件813可被动态装载入(如图8(b)中字节码文件813到应用程序807的实线所示)或静态插入(如图8(b)中字节码文件813到应用程序807的虚线所示)应用程序。应用程序在执行逻辑代码时,通过虚拟机保护执行器来间接执行字节码的代码。间接执行的方式可以为但不限于解释执行。通过上述方法,黑客难以破解字节码文件所表示的核心逻辑,从而实现了对逻辑代码的保护。
需要说明的是,在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。
针对不同的应用,或者同一个应用的不同版本,可以用指令编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
图9示出了在根据指令的指令编码,生成保护文件之后的方法流程图,该方法包括如下步骤:
步骤S702,接收指令集;
步骤S704,采用翻译器对指令集进行翻译,生成翻译文件,其中,翻译器为保护文件中的翻译器;其中,指令集包括:逻辑代码、编译器编译得到的编译代码、汇编语言或二进制文件。
在一种可选的实施例中,图10示出了一套基于二进制翻译器的系统框架示意图。如图10所示,在基于二进制翻译器的系统中,逻辑代码的字节码文件813并非通过编译,而是通过翻译得来,其中,翻译器617的输入可以是某个随机生成的字节码的指令集。翻译器617可以将虚拟机保护系统的基本框架所生成字节码翻译为另一套自动生成的指令集的字节码。翻译器的输入也可以是其它指令集的汇编语言或二进制文件,例如,采用ARM指令集的二进制文件。此外,翻译器617的输入还可以是编译器或其它工具生成的中间表示。
需要说明的是,基于二进制翻译器的系统框架是对基本框架的扩展,可用来支持编译器不支持的编程语言,也可用来避开编译而快速更新字节码,或在编译器无法获得受保护逻辑源代码时使用。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于可选实施例,所涉及的动作和模块并不一定是本发明所必须的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到根据上述实施例的方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质(如ROM/RAM、磁碟、光盘)中,包括若干指令用以使得一台终端设备(可以是手机,计算机,服务器,或者网络设备等)执行本发明各个实施例的方法。
实施例2
根据本发明实施例,还提供了一种用于实施上述生成指令集编码的装置,如图11所示,该装置包括:第一获取模块901和第一编码模块903。
第一获取模块901,用于获取指令集和随机数参数,其中,随机数参数为动态变化的数据。
在上述第一获取模块中,上述随机数参数可以是随机数种子,该随机数种子可以为二进制数据。
具体的,在如图6所示的根据指令的指令编码生成保护文件的示意图中,指令编码生成器605在获取指令集601和随机数参数603之后,根据随机数参数603对指令集601进行编码处理。
需要说明的是,由于上述随机数参数可以由用户直接给出或由随机数发生器产生,可以在虚拟机保护系统中进行处理,并且该随机数参数是随机变化的,而指令集由多条指令集合而成,每条指令有该指令的操作码和操作数组成,其中,操作码用于指明指令的操作类型,操作数用于指明指令的操作对象。因此,在上述第一获取模块中,通过定期或不定期地更新指令集以及随机数参数,使虚拟机指令集的更新速度大于黑客破解指令集的速度可以提高虚拟机的安全性。
第一编码模块903,用于基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;其中,随机数参数用于确定指令编码过程中操作码和操作数分别在指令编码中的分布。
在上述第一编码模块中,上述第一参数信息可用于指明或识别指令的操作类型,上述操作数可用于指明或识别指令的操作对象。具体的,可以通过图6所示的指令编码生成器605来对指令集601中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序,例如,操作码的比特位的位数可以小于操作码预定的比特位的位数,并且操作码的组成顺序可以不设置成由左至右的顺序,而是可以对其进行随机设置。又例如,指令的长度为m,即有m位比特表示一条指令,其中包括x位操作码和y位操作数,随机数参数可以随机为操作码和操作数分配比特位,只要m、x和y满足下式即可:
m≥x+y
需要说明的是,上述配置是自动且随机化的,用户可以通过改变指令编码生成器的随机数参数来生成不同的指令编码。
通过第一编码模块,可以保证指令集中的每条指令都具有独特的编码,从而可以实现对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果。
由上可知,通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,容易注意到的是,由于上述随机数参数是随机的、动态的变化,并且对指令集中的指令进行编码时也是根据随机数参数进行编码的,因此,生成的指令编码也是随机的,具有不确定性,因此,通过获取指令集和随机数参数,并根据随机数参数对指令集中的指令进行编码,最后的指令的指令编码,可以达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
此处需要说明的是,上述第一获取模块901和第一编码模块903对应于实施例1中的步骤S202至步骤S204,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
上述第一编码模块包括:二叉树生成模块和代码生成模块,其中,二叉树生成模块,用于基于随机数参数,将指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;代码生成模块,用于将指令集中的指令分别随机存储至二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的指令集代码,其中,每个非叶子节点与子节点之间的权重值也是随机生成的。
作为一种可选的实施例,上述指令编码可以用二叉树的形式表示,称该树为编码树。图4示出了一个包含5条指令的编码树,如图4所示,该编码树的5条指令分别为A、B、C、D、E,如图中的方形叶子节点所示;图中的每个圆形节点的数字代表一个比特位,每条连线上的数字为0或1,其中,每条连线上的数字为上述非叶子节点与子节点之间的权重值,例如,比特位标识为“3”的根节点的左分支上的权重值可以随机设置为“0”。在一种可选的实施例中,根据图4可以进行如下过程的编码:
首先检查指令的第3位,如果该位为0,则检查与标注为0的连线相连的第9位,否则检查与标注为1的连线相连的第4位,以此类推,直到检查到任意一条指令。需要说明的是,编码树中每一层的节点既可以检查相同的比特位,也可以检查不同的比特位,并且每个节点检查的比特位不能在此节点的父节点以及其他的祖先节点中出现。根据上述编码过程可知,A指令的操作码为001,该操作码的位为3、9、4。
需要说明的是,上述二叉树生成模块和代码生成模块可自动生成指令集的每条指令的操作码,然后用每条指令的剩余比特位来编码操作数。其中,只需要随机决定每个比特位的用法即可完成对操作数的编码。
在另一种可选的实施例中,如果指令集中的指令因操作码占用的比特位过多而无法有充足的比特位来对操作数进行编码,则需要重复在上述二叉树生成模块和代码生成模块中执行步骤S302至步骤S304,直到完成对操作数的编码为止。其中,通过调整随机数参数可以改变生成的指令编码。
此处需要说明的是,上述二叉树生成模块和代码生成模块对应于实施例1中的步骤S302至步骤S304,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
在上述生成指令集编码的装置中,第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序,第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令集编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为“11000”时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54位的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
可选的,上述生成指令集编码的装置还包括:文件生成模块,用于根据指令的指令编码,生成保护文件。其中,图6示出了指令集601和随机数参数603经过指令编码生成器605后生成的保护文件的示意图。如图6所示,保护文件至少包括如下对象的代码和配置文件:指令集文档607、汇编器609、反汇编器611、链接器613、解码器615、翻译器617。指令编码生成器根据随机数参数对指令集进行编码处理后可生成指令集文档,该文档可用来记录编码后的指令集;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成汇编器所需要的代码和配置文件,根据上述代码和配置文件,可生成汇编器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成反汇编器所需要的代码和配置文件,根据上述代码和配置文件,可生成反汇编器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成链接器所需要的代码和配置文件,根据上述代码和配置文件,可生成链接器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成解码器所需要的代码和配置文件,根据上述代码和配置文件,可生成解码器;指令集编码生成器对随机参数对指令集进行编码处理后,可得到生成翻译器所需要的代码和配置文件,根据上述代码和配置文件,可生成翻译器,该翻译器可以将一种指令集的二进制文件翻译成另一种指令集的二进制文件。
可选的,上述文件生成模块包括:代码接收模块和编译模块。其中,代码接收模块用于接收逻辑代码;编译模块用于采用编译器对逻辑代码进行编译,生成编译代码,其中,编译器至少包括:保护文件中的汇编器和链接器。
在一种可选的实施例中,指令编码生成器可以在虚拟机保护系统中应用,其中,虚拟机保护系统的基本系统框架示意图如图8(a)所示。图8(a)中的系统框架分为两部分:普通逻辑代码803经普通编译器编译805后与虚拟机保护执行器801链接形成应用程序807。需要保护的逻辑代码经过编译器811编译后形成字节码文件813,其中,字节码813采用指令编码生成器所自动生成的编码格式。在为不同应用和不同用户提供不同指令集的虚拟机保护执行器801之后,即使黑客破解了其中一套字节码的编码,也无法直接利用该信息破解其它虚拟机保护执行器801。不管是否被破解,用户都可以定时或不定时更新字节码文件813和虚拟机保护执行器801,从而使得黑客不得不反复消耗时间进行破解。
需要说明的是,编译器包含汇编器和链接器,并且汇编器和链接器均为基于前述的指令编码生成器生成的代码及配置文件所生成。
可选的,上述生成模块包括:载入模块,用于将编译代码载入对应的应用程序,其中,不同的应用程序载入不同的编译代码。
在一种可选的实施例中,如图8(b)所示,字节码文件可被动态装载入(如图8(b)中字节码文件813到应用程序的实线所示)或静态插入(如图8(b)中字节码文件813到应用程序807的虚线所示)应用程序。应用程序807在执行逻辑代码时,通过虚拟机保护执行器来801间接执行字节码的代码。间接执行的方式可以为但不限于解释执行。通过上述方法,黑客难以破解字节码文件所表示的核心逻辑,从而实现了对逻辑代码的保护。
需要说明的是,在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。针对不同的应用,或者同一个应用的不同版本,可以用指令集编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
此处需要说明的是,上述代码接收模块、编译模块和载入模块对应于实施例1中的步骤S502至步骤S506,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
可选的,上述文件生成模块还包括:指令集接收模块和翻译模块。其中,指令集接收模块,用于接收指令集;翻译模块,用于采用翻译器对指令集进行翻译,生成翻译文件,其中,翻译器为保护文件中的翻译器;其中,指令集包括:逻辑代码、编译器编译得到的编译代码、汇编语言或二进制文件。
在一种可选的实施例中,图10示出了一套基于二进制翻译器的系统框架示意图。如图10所示,在基于二进制翻译器的系统中,逻辑代码的字节码文件813并非通过编译,而是通过翻译得来,其中,翻译器617的输入可以是某个随机生成的字节码的指令集。翻译器617可以将虚拟机保护系统的基本框架所生成字节码翻译为另一套自动生成的指令集的字节码。翻译器617的输入也可以是其它指令集的汇编语言或二进制文件,例如,采用ARM指令集的二进制文件。此外,翻译器的输入还可以是编译器或其它工具生成的中间表示。
需要说明的是,基于二进制翻译器的系统框架是对基本框架的扩展,可用来支持编译器不支持的编程语言,也可用来避开编译而快速更新字节码,或在编译器无法获得受保护逻辑源代码时使用。
此处需要说明的是,上述指令集接收模块和翻译模块对应于实施例1中的步骤S702至步骤S704,两个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。需要说明的是,上述模块作为装置的一部分可以运行在实施例一提供的计算机终端10中。
实施例3
根据本发明实施例,还提供了一种如图12所示的基于指令集编码的应用保护方法。如图12所示,该方法包括:
步骤S1002,获取指令集和随机数参数,其中,随机数参数为动态变化的数据。
在上述步骤限定的方案中,上述随机数参数可以是随机数种子,该随机数种子可以为二进制数据。
具体的,在如图6所示的根据指令的指令编码生成保护文件的示意图中,指令编码生成器605在获取指令集601和随机数参数603之后,根据随机数参数603对指令集601进行编码处理。
需要说明的是,由于上述随机数参数可以由用户直接给出或由随机数发生器产生,可以在虚拟机保护系统中进行处理,并且该随机数参数是随机变化的,而指令集由多条指令集合而成,每条指令有该指令的操作码和操作数组成,其中,操作码用于指明指令的操作类型,操作数用于指明指令的操作对象。因此,在上述步骤中,通过定期或不定期地更新指令集以及随机数参数,使指令集的更新速度大于黑客破解指令集的速度可以提高虚拟机的安全性。
步骤S1004,基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
在上述步骤限定的方案中,上述第一参数信息可用于指明或识别指令的操作类型,上述操作数可用于指明或识别指令的操作对象。具体的,可以通过所示的指令编码生成器605来对指令集601中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序,例如,操作码的比特位的位数可以小于操作码预定的比特位的位数,并且操作码的组成顺序可以不设置成由左至右的顺序,而是可以对其进行随机设置。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令集编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为“11000”时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54位的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
需要说明的是,上述配置是自动且随机化的,用户可以通过改变指令编码生成器的随机数参数来生成不同的指令编码。上述第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序,上述第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
通过上述步骤,可以保证指令集中的每条指令都具有独特的编码,从而可以实现对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果。
步骤S1006,根据指令编码,生成安全编译器,其中,安全编译器用于将代码进行编译,生成嵌入至应用程序中的编译代码;如果执行器运行应用程序,则间接执行安全编译器编译得到的编译代码。
在上述步骤限定的方案中,指令编码生成器可以在虚拟机保护系统中应用,其中,虚拟机保护系统的基本系统框架示意图如图8(a)所示。图8(a)中的系统框架分为两部分:普通逻辑代码803经普通编译器编译805后与虚拟机保护执行器801链接形成应用程序807。需要保护的逻辑代码经过编译器811编译后形成字节码文件813,其中,字节码采用指令编码生成器所自动生成的编码格式。在为不同应用和不同用户提供不同指令集的虚拟机保护执行器801之后,即使黑客破解了其中一套字节码的编码,也无法直接利用该信息破解其它虚拟机保护执行器801。不管是否被破解,用户都可以定时或不定时更新字节码文件813和虚拟机保护执行器801,从而使得黑客不得不反复消耗时间进行破解。如图8(b)所示,字节码文件可被动态装载入(如图8(b)中字节码文件813到应用程序807的实线所示)或静态插入(如图8(b)中字节码文件813到应用程序807的虚线所示)应用程序。应用程序在执行逻辑代码时,通过虚拟机保护执行器801来间接执行字节码的代码。间接执行的方式可以为但不限于解释执行。
需要说明的是,编译器包含汇编器和链接器,并且汇编器和链接器均为基于前述的指令编码生成器生成的代码及配置文件所生成。在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。针对不同的应用,或者同一个应用的不同版本,可以用指令集编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
通过上述步骤,黑客难以破解字节码文件所表示的核心逻辑,从而实现了对逻辑代码的保护。
基于上述实施例中步骤S1002至步骤S1006所公开的方案,可以获知通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,然后根据指令编码,生成安全编译器,如果执行器运行应用程序,则间接执行安全编译器编译得到的编译代码。容易注意到的是,由于上述随机数参数是随机的、动态的变化,并且对指令集中的指令进行编码时也是根据随机数参数进行编码的,因此,生成的指令编码也是随机的,具有不确定性,因此,通过获取指令集和随机数参数,并根据随机数参数对指令集中的指令进行编码,最后得到指令的指令编码,可以达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
实施例4
根据本发明实施例,还提供了一种用于实施上述基于指令集编码的应用保护装置,如图13所示,该装置包括:第二获取模块1101、第二编码模块1103和第一生成模块1105。
第二获取模块,用于获取指令集和随机数参数,其中,随机数参数为动态变化的数据。
在上述第二获取模块中,上述随机数参数可以是随机数种子,该随机数种子可以为二进制数据。
具体的,在如图6所示的根据指令的指令编码生成保护文件的示意图中,指令编码生成器605在获取指令集601和随机数参数603之后,根据随机数参数603对指令集601进行编码处理。
需要说明的是,由于上述随机数参数可以由用户直接给出或由随机数发生器产生,可以在虚拟机保护系统中进行处理,并且该随机数参数是随机变化的,而指令集由多条指令集合而成,每条指令有该指令的操作码和操作数组成,其中,操作码用于指明指令的操作类型,操作数用于指明指令的操作对象。因此,在上述第二获取模块中,通过定期或不定期地更新指令集以及随机数参数,使指令集的更新速度大于黑客破解指令集的速度可以提高虚拟机的安全性。
第二编码模块,用于基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
在上述第二编码模块中,上述第一参数信息可用于指明或识别指令的操作类型,上述操作数可用于指明或识别指令的操作对象。具体的,可以通过图6所示的指令编码生成器605来对指令集601中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序,例如,操作码的比特位的位数可以小于操作码预定的比特位的位数,并且操作码的组成顺序可以不设置成由左至右的顺序,而是可以对其进行随机设置。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令集编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为“11000”时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54位的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
需要说明的是,上述配置是自动且随机化的,用户可以通过改变指令编码生成器的随机数参数来生成不同的指令编码。上述第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序,上述第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
通过上述第二编码模块,可以保证指令集中的每条指令都具有独特的编码,从而可以实现对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果。
第一生成模块,用于根据指令编码,生成安全编译器,其中,安全编译器用于将代码进行编译,生成嵌入至应用程序中的编译代码;如果执行器运行应用程序,则间接执行安全编译器编译得到的编译代码。
在上述第一生成模块中,指令编码生成器可以在虚拟机保护系统中应用,其中,虚拟机保护系统的基本系统框架示意图如图8(a)所示。图8(a)中的系统框架分为两部分:普通逻辑代码803经普通编译器805编译后与虚拟机保护执行器801链接形成应用程序。需要保护的逻辑代码809经过编译器811编译后形成字节码文件,其中,字节码采用指令编码生成器所自动生成的编码格式。在为不同应用和不同用户提供不同指令集的虚拟机保护执行器之后,即使黑客破解了其中一套字节码的编码,也无法直接利用该信息破解其它虚拟机保护执行器。不管是否被破解,用户都可以定时或不定时更新字节码文件和虚拟机保护执行器,从而使得黑客不得不反复消耗时间进行破解。如图8(b)所示,字节码文件813可被动态装载入(如图8(b)中字节码文件813到应用程序807的实线所示)或静态插入(如图8(b)中字节码文件813到应用程序807的虚线所示)应用程序。应用程序在执行逻辑代码时,通过虚拟机保护执行器来间接执行字节码的代码。间接执行的方式可以为但不限于解释执行。
需要说明的是,编译器包含汇编器和链接器,并且汇编器和链接器均为基于前述的指令编码生成器生成的代码及配置文件所生成。在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。针对不同的应用,或者同一个应用的不同版本,可以用指令集编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
通过上述第一生成模块,黑客难以破解字节码文件所表示的核心逻辑,从而实现了对逻辑代码的保护。
由上可知,通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,然后根据指令编码,生成安全编译器,如果执行器运行应用程序,则间接执行安全编译器编译得到的编译代码。容易注意到的是,由于上述随机数参数是随机的、动态的变化,并且对指令集中的指令进行编码时也是根据随机数参数进行编码的,因此,生成的指令编码也是随机的,具有不确定性,因此,通过获取指令集和随机数参数,并根据随机数参数对指令集中的指令进行编码,最后得到指令的指令编码,可以达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
此处需要说明的是,上述第二获取模块1101、第二编码模块1103和第一生成模块1105对应于实施例3中的步骤S1102至步骤S1106,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。
实施例5
根据本发明实施例,还提供了一种如图14所示的基于指令集编码的应用保护方法。如图14所示,该方法包括:
步骤S1202,获取指令集和随机数参数,其中,随机数参数为动态变化的数据。
在上述步骤限定的方案中,上述随机数参数可以是随机数种子,该随机数种子可以为二进制数据。
具体的,在如所示的根据指令的指令编码生成保护文件的示意图中,指令编码生成器605在获取指令集601和随机数参数605之后,根据随机数参数603对指令集601进行编码处理。
需要说明的是,由于上述随机数参数可以由用户直接给出或由随机数发生器产生,可以在虚拟机保护系统中进行处理,并且该随机数参数是随机变化的,而指令集由多条指令集合而成,每条指令有该指令的操作码和操作数组成,其中,操作码用于指明指令的操作类型,操作数用于指明指令的操作对象。因此,在上述步骤中,通过定期或不定期地更新指令集以及随机数参数,使指令集的更新速度大于黑客破解指令集的速度可以提高虚拟机的安全性。
步骤S1204,基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
在上述步骤限定的方案中,上述第一参数信息可用于指明或识别指令的操作类型,上述操作数可用于指明或识别指令的操作对象。具体的,可以通过图6所示的指令编码生成器605来对指令集601中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序,例如,操作码的比特位的位数可以小于操作码预定的比特位的位数,并且操作码的组成顺序可以不设置成由左至右的顺序,而是可以对其进行随机设置。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令集编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为“11000”时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54位的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
需要说明的是,上述配置是自动且随机化的,用户可以通过改变指令编码生成器的随机数参数来生成不同的指令编码。上述第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序,上述第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
通过上述步骤,可以保证指令集中的每条指令都具有独特的编码,从而可以实现对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果。
步骤S1206,根据指令编码,生成安全翻译器,其中,安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行应用程序,则间接执行安全翻译器翻译得到的翻译代码。
在一种可选的实施例中,图10示出了一套基于二进制翻译器的系统框架示意图。如图10所示,在基于二进制翻译器的系统中,逻辑代码的字节码文件并非通过编译,而是通过翻译得来,其中,翻译器的输入可以是某个随机生成的字节码的指令集。翻译器可以将虚拟机保护系统的基本框架所生成字节码翻译为另一套自动生成的指令集的字节码。翻译器的输入也可以是其它指令集的汇编语言或二进制文件,例如,采用ARM指令集的二进制文件。此外,翻译器的输入还可以是编译器或其它工具生成的中间表示。
需要说明的是,基于二进制翻译器的系统框架是对基本框架的扩展,可用来支持编译器不支持的编程语言,也可用来避开编译而快速更新字节码,或在编译器无法获得受保护逻辑源代码时使用。在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。针对不同的应用,或者同一个应用的不同版本,可以用指令编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
基于上述实施例中步骤S1202至步骤S1206所公开的方案,可以获知通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,然后根据指令编码,生成安全翻译器,其中,安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行应用程序,则间接执行安全翻译器翻译得到的翻译代码。容易注意到的是,由于上述随机数参数是随机的、动态的变化,并且对指令集中的指令进行编码时也是根据随机数参数进行编码的,因此,生成的指令编码也是随机的,具有不确定性,因此,通过获取指令集和随机数参数,并根据随机数参数对指令集中的指令进行编码,最后得到指令的指令编码,可以达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
实施例6
根据本发明实施例,还提供了一种用于实施上述基于指令集编码的应用保护装置,如图15所示,该装置包括:第三获取模块1301、第三编码模块1303和第二生成模块1305。
第三获取模块1301,用于获取指令集和随机数参数,其中,随机数参数为动态变化的数据。
在上述第三获取模块1301中,上述随机数参数可以是随机数种子,该随机数种子可以为二进制数据。
具体的,在如图6所示的根据指令的指令编码生成保护文件的示意图中,指令编码生成器605在获取指令集601和随机数参数603之后,根据随机数参数603对指令集601进行编码处理。
需要说明的是,由于上述随机数参数可以由用户直接给出或由随机数发生器产生,可以在虚拟机保护系统中进行处理,并且该随机数参数是随机变化的,而指令集由多条指令集合而成,每条指令有该指令的操作码和操作数组成,其中,操作码用于指明指令的操作类型,操作数用于指明指令的操作对象。因此,在上述第三获取模块1301中,通过定期或不定期地更新指令集以及随机数参数,使虚拟机指令集的更新速度大于黑客破解指令集的速度可以提高虚拟机的安全性。
第三编码模块1303,基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
在上述第三编码模块1303中,上述第一参数信息可用于指明或识别指令的操作类型,上述操作数可用于指明或识别指令的操作对象。具体的,可以通过图6所示的指令编码生成器605来对指令集601中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序,例如,操作码的比特位的位数可以小于操作码预定的比特位的位数,并且操作码的组成顺序可以不设置成由左至右的顺序,而是可以对其进行随机设置。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为“11000”时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54比特的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
需要说明的是,上述配置是自动且随机化的,用户可以通过改变指令编码生成器的随机数参数来生成不同的指令编码。上述第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序,上述第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
通过上述第三编码模块1303,可以保证指令集中的每条指令都具有独特的编码,从而可以实现对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果。
第二生成模块1305,根据指令编码,生成安全翻译器,其中,安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行应用程序,则间接执行安全翻译器翻译得到的翻译代码。
在一种可选的实施例中,图10示出了一套基于二进制翻译器的系统框架示意图。如图10所示,在基于二进制翻译器的系统中,逻辑代码的字节码文件813并非通过编译,而是通过翻译得来,其中,翻译器617的输入可以是某个随机生成的字节码的指令集。翻译器617可以虚拟机保护系统的基本框架所生成字节码翻译为另一套自动生成的指令集的字节码。翻译器617的输入也可以是其它指令集的汇编语言或二进制文件,例如,采用ARM指令集的二进制文件。此外,翻译器的输入还可以是编译器或其它工具生成的中间表示。
需要说明的是,基于二进制翻译器的系统框架是对基本框架的扩展,可用来支持编译器不支持的编程语言,也可用来避开编译而快速更新字节码,或在编译器无法获得受保护逻辑源代码时使用。在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。针对不同的应用,或者同一个应用的不同版本,可以用指令集编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
由上可知,获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,然后根据指令编码,生成安全翻译器,其中,安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行应用程序,则间接执行安全翻译器翻译得到的翻译代码。容易注意到的是,由于上述随机数参数是随机的、动态的变化,并且对指令集中的指令进行编码时也是根据随机数参数进行编码的,因此,生成的指令编码也是随机的,具有不确定性,因此,通过获取指令集和随机数参数,并根据随机数参数对指令集中的指令进行编码,最后得到指令的指令编码,可以达到了提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
此处需要说明的是,上述第三获取模块1301、第三编码模块1303和第二生成模块1305对应于实施例5中的步骤S1202至步骤S1206,三个模块与对应的步骤所实现的实例和应用场景相同,但不限于上述实施例一所公开的内容。
实施例7
根据本发明实施例,还提供了一种用于实施上述基于指令集编码的应用保护系统,如图16所示,该系统包括:第一编译器1401、安全编译器1403和第一执行器1405。
第一编译器1401,用于将第一代码进行编译,生成应用程序。
在上述第一编译器1401中,上述第一代码为普通逻辑代码。具体的,普通逻辑代码经普通编译器编译后与虚拟机保护执行器链接形成应用程序。
安全编译器1403,用于将第二代码进行编译,生成嵌入至应用程序中的编译代码,其中,安全编译器根据指令编码而生成,指令编码为基于随机数参数对预定指令集进行编码而得到,随机数参数为动态变化的数据。
在上述安全编译器1403中,上述第二代码为核心逻辑代码。具体的,如图8(a)所示的虚拟机保护系统的基本系统框架示意图,由图8(a)可知,该框架分为普通逻辑代码803经普通编译器805编译后与虚拟机保护执行器801链接形成应用程序807(即上述第一编译器将第一代码进行编译,并生成应用程序的过程),以及需要保护的逻辑代码809经过编译器编译811后形成字节码文件813。上述编译器包含汇编器和链接器,并且上述汇编器以及链接器均是基于指令编码生成器生成的代码以及配置文件所生成。
需要说明的是,上述指令编码生成器根据随机数参数对指令集中的全部指令或者部分指令进行编码,并得到对该指令集中的全部指令或部分指令进行编码后的指令编码。其中,在对指令集中的指令进行编码的过程中,可以为操作码以及操作数灵活地配置比特位,并配置这些比特位的顺序。
第一执行器1405,用于在运行应用程序之后,间接执行编译代码。
在一种可选的实施例中,上述第一执行器可以为虚拟机保护执行器,如图8(b)所示,字节码文件813可被动态装载入(如图8(b)中字节码文件813到应用程序807的实线所示)或静态插入(如图8(b)中字节码文件813到应用程序807的虚线所示)应用程序。应用程序在执行逻辑代码时,通过虚拟机保护执行器来间接执行字节码的代码。间接执行的方式可以为但不限于解释执行。通过上述方法,黑客难以破解字节码文件所表示的核心逻辑,从而实现了对逻辑代码的保护。
需要说明的是,在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。
针对不同的应用,或者同一个应用的不同版本,可以用指令编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
由上可知,第一编译器可对第一代码进行编译,并生成应用程序;安全编译器对第二代码进行编译,并生成嵌入至应用程序中的编译代码;第一执行器在运行应用程序之后,间接执行编译代码。通过上述三个模块可以完成对逻辑代码的字节码文件进行翻译,可以达到提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
可选的,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;其中,第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序;第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令集编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为11000时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54位的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
实施例8
根据本发明实施例,还提供了一种用于实施上述基于指令集编码的应用保护系统,如图17所示,该系统包括:第二编译器1501、安全翻译器1503和第二执行器1505。
第二编译器1501,用于将第一代码进行编译,生成应用程序。
在上述第二编译器1501中,上述第一代码为普通逻辑代码。具体的,普通逻辑代码经普通编译器编译后与虚拟机保护执行器链接形成应用程序。
安全翻译器1503,用于将第二代码进行翻译,生成嵌入至应用程序中的翻译代码,其中,安全翻译器根据指令编码而生成,指令编码为基于随机数参数对预定指令集进行编码而得到,随机数参数为动态变化的数据。
在上述安全翻译器1503中,上述第二代码为核心逻辑代码。图10示出了一套基于二进制翻译器的系统框架示意图,在基于二进制翻译器的系统中,逻辑代码的字节码文件并非通过编译,而是通过翻译得来,其中,翻译器的输入可以是某个随机生成的字节码的指令集。翻译器可以将虚拟机保护系统的基本框架所生成字节码翻译为另一套自动生成的指令集的字节码。翻译器的输入也可以是其它指令集的汇编语言或二进制文件,例如,采用ARM指令集的二进制文件。此外,翻译器的输入还可以是编译器或其它工具生成的中间表示。
需要说明的是,基于二进制翻译器的系统框架是对基本框架的扩展,可用来支持编译器不支持的编程语言,也可用来避开编译而快速更新字节码,或在编译器无法获得受保护逻辑源代码时使用。
第二执行器1505,用于在运行应用程序之后,间接执行编译代码。
在一种可选的实施例中,如图10所示,字节码文件可被动态装载入(如图10中字节码到应用的实线所示)或静态插入(如图10中字节码到应用的虚线所示)应用程序。应用程序在执行逻辑代码时,通过虚拟机保护执行器来间接执行字节码的代码。间接执行的方式可以为但不限于解释执行。通过上述方法,黑客难以破解字节码文件所表示的核心逻辑,从而实现了对逻辑代码的保护。
由上可知,第二编译器对第一代码进行编译,并生成应用程序;安全翻译器对第二代码进行翻译,并生成嵌入至应用程序中的翻译代码;第二执行器在运行应用程序之后,间接执行编译代码,通过上述模块可以完成对逻辑代码的字节码文件进行翻译,可以达到提高虚拟机安全性的目的,从而实现了对虚拟机指令集自动进行随机编码,增加黑客破解虚拟机指令集的时间成本的技术效果,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
需要说明的是,在虚拟机保护系统中,只有虚拟机保护执行器随应用程序部署到应用所安装的设备上,其它工具,如编译器、二进制翻译器等都只存在开发者的开发平台上。
针对不同的应用,或者同一个应用的不同版本,可以用指令集编码生成器生成一套独立的编译器等工具,每套工具的指令编码都不同。每个应用所使用的字节码用独立的编译器等工具编译产生,由此,可以保证即使一个应用的字节码被破解,其它应用所使用的字节码因编码不同,仍然能受到保护,从而提高了虚拟机的安全性能。
可选的,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息;其中,第一参数信息至少包括:操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序;第二参数信息至少包括:操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
在一种可选的实施例中,上述操作数的数量可以为一个或多个。图5示出了指令集编码生成器生成的指令集的示意图,其中,图5(a)为只包含一个操作数的指令集的示意图,图5(b)为包含三个操作数的指令集的示意图。如图5(a)所示,CALL指令用比特位0、7、5、4、8作为其操作码(如图中的OPCODE一栏所示),当上述比特位组合出的值为“01000”时,该指令即为一个CALL指令。CALL指令有一个24位的操作数,这个操作数的值由比特位23、1、2、13……21、27所组成。如图5(b)所示,另一条指令为ST。该指令的操作码由比特位0、8、6、18、11所组成,当这些比特位所组成的值为11000时,该指令即为一条ST指令。ST指令有三个操作数,包括两个5位的GPR(General purpose register,通用寄存器)和一个16位的操作数。
在一种可选的实施例中,操作码的比特位的位数小于等于预定长度,其中,预定长度为指令的长度减去操作数的长度值。例如,在一个为64位的指令中,其包含54比特的操作数,则上述预定长度为10位。如果CALL指令用4位即可表示,则操作码的比特位的位数为4,其余的6位在进行作为校验位或者随机分配数据。需要说明的是,在对编码之后的操作码进行解码时,只解析有效地操作码,多出的比特位(即无效的操作码)不进行任何处理。由上可知,由于操作码的比特位的有效位数是不固定的,因而,可以增加了黑客破解虚拟机指令集的难度,提高了虚拟机的安全性。
实施例9
本发明的实施例可以提供一种计算机终端,该计算机终端可以是计算机终端群中的任意一个计算机终端设备。可选地,在本实施例中,上述计算机终端也可以替换为移动终端等终端设备。
可选地,在本实施例中,上述计算机终端可以位于计算机网络的多个网络设备中的至少一个网络设备。
在本实施例中,上述计算机终端可以执行应用程序的漏洞检测方法中以下步骤的程序代码:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
可选地,图18是根据本发明实施例的一种计算机终端的结构框图。如图18所示,该计算机终端10可以包括:一个或多个(图中仅示出一个)处理器1801和存储器1803。
其中,存储器1803可用于存储软件程序以及模块,如本发明实施例中的安全漏洞检测方法和装置对应的程序指令/模块,处理器通过运行存储在存储器内的软件程序以及模块,从而执行各种功能应用以及数据处理,即实现上述的系统漏洞攻击的检测方法。存储器可包括高速随机存储器,还可以包括非易失性存储器,如一个或者多个磁性存储装置、闪存、或者其他非易失性固态存储器。在一些实例中,存储器可进一步包括相对于处理器远程设置的存储器,这些远程存储器可以通过网络连接至终端10。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
处理器1801可以通过传输装置调用存储器存储的信息及应用程序,以执行下述步骤:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
可选的,上述处理器1801还可以执行如下步骤的程序代码:根据指令的指令编码,生成保护文件,其中,保护文件至少包括如下对象的代码和配置文件:指令集文档、汇编器、反汇编器、链接器、解码器、翻译器。
可选的,上述处理器1801还可以执行如下步骤的程序代码:接收逻辑代码;采用编译器对逻辑代码进行编译,生成编译代码,其中,编译器至少包括:保护文件中的汇编器和链接器。
可选的,上述处理器1801还可以执行如下步骤的程序代码:将编译代码载入对应的应用程序,其中,不同的应用程序载入不同的编译代码。
可选的,上述处理器1801还可以执行如下步骤的程序代码:接收指令集;采用翻译器对指令集进行翻译,生成翻译文件,其中,翻译器为保护文件中的翻译器;其中,指令集包括:逻辑代码、编译器编译得到的编译代码、汇编语言或二进制文件。
采用本发明实施例,提供了一种生成指令集编码的方案。通过获取指令集和随机数参数,然后根据随机数参数对指令集中的指令进行编码,并获取指令的指令编码,从而达到了提高虚拟机安全性的目的,进而解决了现有技术中虚拟机指令集易被黑客破解以及指令集破解后造成虚拟机安全性能差的技术问题。
本领域普通技术人员可以理解,图18所示的结构仅为示意,计算机终端也可以是智能手机(如Android手机、iOS手机等)、平板电脑、掌声电脑以及移动互联网设备(MobileInternet Devices,MID)、PAD等终端设备。图18其并不对上述电子装置的结构造成限定。例如,计算机终端10还可包括比图18中所示更多或者更少的组件(如网络接口、显示装置等),或者具有与图18所示不同的配置。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令终端设备相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:闪存盘、只读存储器(Read-Only Memory,ROM)、随机存取器(RandomAccess Memory,RAM)、磁盘或光盘等。
实施例10
本发明的实施例还提供了一种存储介质。可选地,在本实施例中,上述存储介质可以用于保存上述实施例一所提供的生成指令集编码的方法所执行的程序代码。
可选地,在本实施例中,上述存储介质可以位于计算机网络中计算机终端群中的任意一个计算机终端中,或者位于移动终端群中的任意一个移动终端中。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:获取指令集和随机数参数,其中,随机数参数为动态变化的数据;基于随机数参数对指令集中的指令进行编码,获取指令的指令编码,其中,指令编码包括:用于表征指令的操作码的第一参数信息,以及用于表征指令的操作数的第二参数信息。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:根据指令的指令编码,生成保护文件,其中,保护文件至少包括如下对象的代码和配置文件:指令集文档、汇编器、反汇编器、链接器、解码器、翻译器。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收逻辑代码;采用编译器对逻辑代码进行编译,生成编译代码,其中,编译器至少包括:保护文件中的汇编器和链接器。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:将编译代码载入对应的应用程序,其中,不同的应用程序载入不同的编译代码。
可选地,在本实施例中,存储介质被设置为存储用于执行以下步骤的程序代码:接收指令集;采用翻译器对指令集进行翻译,生成翻译文件,其中,翻译器为保护文件中的翻译器;其中,指令集包括:逻辑代码、编译器编译得到的编译代码、汇编语言或二进制文件。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
在本发明的上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其他实施例的相关描述。
在本申请所提供的几个实施例中,应该理解到,所揭露的技术内容,可通过其它的方式实现。其中,以上所描述的装置实施例仅仅是示意性的,例如单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,单元或模块的间接耦合或通信连接,可以是电性或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可为个人计算机、服务器或者网络设备等)执行本发明各个实施例方法的全部或部分步骤。而前述的存储介质包括:U盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、移动硬盘、磁碟或者光盘等各种可以存储程序代码的介质。
以上仅是本发明的可选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (16)
1.一种生成指令集编码的方法,其特征在于,包括:
获取指令集和随机数参数,其中,所述随机数参数为动态变化的数据;
基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,其中,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;
其中,所述随机数参数用于确定所述指令编码过程中所述操作码和所述操作数分别在所述指令编码中的分布;
其中,基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,包括:基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
2.根据权利要求1所述的方法,其特征在于,
所述第一参数信息至少包括:所述操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序;
所述第二参数信息至少包括:所述操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
3.根据权利要求1所述的方法,其特征在于,所述操作码的比特位的位数小于等于预定长度,其中,所述预定长度为所述指令的长度减去所述操作数的长度值。
4.根据权利要求1至3中任意一项所述的方法,其特征在于,在获取所述指令的指令编码之后,所述方法还包括:
根据所述指令的指令编码,生成保护文件,其中,所述保护文件至少包括如下对象的代码和配置文件:指令集文档、汇编器、反汇编器、链接器、解码器、翻译器。
5.根据权利要求4所述的方法,其特征在于,在根据所述指令的指令编码,生成保护文件之后,所述方法还包括:
接收逻辑代码;
采用编译器对所述逻辑代码进行编译,生成编译代码,其中,所述编译器至少包括:所述保护文件中的所述汇编器和所述链接器。
6.根据权利要求5所述的方法,其特征在于,在采用编译器对所述逻辑代码进行编译,生成编译代码之后,所述方法还包括:
将所述编译代码载入对应的应用程序,其中,不同的应用程序载入不同的编译代码。
7.根据权利要求4所述的方法,其特征在于,在根据所述指令的指令编码,生成保护文件之后,所述方法还包括:
接收所述指令集;
采用所述翻译器对所述指令集进行翻译,生成翻译文件,其中,所述翻译器为所述保护文件中的所述翻译器;
其中,所述指令集包括:逻辑代码、编译器编译得到的编译代码、汇编语言或二进制文件。
8.一种生成指令集编码的装置,其特征在于,包括:
第一获取模块,用于获取指令集和随机数参数,其中,所述随机数参数为动态变化的数据;
第一编码模块,用于基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,其中,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;
其中,所述随机数参数用于确定所述指令编码过程中所述操作码和所述操作数分别在所述指令编码中的分布;
其中,所述第一编码模块包括:二叉树生成模块,用于基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;代码生成模块,用于将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
9.一种基于指令集编码的应用保护方法,其特征在于,包括:
获取指令集和随机数参数,其中,所述随机数参数为动态变化的数据;
基于所述随机数参数对所述指令集中的指令进行编码,获取指令的指令编码,其中,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;
根据所述指令编码,生成安全编译器,其中,所述安全编译器用于将代码进行编译,生成嵌入至应用程序中的编译代码;
如果执行器运行所述应用程序,则间接执行所述安全编译器编译得到的编译代码;
其中,基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,包括:基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
10.一种基于指令集编码的应用保护装置,其特征在于,包括:
第二获取模块,用于获取指令集和随机数参数,其中,所述随机数参数为动态变化的数据;
第二编码模块,用于基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,其中,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;
第一生成模块,用于根据所述指令编码,生成安全编译器,其中,所述安全编译器用于将代码进行编译,生成嵌入至应用程序中的编译代码;如果执行器运行所述应用程序,则间接执行所述安全编译器编译得到的编译代码;
其中,所述装置还用于基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
11.一种基于指令集编码的应用保护方法,其特征在于,包括:
获取指令集和随机数参数,其中,所述随机数参数为动态变化的数据;
基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,其中,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;
根据所述指令编码,生成安全翻译器,其中,所述安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;
如果执行器运行所述应用程序,则间接执行所述安全翻译器翻译得到的翻译代码;
其中,基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,包括:基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
12.一种基于指令集编码的应用保护装置,其特征在于,包括:
第三获取模块,用于获取指令集和随机数参数,其中,所述随机数参数为动态变化的数据;
第三编码模块,基于所述随机数参数对所述指令集中的指令进行编码,获取所述指令的指令编码,其中,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;
第二生成模块,根据所述指令编码,生成安全翻译器,其中,所述安全翻译器用于将代码进行翻译,生成嵌入至应用程序中的翻译代码;如果执行器运行所述应用程序,则间接执行所述安全翻译器翻译得到的翻译代码;
其中,所述装置还用于基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
13.一种基于指令集编码的应用保护系统,其特征在于,包括:
第一编译器,用于将第一代码进行编译,生成应用程序;
安全编译器,用于将第二代码进行编译,生成嵌入至所述应用程序中的编译代码,其中,所述安全编译器根据指令编码而生成,所述指令编码为基于随机数参数对预定指令集进行编码而得到,所述随机数参数为动态变化的数据;
第一执行器,用于在运行所述应用程序之后,间接执行所述编译代码;
其中,所述系统还用于基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
14.根据权利要求13所述的系统,其特征在于,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;其中,
所述第一参数信息至少包括:所述操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序;
所述第二参数信息至少包括:所述操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
15.一种基于指令集编码的应用保护系统,其特征在于,包括:
第二编译器,用于将第一代码进行编译,生成应用程序;
安全翻译器,用于将第二代码进行翻译,生成嵌入至所述应用程序中的翻译代码,其中,所述安全翻译器根据指令编码而生成,所述指令编码为基于随机数参数对预定指令集进行编码而得到,所述随机数参数为动态变化的数据;
第二执行器,用于在运行所述应用程序之后,间接执行编译代码;
其中,所述系统还用于基于所述随机数参数,将所述指令集中的指令进行二叉树处理,生成包含了n个叶子节点的二叉树;将所述指令集中的指令分别随机存储至所述二叉树的叶子节点上,并随机确定每个非叶子节点的比特位,得到编码后的所述指令编码,其中,所述每个非叶子节点与子节点之间的权重值也是随机生成的。
16.根据权利要求15所述的系统,其特征在于,所述指令编码包括:用于表征所述指令的操作码的第一参数信息,以及用于表征所述指令的操作数的第二参数信息;其中,
所述第一参数信息至少包括:所述操作码的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序;
所述第二参数信息至少包括:所述操作数的比特位的位数、每个比特位的位置标识和每个比特位的组成顺序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611075913.5A CN108121565B (zh) | 2016-11-28 | 2016-11-28 | 生成指令集编码的方法、装置和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611075913.5A CN108121565B (zh) | 2016-11-28 | 2016-11-28 | 生成指令集编码的方法、装置和系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108121565A CN108121565A (zh) | 2018-06-05 |
CN108121565B true CN108121565B (zh) | 2022-02-18 |
Family
ID=62225970
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611075913.5A Active CN108121565B (zh) | 2016-11-28 | 2016-11-28 | 生成指令集编码的方法、装置和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108121565B (zh) |
Families Citing this family (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110569065B (zh) * | 2019-07-24 | 2021-08-17 | 中国科学院信息工程研究所 | 基于域填充的处理器指令编码自动生成方法及装置 |
CN111176785B (zh) * | 2019-12-02 | 2023-08-29 | 东巽科技(北京)有限公司 | 一种基于操作链接的机器指令码取词方法 |
CN111661197B (zh) * | 2020-06-08 | 2022-12-02 | 创铭智能信息科技(常州)有限公司 | 一种agv指令设置系统、方法、计算机设备及其存储介质 |
CN111475868B (zh) * | 2020-06-19 | 2020-10-02 | 南京芯驰半导体科技有限公司 | 适用于功能和信息安全芯片的cpu指令保护方法及系统 |
CN115048623A (zh) * | 2022-04-01 | 2022-09-13 | 上海任意门科技有限公司 | 用于加密代码的方法、计算设备和存储介质 |
CN115686631B (zh) * | 2022-11-07 | 2023-08-29 | 合芯科技有限公司 | 一种基于知识基的随机指令生成方法、装置及存储介质 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN104025042A (zh) * | 2011-12-30 | 2014-09-03 | 英特尔公司 | 编码以增加指令集密度 |
CN105653790A (zh) * | 2015-12-29 | 2016-06-08 | 东南大学—无锡集成电路技术研究所 | 一种基于人工神经网络的乱序处理器Cache访存性能评估方法 |
CN105814846A (zh) * | 2013-12-17 | 2016-07-27 | 华为技术有限公司 | 网络地址查询的前缀树阶段平衡 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7793072B2 (en) * | 2003-10-31 | 2010-09-07 | International Business Machines Corporation | Vector execution unit to process a vector instruction by executing a first operation on a first set of operands and a second operation on a second set of operands |
US20070266225A1 (en) * | 2006-05-09 | 2007-11-15 | Ko Tak K V | Microcontroller unit |
CN102141903B (zh) * | 2011-03-22 | 2014-02-12 | 杭州中天微系统有限公司 | 用于16/32位混合指令的对称编码装置与译码装置 |
CN105046117A (zh) * | 2015-06-30 | 2015-11-11 | 西北大学 | 一种具有指令集随机化的代码虚拟化软件保护系统 |
CN105279399A (zh) * | 2015-10-30 | 2016-01-27 | 百度在线网络技术(北京)有限公司 | 应用防破解方法和装置 |
-
2016
- 2016-11-28 CN CN201611075913.5A patent/CN108121565B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104025042A (zh) * | 2011-12-30 | 2014-09-03 | 英特尔公司 | 编码以增加指令集密度 |
CN103645986A (zh) * | 2013-11-29 | 2014-03-19 | 北京广利核系统工程有限公司 | 一种编译器的可视化语法树的生成方法和重构方法 |
CN105814846A (zh) * | 2013-12-17 | 2016-07-27 | 华为技术有限公司 | 网络地址查询的前缀树阶段平衡 |
CN105653790A (zh) * | 2015-12-29 | 2016-06-08 | 东南大学—无锡集成电路技术研究所 | 一种基于人工神经网络的乱序处理器Cache访存性能评估方法 |
Non-Patent Citations (1)
Title |
---|
基于虚拟机的软件多样性研究与应用;杨朕;《中国优秀硕士论文电子期刊网 信息科技辑》;20111130;第1-62页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108121565A (zh) | 2018-06-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108121565B (zh) | 生成指令集编码的方法、装置和系统 | |
CN108345773B (zh) | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 | |
US9229695B2 (en) | Usage of TOC register as application register | |
CN102132289B (zh) | 用于代码迷惑的方法及设备 | |
CN110825363B (zh) | 智能合约获取方法、装置、电子设备及存储介质 | |
CN109948308A (zh) | 代码安全保护方法、装置、电子设备和计算机可读存储介质 | |
US20170371635A1 (en) | System, method and computer readable medium for space-efficient binary rewriting | |
CN108537012B (zh) | 基于变量和代码执行顺序的源代码混淆方法及装置 | |
CN106599627A (zh) | 基于虚拟机保护应用安全的方法及装置 | |
CN114089975B (zh) | 计算软件的扩展方法、装置、非易失性存储介质及处理器 | |
CN110825386A (zh) | 代码的编译方法和装置、存储介质 | |
CN106055375A (zh) | 应用程序安装方法及装置 | |
CN110059456A (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN106960141A (zh) | 虚拟机指令的编码、解码方法及装置、虚拟机保护系统 | |
CN105404794A (zh) | Java应用软件的保护方法和装置 | |
CN110210211A (zh) | 一种数据保护的方法和计算设备 | |
CN112732321A (zh) | 一种固件修改方法、装置、计算机可读存储介质和设备 | |
EP2937803B1 (en) | Control flow flattening for code obfuscation where the next block calculation needs run-time information | |
CN105391514B (zh) | 字符编码解码方法及装置 | |
CN112835323A (zh) | 可编程逻辑控制语言编译方法及装置 | |
CN106960138B (zh) | 虚拟机指令的校验方法及装置、系统 | |
CN111190604B (zh) | 一种安卓应用内存混淆方法、装置、电子设备及介质 | |
CN103379145A (zh) | 信息处理的方法、设备和系统 | |
CN108021790B (zh) | 文件保护方法、装置、计算设备及计算机存储介质 | |
CN104536887A (zh) | 通讯数据检测方法和装置 |
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 |