CN112114933A - 应用程序保护方法、电子设备和存储介质 - Google Patents
应用程序保护方法、电子设备和存储介质 Download PDFInfo
- Publication number
- CN112114933A CN112114933A CN202010820860.5A CN202010820860A CN112114933A CN 112114933 A CN112114933 A CN 112114933A CN 202010820860 A CN202010820860 A CN 202010820860A CN 112114933 A CN112114933 A CN 112114933A
- Authority
- CN
- China
- Prior art keywords
- instruction
- virtual machine
- register
- intermediate language
- file
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 62
- 238000006243 chemical reaction Methods 0.000 claims abstract description 8
- 230000006870 function Effects 0.000 claims description 33
- 238000013507 mapping Methods 0.000 claims description 13
- 238000004590 computer program Methods 0.000 claims description 11
- 238000004458 analytical method Methods 0.000 claims description 7
- 238000012795 verification Methods 0.000 claims description 4
- 230000008569 process Effects 0.000 description 17
- 238000010586 diagram Methods 0.000 description 9
- 238000005516 engineering process Methods 0.000 description 7
- 238000004891 communication Methods 0.000 description 6
- 238000004364 calculation method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000008901 benefit Effects 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000011161 development Methods 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 238000011084 recovery Methods 0.000 description 2
- 238000004422 calculation algorithm Methods 0.000 description 1
- 238000005538 encapsulation Methods 0.000 description 1
- 238000010801 machine learning Methods 0.000 description 1
- 230000007246 mechanism Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000002035 prolonged effect Effects 0.000 description 1
- 238000005728 strengthening Methods 0.000 description 1
- 238000006467 substitution reaction Methods 0.000 description 1
- 238000012546 transfer Methods 0.000 description 1
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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
-
- 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/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
- G06F9/45533—Hypervisors; Virtual machine monitors
- G06F9/45558—Hypervisor-specific management and integration aspects
- G06F2009/45583—Memory management, e.g. access or allocation
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)
Abstract
本发明实施例提供了一种应用程序保护方法、电子设备及存储介质,该方法包括:确定源文件,根据源文件生成对应的中间语言文件;采用基于寄存器的虚拟机,将中间语言文件转化为虚拟机指令;对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序。本发明的实施例提供了一种应用程序保护方法、电子设备及存储介质,基于寄存器编号的形式对源文件进行指令转化,转化得到虚拟机指令,并对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序,从而在运行应用程序执行指令时,可从寄存器编号中明确源文件中对应的变量获取位置,直接使用寄存器中保存的变量值,实现更高的执行效率和更高的内存利用率。
Description
技术领域
本发明涉及机器学习和视频分析技术领域,尤其是涉及一种应用程序保护方法、电子设备和存储介质。
背景技术
随着移动互联网的快速发展,人们生活的方方面面都离不开移动APP,在利益的驱使下,移动APP的安全面临的形势越来越严峻,攻防两方不断地进行对抗,防守方的技术在对抗中也不断演进。当前主流的保护手段有加壳、运行时保护、混淆、虚拟机保护等。其中基于虚拟机的源文件保护成为了一种有效的加固手段。
目前通常采用基于栈的虚拟机对源文件进行保护,其过程中首先将应用程序的核心源代码进行虚拟化编译,从而生成等价的字节码,该字节码后续由基于栈的特定虚拟机解释引擎来解释执行。然而,由于基于栈的特定虚拟机解释引擎在解释执行字节码的过程中,需要借助栈来进行指令计算,因此伴随有大量的入栈和出栈操作,大大影响了指令的计算效率,使得虚拟化后的程序运行时间明显延长。
发明内容
针对现有技术存在的问题,本发明实施例提供一种应用程序保护方法、电子设备及存储介质。
第一方面,本发明实施例提供一种应用程序保护方法,包括:
确定源文件,根据所述源文件生成对应的中间语言文件,所述中间语言文件由中间语言指令构成;
采用基于寄存器的虚拟机,将所述中间语言文件中的中间语言指令转化为虚拟机指令;
对所述虚拟机指令进行编码得到对应的虚拟机字节码,根据所述虚拟机字节码创建应用程序。
进一步地,所述采用基于寄存器的虚拟机,将所述中间语言文件中的中间语言指令转化为虚拟机指令,包括:
采用基于寄存器的虚拟机,从所述中间语言文件中确定目标中间语言指令,对所述目标中间语言指令进行语义分析,确定所述目标中间语言指令对应的各指令类型,和处于各指令类型下的变量;
根据各指令类型和预存的指令类型与操作码的映射关系表,确定各指令类型对应的操作码,所述操作码为虚拟机指令中的指令类型;
根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表,确定所述目标中间语言指令对应的虚拟机指令,所述寄存器列表包含寄存器编号。
进一步地,所述根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表,确定所述目标中间语言指令对应的虚拟机指令,包括:
根据各指令类型下的变量的生命周期和预存的寄存器列表,采用预存的寄存器分配策略确定各变量分配的寄存器编号和栈地址;
根据各指令类型对应的操作码和各变量分配的寄存器编号和栈地址,确定所述目标中间语言指令对应的虚拟机指令。
进一步地,所述寄存器分配策略包括:
确定已分配寄存器编号的变量的生命周期结束后,使所述变量的已分配寄存器编号作为当前变量分配的寄存器编号;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中不存在未分配的寄存器编号,使当前变量置于函数栈中,并未当前变量配置栈地址;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中存在未分配的寄存器编号,使当前变量分配一个未分配的寄存器编号。
进一步地,还包括:
当所述指令类型包括调用类型,且受调用的变量在下一个指令中继续使用,根据调用类型和预存的指令类型与操作码的映射关系表,确定上下文保存操作码和上下文恢复操作码,根据上下文保存操作码、上下文恢复操作码和所述受调用的变量对应的寄存器编号生成对应于调用类型的虚拟机指令。
进一步地,所述根据所述源文件生成对应的中间语言文件,包括:
根据预存的虚拟命令行参数对源文件进行编辑处理,生成对应的中间语言文件。
进一步地,还包括:
根据预存的中间语言语义规则对所述中间语言文件进行合法性校验及转化,得到合法的中间语言文件。
进一步地,所述根据所述虚拟机字节码创建应用程序,包括:
获取未编码的剩余源文件和实现物理CPU和虚拟CPU之间切换的中间体;
将得到的虚拟机字节码、未编码的剩余源文件和中间体构建成新源文件;
将新源文件与虚拟机解释引擎文件构建应用程序。
第二方面,本发明实施例提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现以上所述的应用程序保护方法的步骤。
第三方面,本发明实施例提供一种非暂态可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以上任一项所述的应用程序保护方法的步骤。
本发明的实施例提供了一种应用程序保护方法、电子设备和存储介质,有别于基于堆栈的虚拟化编码保护技术,采用基于寄存器的虚拟机以寄存器编号的形式对源文件进行指令转化,转化得到虚拟机指令,并对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序,从而在运行应用程序执行指令时,可从寄存器编号中明确源文件中对应的变量获取位置,直接使用寄存器中保存的变量值,无需入栈和出栈对指令进行计算确定要使用的变量值,节省大量的计算资源,实现更高的执行效率和更高的内存利用率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的应用程序保护方法的流程示意图;
图2是本发明实施例提供的每个变量的生命周期示意图;
图3是本发明实施例提供的函数fa调用函数fb时函数栈的变化示意图;
图4是本发明实施例提供的应用程序保护装置的结构示意图;
图5是本发明实施例提供的应用程序保护系统的结构示意图;
图6是本发明实施例提供的电子设备的实体结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1示出了本发明一实施例提供的一种应用程序保护方法的流程示意图,参见图1,该方法包括:
S11、确定源文件,根据源文件生成对应的中间语言文件,中间语言文件由中间语言指令构成;
S12、采用基于寄存器的虚拟机,将中间语言文件中的中间语言指令转化为虚拟机指令;
S13、对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序。
针对步骤S11-步骤S13,需要说明的是,在本发明实施例中,随着移动互联网的快速发展,人们生活的方方面面都离不开移动应用程序APP,在利益的驱使下,移动应用程序APP的安全面临的形势越来越严峻。为此,需要在生成应用程序的过程中,对源文件进行虚拟化编码保护之后,然后再根据虚拟化后的文件创建应用程序。
在本发明实施例中,确定源文件之后,首先对源文件进行编辑处理,生成对应的中间语言文件。该中间语言文件为中间代码文件,是一个基于特定汇编格式的代码文件。该中间语言文件由一个或多个中间语言指令构成。
在本发明实施例的进一步实施例中,采用中间语言的格式为LLVM IR。可以借助现有的编译器前端将源文件转化为对应的中间语言文件。
例如源文件如下:
中间语言文件如下:
本发明实施例方法有别于基于堆栈的虚拟化编码保护技术,是采用基于寄存器的虚拟机以寄存器编号将中间语言文件中的中间语言指令转化为虚拟机指令。该虚拟机指令能够从寄存器编号中明确源文件中对应的变量获取位置,可以在指令执行过程中直接使用寄存器中保存的变量值。
然后对虚拟机指令进行编码得到对应的虚拟机字节码,最后根据虚拟机字节码创建应用程序。该虚拟机字节码只能由特定的虚拟机解释引擎执行。用户在使用应用程序时,特定的虚拟机解释引擎会读取虚拟机字节码,识别出虚拟机指令,并进行指令执行。
本发明实施例提供的应用程序保护方法,有别于基于堆栈的虚拟化编码保护技术,采用基于寄存器的虚拟机以寄存器编号的形式对源文件进行指令转化,转化得到虚拟机指令,并对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序,从而在运行应用程序执行指令时,可从寄存器编号中明确源文件中对应的变量获取位置,直接使用寄存器中保存的变量值,无需入栈和出栈对指令进行计算确定要使用的变量值,节省大量的计算资源,实现更高的执行效率和更高的内存利用率。
在上述实施例方法的进一步实施例中,主要是对将中间语言文件转化为虚拟化指令的过程进行解释说明,具体如下:
该中间语言文件由一个或多个中间语言指令构成。在本发明实施例中,对每个中间语言指令进行虚拟机指令的转化后,完成对中间语言文件的指令转化。
该中间语言文件包括按顺序配置的一个或多个中间语言指令。为此,需要按顺序对每一个中间语言指令进行转化处理。
为此,采用基于寄存器的虚拟机从中间语言文件中确定某一个中间语言指令,即目标中间语言指令,对该目标中间语言指令进行语义分析,确定目标中间语言指令对应的各指令类型,和处于各指令类型下的变量。
每个中间语言指令可包含一个或多个指令。对中间语言指令进行语义分析,确定对应的所有指令类型。该指令类型可包含算术运算指令、比较指令、跳转指令、数据存取指令等,不一一举出。
每个指令在执行过程中,会需要对应的变量。在各指令类型下会对应存在自身所需的变量。例如指令%6=add i32%4,%5,其指令类型为add,变量为%4、%5和%6。
根据各指令类型和预存的指令类型与操作码的映射关系表确定各指令类型对应的操作码,该操作码为虚拟机指令中的指令类型。
由于是将中间语言指令转化为虚拟机指令,故虚拟机指令中也配置与中间语言指令的指令类型相对应的指令类型,在虚拟机指令中称为操作码。因此,预存一个指令类型与操作码的映射关系表,通过该映射关系表可以确定中间语言指令的各指令类型所对应的操作码。同样的,该操作码可包括数据传送指令、算术逻辑运算指令、比较指令、存储器访问指令、跳转指令等,不一一举出。以下表1对指令类型与操作码的映射关系表进行解释说明。
表1为指令类型与操作码的映射关系表
然后,根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表确定目标中间语言指令对应的虚拟机指令。在该寄存器列表包含寄存器编号,一般情况下,会配置一定数量的寄存器存储变量,故对寄存器进行编号,按顺序寄存变量。
每个变量在整个应用过程中都有自身的生命周期。生命周期结束后理应不再占用寄存器资源。因此,需要根据各变量的生命周期从预存的寄存器列表中分配空闲的寄存器寄存变量,从而会形成基于寄存器编号的虚拟机指令。在这里,每条虚拟机指令包括操作码和寄存器编号,寄存器编号称为指令的操作数。
将虚拟机编号与对应的操作码组合,可确定目标中间语言指令对应的虚拟机指令。
在本发明实施例中,依据上述的映射关系表,可将中间语言指令转换成符合虚拟化编译所适应的操作码形式,再将虚拟机编号与对应的操作码组合确定虚拟机指令,从而能够从寄存器编号中明确源文件中对应的变量获取位置,直接使用寄存器中保存的变量值,实现更高的执行效率和更高的内存利用率。
在上述实施例方法的进一步实施例中,主要是对根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表确定目标中间语言指令对应的虚拟机指令的过程进行解释说明,具体如下:
根据各指令类型下的变量的生命周期和预存的寄存器列表采用预存的寄存器分配策略确定各变量分配的寄存器编号和栈地址;
根据各指令类型对应的操作码和各变量分配的寄存器编号和栈地址确定目标中间语言指令对应的虚拟机指令。
在本发明实施例中,该寄存器分配策略包括如下内容:
确定已分配寄存器编号的变量的生命周期结束后,使该变量的已分配寄存器编号作为当前变量分配的寄存器编号;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中不存在未分配的寄存器编号,使当前变量置于函数栈中,并未当前变量配置栈地址;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中存在未分配的寄存器编号,使当前变量分配一个未分配的寄存器编号。
为了更好对上述内容进行理解,下面以具体实例进行详细说明,具体如下:
例如,一中间语言指令包含6个变量,每个变量的生命周期如图2所示,假设当前寄存器类别中总共有三个虚拟寄存器R1、R2、R3,为了方便描述划分为USED_LIST和FREE_LIST。
寄存器分配算法按顺序扫描该中间语言指令,%1变量可以分配为R1,此时USED_LIST={R1},FREE_LIST={R2,R3};扫描到%2时,%2变量可以分配为R2,此时USERD_LIST={R1,R2},FREE_LIST={R3};扫描到%3时,变量%1的生命周期已经结束,则可以回收分配给变量%1的寄存器R1,所以%3变量分配为R1,此时USED_LIST={R1,R2},FREE_LIST={R3};扫描到%4时,%4变量可以分配为R3,此时USED_LIST={R1,R2,R3},FREE_LIST={};扫描到%5时,FREE_LIST已经为空,所以需要将变量%5溢出到函数栈空间,配置栈地址;扫描到%6时,%2、%3、%4的生命周期均结束了,所以回收分配给他们的寄存器,则%6可以分配为R1,此时USED_LIST={R1},FREE_LIST={R2,R3}。
在本发明实施例中,因为有限个虚拟寄存器的缘故,所以对虚拟寄存器的使用和回收特别重要,从而减少的内存的分配与释放,提高内存的利用率。
在本发明实施例中,指令编码将虚拟机指令编码成虚拟机平台可以直接解释执行的字节码。在编码阶段可以采用多样化的编码规则,使得生成的字节码千变万化,增加逆向分析的难度。
下面以add r3 r1 r2虚拟机指令为例,演示一种编码。假设指令add的操作码为0x20,寄存器r1、r2、r3的编号分别为1、2、3,则可以将以上指令编码为:00100000 000000011 00001 00010 00000。
从以上编码可以看出,指令编码的固定长度为32个二进制位,前8位表示操作码,一共可以表示256个操作码,接下来的四位为预留空间,最后的20位分四组,每一组可以表示一个寄存器编号。按照此编码规则,虚拟机平台可以准备无误地解释出一串编码所代码的含义,并完成指令的所有指令动作。
在上述实施例方法的进一步实施例中,当中间语言指令中存在调用函数,此时指令类型包括有调用类型,在进行虚拟化指令生成过程中,需判断受调用的变量在下一个指令中是否继续使用,若继续使用,则根据调用类型和预存的指令类型与操作码的映射关系表确定上下文保存操作码和上下文恢复操作码,根据上下文保存操作码、上下文恢复操作码和受调用的变量对应的寄存器编号生成对应于调用类型的虚拟机指令。
下面以具体实例进行解释说明,例如上下文保存操作码和寄存器编号为stm r1,r2,r3表示将寄存器r1、r2、r3中变量值保存到栈上,待函数调用结束之后,上下文恢复操作码和寄存器编号为ldm r1,r2,r3则表示将保存的变量值重新恢复到相应寄存器中,以确保后续指令的正确执行。
在指令执行过程中,当发生函数调用时,需要保存当前的上下文信息,待函数调用结束时再恢复上下文信息。在函数调用之前,扫描USED_LIST中的寄存器,如果在函数调用结束之后还会使用到寄存器中存储的变量值则需要保存该寄存器的变量值到上下文信息中,待函数调用结束之后再逐个恢复寄存器中存储的值。
基于以上变量函数栈空间的处理过程、调用函数上下文信息保护过程,在指令执行过程中,可按函数执行栈的管理策略完成处理过程,具体如下:
图3展示了函数fa调用函数fb时函数栈的变化示意图。首先压入栈中的是函数fa的参数;紧接着是函数fa的局部栈数据;然后是函数fa执行过程中寄存器不足时溢出到栈上的变量;接下来就是发生函数调用时需要保护的上下文信息,这部分主要保存的是函数fb调用结束时仍然会被使用的寄存器值,因为这些寄存器值可能在函数fb中被修改;接下来就是函数fb的栈帧,其内容与函数fa的栈帧一样排列。函数调用结束之后,栈顶指针又移动到了发生函数调用时的位置,及寄存器溢出空间的位置。
在上述实施例方法的进一步实施例中,主要是对根据源文件生成对应的中间语言文件的过程进行解释说明,具体如下:
通过编译器前端根据预存的虚拟命令行参数对源文件进行编辑处理,生成对应的中间语言文件。
然后根据预存的中间语言语义规则对生成的中间语言文件进行合法性校验及转化,得到合法的中间语言文件。
在上述实施例方法的进一步实施例中,主要是对根据所述虚拟机字节码创建应用程序的过程进行解释说明,具体如下:
获取未编码的剩余源文件和实现物理CPU和虚拟CPU之间切换的中间体,将得到的虚拟机字节码、未编码的剩余源文件和中间体构建成新源文件,将新源文件与虚拟机解释引擎文件构建应用程序。
对此,需要说明的是,虚拟机字节码对应的源文件为指定进行虚拟化编码的文件,其指定方式包括:可以在指定的配置文件中以函数或源文件粒度指定需要进行虚拟化保护的源文件,或通过函数属性标记的方式指定虚拟化编码的文件。
上述实施例方法能够直接使用寄存器编号作为指令操作数并参与计算,能够大大减少基于栈的方案中不断出栈入栈所耗费的时间,提高了指令解释效率,寄存器分配及回收机制使得内存得到重复利用,减少的内存的分配与释放,提高内存了内存利用率;每一条虚拟机指令均包含一个操作码和一个或多个操作数,增加了指令复杂度,使得指令编码方式多样化成为可能,进一步增加了指令复杂度。
图4示出了本发明一实施例提供的一种应用程序保护装置的结构示意图,参见图4,该装置包括生成模块41、编码模块42和创建模块43,其中:
生成模块41,用于确定源文件,根据所述源文件生成对应的中间语言文件,中间语言文件由中间语言指令构成;
编码模块42,用于采用基于寄存器的虚拟机,将所述中间语言文件中的中间语言指令转化为虚拟机指令;
创建模块43,用于对所述虚拟机指令进行编码得到对应的虚拟机字节码,根据所述虚拟机字节码创建应用程序。
在上述实施例装置的进一步实施例中,所述编码模块在采用基于寄存器的虚拟机,将所述中间语言文件中的中间语言指令转化为虚拟机指令的处理过程中,具体用于:
采用基于寄存器的虚拟机从所述中间语言文件中确定目标中间语言指令,对所述目标中间语言指令进行语义分析,确定所述目标中间语言指令对应的各指令类型,和处于各指令类型下的变量;
根据各指令类型和预存的指令类型与操作码的映射关系表确定各指令类型对应的操作码,所述操作码为虚拟机指令中的指令类型;
根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表确定所述目标中间语言指令对应的虚拟机指令,所述寄存器列表包含寄存器编号。
在上述实施例装置的进一步实施例中,所述编码模块在根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表确定所述目标中间语言指令对应的虚拟机指令的处理过程中,具体用于:
根据各指令类型下的变量的生命周期和预存的寄存器列表采用预存的寄存器分配策略确定各变量分配的寄存器编号和栈地址;
根据各指令类型对应的操作码和各变量分配的寄存器编号和栈地址确定所述目标中间语言指令对应的虚拟机指令。
在上述实施例装置的进一步实施例中,所述寄存器分配策略包括:
确定已分配寄存器编号的变量的生命周期结束后,使所述变量的已分配寄存器编号作为当前变量分配的寄存器编号;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中不存在未分配的寄存器编号,使当前变量置于函数栈中,并未当前变量配置栈地址;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中存在未分配的寄存器编号,使当前变量分配一个未分配的寄存器编号。
在上述实施例装置的进一步实施例中,所述编码模块还用于:
当所述指令类型包括调用类型,且受调用的变量在下一个指令中继续使用,根据调用类型和预存的指令类型与操作码的映射关系表确定上下文保存操作码和上下文恢复操作码,根据上下文保存操作码、上下文恢复操作码和所述受调用的变量对应的寄存器编号生成对应于调用类型的虚拟机指令。
在上述实施例装置的进一步实施例中,所述生成模块在根据所述源文件生成对应的中间语言文件的处理过程中,具体用于:
根据预存的虚拟命令行参数对源文件进行编辑处理,生成对应的中间语言文件。
在上述实施例装置的进一步实施例中,所述生成模块还用于:
根据预存的中间语言语义规则对所述中间语言文件进行合法性校验及转化,得到合法的中间语言文件。
在上述实施例装置的进一步实施例中,所述创建模块在根据所述虚拟机字节码创建应用程序的处理过程中,具体用于:
获取未编码的剩余源文件和实现物理CPU和虚拟CPU之间切换的中间体;
将得到的虚拟机字节码、未编码的剩余源文件和中间体构建成新源文件;
将新源文件与虚拟机解释引擎文件构建应用程序。
由于本发明实施例所述装置与上述实施例所述方法的原理相同,对于更加详细的解释内容在此不再赘述。
需要说明的是,本发明实施例中可以通过硬件处理器(hardware processor)来实现相关功能模块。
本发明实施例提供的应用程序保护装置,有别于基于堆栈的虚拟化编码保护技术,采用基于寄存器的虚拟机以寄存器编号的形式对源文件进行指令转化,转化得到虚拟机指令,并对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序,从而在运行应用程序执行指令时,可从寄存器编号中明确源文件中对应的变量获取位置,直接使用寄存器中保存的变量值,无需入栈和出栈对指令进行计算确定要使用的变量值,节省大量的计算资源,实现更高的执行效率和更高的内存利用率。
图5示出了本发明一实施例提供的应用程序保护系统的结构示意图,参见图5,该系统包括以下模块:
编辑器前端封装模块51,用于从预存的虚拟命令行参数识别出所需的命令行参数;
中间语言文件合并模块52,用于根据识别出的命令行参数对源文件进行编辑处理,生成对应的中间语言文件,中间语言文件由中间语言指令构成;
合法性校验模块53,用于根据预存的中间语言语义规则对所述中间语言文件进行合法性校验及转化,得到合法的中间语言文件;
虚拟化编码模块54,用于将中间语言文件中的中间语言指令转化为虚拟化指令,并根据虚拟机指令生成虚拟机字节码;
预处理模块55,用于将得到的虚拟机字节码、未编码的剩余源文件和中间体构建成新源文件;
链接模块56,用于将新源文件与虚拟机解释引擎文件构建应用程序。
由于本发明实施例所述系统与上述实施例所述方法的原理相同,对于更加详细的解释内容在此不再赘述。
需要说明的是,本发明实施例中可以通过硬件处理器(hardwareprocessor)来实现相关功能模块。
本发明实施例提供的应用程序保护系统,有别于基于堆栈的虚拟化编码保护技术,采用基于寄存器的虚拟机以寄存器编号的形式对源文件进行指令转化,转化得到虚拟机指令,并对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序,从而在运行应用程序执行指令时,可从寄存器编号中明确源文件中对应的变量获取位置,直接使用寄存器中保存的变量值,无需入栈和出栈对指令进行计算确定要使用的变量值,节省大量的计算资源,实现更高的执行效率和更高的内存利用率。
图6示例了一种电子设备的实体结构示意图,如图6所示,该电子设备可以包括:处理器(processor)61、通信接口(Communications Interface)62、存储器(memory)63和通信总线64,其中,处理器61,通信接口62,存储器63通过通信总线64完成相互间的通信。处理器61可以调用存储器63中的逻辑指令,以执行如下方法:确定源文件,根据源文件生成对应的中间语言文件,中间语言文件由中间语言指令构成;采用基于寄存器的虚拟机,将中间语言文件中的中间语言指令转化为虚拟机指令;对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序。
此外,上述的存储器63中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
进一步地,本发明实施例公开一种计算机程序产品,所述计算机程序产品包括存储在非暂态可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法实施例所提供的方法,例如包括:确定源文件,根据源文件生成对应的中间语言文件,中间语言文件由中间语言指令构成;采用基于寄存器的虚拟机,将中间语言文件中的中间语言指令转化为虚拟机指令;对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序。
另一方面,本发明实施例还提供一种非暂态可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的方法,例如包括:确定源文件,根据源文件生成对应的中间语言文件,中间语言文件由中间语言指令构成;采用基于寄存器的虚拟机,将中间语言文件中的中间语言指令转化为虚拟机指令;对虚拟机指令进行编码得到对应的虚拟机字节码,根据虚拟机字节码创建应用程序。
以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (10)
1.一种应用程序保护方法,其特征在于,包括:
确定源文件,根据所述源文件生成对应的中间语言文件,所述中间语言文件由中间语言指令构成;
采用基于寄存器的虚拟机,将所述中间语言文件中的中间语言指令转化为虚拟机指令;
对所述虚拟机指令进行编码得到对应的虚拟机字节码,根据所述虚拟机字节码创建应用程序。
2.根据权利要求1所述的应用程序保护方法,其特征在于,所述采用基于寄存器的虚拟机,将所述中间语言文件中的中间语言指令转化为虚拟机指令,包括:
采用基于寄存器的虚拟机,从所述中间语言文件中确定目标中间语言指令,对所述目标中间语言指令进行语义分析,确定所述目标中间语言指令对应的各指令类型,和处于各指令类型下的变量;
根据各指令类型和预存的指令类型与操作码的映射关系表,确定各指令类型对应的操作码,所述操作码为虚拟机指令中的指令类型;
根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表,确定所述目标中间语言指令对应的虚拟机指令,所述寄存器列表包含寄存器编号。
3.根据权利要求2所述的应用程序保护方法,其特征在于,所述根据各指令类型对应的操作码、各指令类型下的变量的生命周期和预存的寄存器列表,确定所述目标中间语言指令对应的虚拟机指令,包括:
根据各指令类型下的变量的生命周期和预存的寄存器列表采用预存的寄存器分配策略,确定各变量分配的寄存器编号和栈地址;
根据各指令类型对应的操作码和各变量分配的寄存器编号和栈地址,确定所述目标中间语言指令对应的虚拟机指令。
4.根据权利要求3所述的应用程序保护方法,其特征在于,所述寄存器分配策略包括:
确定已分配寄存器编号的变量的生命周期结束后,将所述变量的已分配寄存器编号作为当前变量分配的寄存器编号;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中不存在未分配的寄存器编号,使当前变量置于函数栈中,并为当前变量配置栈地址;
确定已分配寄存器编号的变量的生命周期均未结束,且寄存器列表中存在未分配的寄存器编号,为当前变量分配一个未分配的寄存器编号。
5.根据权利要求3所述的应用程序保护方法,其特征在于,还包括:
当所述指令类型包括调用类型,且受调用的变量在下一个指令中继续使用,根据调用类型和预存的指令类型与操作码的映射关系表,确定上下文保存操作码和上下文恢复操作码,根据上下文保存操作码、上下文恢复操作码和所述受调用的变量对应的寄存器编号,生成对应于调用类型的虚拟机指令。
6.根据权利要求1所述的应用程序保护方法,其特征在于,所述根据所述源文件生成对应的中间语言文件,包括:
根据预存的虚拟命令行参数对源文件进行编辑处理,生成对应的中间语言文件。
7.根据权利要求6所述的应用程序保护方法,其特征在于,还包括:
根据预存的中间语言语义规则对所述中间语言文件进行合法性校验及转化,得到合法的中间语言文件。
8.根据权利要求1所述的应用程序保护方法,其特征在于,所述根据所述虚拟机字节码创建应用程序,包括:
获取未编码的剩余源文件和实现物理CPU和虚拟CPU之间切换的中间体;
将得到的虚拟机字节码、未编码的剩余源文件和中间体构建成新源文件;
将新源文件与虚拟机解释引擎文件构建应用程序。
9.一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现如权利要求1至8任一项所述的应用程序保护方法的步骤。
10.一种非暂态可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现如权利要求1至8任一项所述的应用程序保护方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010820860.5A CN112114933A (zh) | 2020-08-14 | 2020-08-14 | 应用程序保护方法、电子设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010820860.5A CN112114933A (zh) | 2020-08-14 | 2020-08-14 | 应用程序保护方法、电子设备和存储介质 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112114933A true CN112114933A (zh) | 2020-12-22 |
Family
ID=73804168
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010820860.5A Pending CN112114933A (zh) | 2020-08-14 | 2020-08-14 | 应用程序保护方法、电子设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112114933A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312120A (zh) * | 2021-06-17 | 2021-08-27 | 武汉斗鱼鱼乐网络科技有限公司 | 在虚拟机中执行c++任务的方法、装置、电子设备及介质 |
CN113791838A (zh) * | 2021-08-20 | 2021-12-14 | 深圳市元征科技股份有限公司 | 一种程序文件调用方法、装置以及存储介质 |
CN114707124A (zh) * | 2022-03-22 | 2022-07-05 | 广东技术师范大学 | 基于代码虚拟化的.net平台代码保护方法和系统 |
CN115048623A (zh) * | 2022-04-01 | 2022-09-13 | 上海任意门科技有限公司 | 用于加密代码的方法、计算设备和存储介质 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101539867A (zh) * | 2009-04-23 | 2009-09-23 | 上海交通大学 | 动态二进制翻译系统中可重定向的寄存器分配方法 |
CN103559069A (zh) * | 2013-11-18 | 2014-02-05 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
CN104794067A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈存储的变量值预测 |
CN105046117A (zh) * | 2015-06-30 | 2015-11-11 | 西北大学 | 一种具有指令集随机化的代码虚拟化软件保护系统 |
WO2017107706A1 (zh) * | 2015-12-25 | 2017-06-29 | 北京奇虎科技有限公司 | 基于arm指令虚拟化的elf文件保护方法及系统 |
CN106960140A (zh) * | 2016-01-08 | 2017-07-18 | 阿里巴巴集团控股有限公司 | 虚拟机指令的混淆方法及装置、虚拟机保护系统 |
CN108345773A (zh) * | 2017-07-27 | 2018-07-31 | 江苏通付盾信息安全技术有限公司 | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 |
-
2020
- 2020-08-14 CN CN202010820860.5A patent/CN112114933A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101539867A (zh) * | 2009-04-23 | 2009-09-23 | 上海交通大学 | 动态二进制翻译系统中可重定向的寄存器分配方法 |
CN103559069A (zh) * | 2013-11-18 | 2014-02-05 | 中国科学院声学研究所 | 一种基于代数系统的跨文件过程间优化方法 |
CN104794067A (zh) * | 2014-01-17 | 2015-07-22 | 想象力科技有限公司 | 堆栈存储的变量值预测 |
CN105046117A (zh) * | 2015-06-30 | 2015-11-11 | 西北大学 | 一种具有指令集随机化的代码虚拟化软件保护系统 |
WO2017107706A1 (zh) * | 2015-12-25 | 2017-06-29 | 北京奇虎科技有限公司 | 基于arm指令虚拟化的elf文件保护方法及系统 |
CN106960140A (zh) * | 2016-01-08 | 2017-07-18 | 阿里巴巴集团控股有限公司 | 虚拟机指令的混淆方法及装置、虚拟机保护系统 |
CN108345773A (zh) * | 2017-07-27 | 2018-07-31 | 江苏通付盾信息安全技术有限公司 | 基于虚拟机的代码保护方法及装置、电子设备、存储介质 |
Non-Patent Citations (2)
Title |
---|
刘悦,李盛楠,温秀红: "混凝土结构平法识图 附施工图 第2版", 31 July 2020, 北京理工大学出版社, pages: 133 * |
张汉宁: "基于精简指令集的软件保护虚拟机技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》, vol. 2010, no. 9, pages 138 - 13 * |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113312120A (zh) * | 2021-06-17 | 2021-08-27 | 武汉斗鱼鱼乐网络科技有限公司 | 在虚拟机中执行c++任务的方法、装置、电子设备及介质 |
CN113312120B (zh) * | 2021-06-17 | 2022-05-10 | 武汉斗鱼鱼乐网络科技有限公司 | 在虚拟机中执行c++任务的方法、装置、电子设备及介质 |
CN113791838A (zh) * | 2021-08-20 | 2021-12-14 | 深圳市元征科技股份有限公司 | 一种程序文件调用方法、装置以及存储介质 |
CN113791838B (zh) * | 2021-08-20 | 2024-04-23 | 深圳市元征科技股份有限公司 | 一种程序文件调用方法、装置以及存储介质 |
CN114707124A (zh) * | 2022-03-22 | 2022-07-05 | 广东技术师范大学 | 基于代码虚拟化的.net平台代码保护方法和系统 |
CN114707124B (zh) * | 2022-03-22 | 2022-11-29 | 广东技术师范大学 | 基于代码虚拟化的.net平台代码保护方法和系统 |
CN115048623A (zh) * | 2022-04-01 | 2022-09-13 | 上海任意门科技有限公司 | 用于加密代码的方法、计算设备和存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108614960B (zh) | 一种基于前端字节码技术的JavaScript虚拟化保护方法 | |
CN112114933A (zh) | 应用程序保护方法、电子设备和存储介质 | |
CN111249736B (zh) | 代码处理方法及装置 | |
CN111563237B (zh) | 一种智能合约安全增强方法 | |
CN110059456B (zh) | 代码保护方法、代码保护装置、存储介质与电子设备 | |
CN106960140A (zh) | 虚拟机指令的混淆方法及装置、虚拟机保护系统 | |
CN105930694A (zh) | 用于模糊虚拟机的灵活指令集 | |
KR101407629B1 (ko) | 자바 변환 가속 장치 및 방법 | |
CN112487092B (zh) | 一种基于区块链的智能合约调用方法及装置 | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
JP2018028777A (ja) | エミュレーション装置、エミュレーション方法、及び、エミュレーションプログラム | |
CN110673851B (zh) | 一种智能合约运行方法、装置及电子设备 | |
CN113703779B (zh) | 一种跨平台的多语言编译方法和超轻量物联网虚拟机 | |
CN111782334B (zh) | 一种动态链接库文件虚拟化方法、存储介质及终端设备 | |
CN117762423A (zh) | Java智能合约的编译方法、装置、存储介质以及电子设备 | |
CN105373414B (zh) | 支持MIPS平台的Java虚拟机实现方法及装置 | |
CN117873483A (zh) | 一种编译智能合约的方法、装置、电子设备和存储介质 | |
CN112631656A (zh) | 一种基于源代码的智能合约优化方法及装置 | |
CN110018831B (zh) | 程序处理方法、装置及计算机可读存储介质 | |
CN115022312B (zh) | 多智能合约引擎的实现方法、装置、电子设备及存储介质 | |
CN113835688B (zh) | 一种科学计算语言解释器的对象封装方法 | |
CN113050948B (zh) | 动态库优化方法、装置、设备及存储介质 | |
CN113031952A (zh) | 深度学习模型的执行代码的确定方法、装置及存储介质 | |
CN114371852B (zh) | 一种编译方法及装置 | |
CN114707124B (zh) | 基于代码虚拟化的.net平台代码保护方法和系统 |
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 |