CN110032838B - 一种脚本文件加固方法、装置及设备 - Google Patents
一种脚本文件加固方法、装置及设备 Download PDFInfo
- Publication number
- CN110032838B CN110032838B CN201910216723.8A CN201910216723A CN110032838B CN 110032838 B CN110032838 B CN 110032838B CN 201910216723 A CN201910216723 A CN 201910216723A CN 110032838 B CN110032838 B CN 110032838B
- Authority
- CN
- China
- Prior art keywords
- instruction
- function data
- script file
- virtual
- constant
- 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
- 230000002787 reinforcement Effects 0.000 title claims abstract description 71
- 238000000034 method Methods 0.000 title claims abstract description 67
- 238000006243 chemical reaction Methods 0.000 claims abstract description 69
- 238000004458 analytical method Methods 0.000 claims abstract description 53
- 238000012545 processing Methods 0.000 claims abstract description 48
- 230000006870 function Effects 0.000 claims description 212
- 230000003014 reinforcing effect Effects 0.000 claims description 18
- 238000007596 consolidation process Methods 0.000 description 23
- 230000008569 process Effects 0.000 description 14
- 238000010586 diagram Methods 0.000 description 7
- 238000005728 strengthening Methods 0.000 description 5
- 230000008859 change Effects 0.000 description 3
- 230000009471 action Effects 0.000 description 2
- 230000006399 behavior Effects 0.000 description 1
- 238000005336 cracking Methods 0.000 description 1
- 238000007405 data analysis Methods 0.000 description 1
- 238000013461 design Methods 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 230000000694 effects Effects 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
- 230000000750 progressive effect Effects 0.000 description 1
- 230000001681 protective effect Effects 0.000 description 1
- 230000008439 repair process Effects 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 230000007704 transition Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/10—Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
- G06F21/12—Protecting executable software
- G06F21/14—Protecting executable software against software analysis or reverse engineering, e.g. by obfuscation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/60—Protecting data
- G06F21/602—Providing cryptographic facilities or services
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Computer Hardware Design (AREA)
- Computer Security & Cryptography (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- General Health & Medical Sciences (AREA)
- Health & Medical Sciences (AREA)
- Bioethics (AREA)
- Multimedia (AREA)
- Technology Law (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种脚本文件加固方法,所述方法包括:对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。利用本发明提供的技术方案可以实现对应用程序的脚本文件的加固,提高应用程序的安全性。
Description
技术领域
本发明涉及计算机技术领域,具体涉及一种脚本文件加固方法、装置及设备。
背景技术
脚本文件是使用一种特定的描述性语言,依据一定的格式编写的可以执行的文件,通常可以由应用程序临时调用并执行。脚本文件的语法比较简单,比较容易掌握,且脚本文件与应用程序密切相关,包括相对应用程序自身的功能,因此,被广泛地应用于网页设计、游戏开发等中,但是,一些破解者通过非法手段破解热门手机游戏客户端,获取其重要的脚本文件等的源代码、配置文档、图片等资源,并据此开发山寨手机游戏,或者破解其脚本文件对游戏进行外挂。
在现有技术中,对脚本文件的加密一般采用的方法是改变脚本文件的源码中的opcode(操作码)的顺序,让生成出来的文件中的字节码的编码与源码不一致,从而实现现有的反编译器无法反编译生成的文件。然而,破解人员很容易通过逆向分析的方式,得到opcode的正确顺序,然后对反编译器做小幅修改即可正常翻译,因此,现有的修改opcode对脚本文件进行保护的方法安全性较低,使得脚本文件无法得到有效的保护。
因此,有必要提供一种脚本文件的加固方法,用以解决脚本文件易于被反编译显示的问题,最大化保护应用程序的安全。
发明内容
本发明提供了一种文件加固方法、装置及设备,可以实现对应用程序的脚本文件的加固,提高应用程序的安全性。
一方面,本发明提供了一种脚本文件加固方法,所述方法包括:
对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;
基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;
获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
进一步的,所述基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令之后,所述方法还包括:
解码所述虚拟指令,得到所述虚拟指令的等价操作指令;
获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
基于所述转换常量、所述等价操作指令以及所述虚拟环境切换指令生成加固后的脚本文件。
进一步的,所述待加固脚本文件所对应的函数数据包括一个或多个函数数据;
当所述待加固脚本文件所对应的函数数据包括多个函数数据时,所述对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量包括:
获取所述待加固脚本文件中的嵌套函数数据,所述嵌套函数数据包括具有调用关系的多个函数数据;
对所述嵌套函数数据进行递归解析处理,得到所述待加固脚本文件所对应的函数数据;
对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量。
进一步的,在所述对所述函数数据所对应的执行指令进行指令转换加固处理之前,所述方法还包括:
判断所述待加固脚本文件所对应的函数数据是否满足预设加固条件;
若是,执行对所述函数数据所对应的执行指令进行指令转换加固处理的步骤。
进一步的,在所述对所述函数数据所对应的执行指令进行指令转换加固处理之前,所述方法还包括:
判断所述待加固脚本文件所对应的函数数据是否存在满足预设加固条件的函数数据;
若是,所述对所述函数数据所对应的执行指令进行指令转换加固处理包括对满足预设加固条件的函数数据所对应的执行指令进行指令转换加固处理。
进一步的,所述基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件包括:
基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成函数体;
基于所述函数体和加固前的文件头生成加固后的脚本文件。
进一步的,所述方法还包括:
将所述解析常量和所述转换常量存储在常量列表中;
记录所述解析常量在所述常量列表中的位置信息以及所述转换常量在所述常量列表中的位置信息。
进一步的,所述基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令包括:
将所述解析常量在所述常量列表中的位置信息编码至所述待编码虚拟指令中,得到所述虚拟指令。
进一步的,本发明还提供了一种脚本文件加固装置,所述装置包括:
解析处理模块,用于对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
指令转换加固处理模块,用于对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;
编码处理模块,用于基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;
虚拟环境切换指令获取模块,用于获取所述虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
生成模块,基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
进一步的,本发明还提供了一种脚本文件加固设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述所述的脚本文件加固方法。
本发明提供的脚本文件加固的方法、装置及设备,具有如下技术效果:
本发明可以以实现对应用程序的脚本文件的加固,规避现有逆向工具的反编译,增加反编译的难度,从而可以极大程度地提高文件的安全性,并且本发明不改变文件的源码程序,能够与其它保护方案保持良好的兼容性。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案和优点,下面将对实施例或现有技术描述中所需要使用的附图作简单的介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它附图。
图1是本发明实施例提供的一种脚本文件加固方法的流程示意图;
图2是本发明实施例提供的一种对待加固脚本文件所对应的函数数据进行解析处理的流程示意图;
图3是本发明实施例提供的一种树形结构的嵌套函数数据的结构示意图;
图4是本发明实施例提供的一种树形结构的嵌套函数数据进行递归解析的一种示意图;
图5是本发明实施例提供的基于转换常量、虚拟指令以及虚拟环境切换指令生成加固后的脚本文件的一种实施方式的流程示意图;
图6是本发明实施例提供的执行虚拟指令所需要的上下文结构体的结构示意图;
图7是本发明实施例提供的另一种脚本文件加固方法的流程示意图;
图8是本发明实施例提供的另一种脚本文件加固方法的流程示意图;
图9本发明实施例提供的另一种脚本文件加固方法的流程示意图;
图10是本发明实施例提供的一种脚本文件加固装置。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或服务器不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
以下具体介绍文件加固的实现过程,具体的,如图1所示,图1是本发明实施例提供的一种文件加固方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的系统或服务器产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。具体的,所述方法可以包括:
S102、对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
本说明书实施例中,所述待加固脚本文件可以包括需要进行加固处理的脚本文件,通过对脚本文件的加固处理可以避免脚本文件被破译。具体的,所述待加固脚本文件可以包括一个或多个脚本文件。
在一种可实施的方式中,所述待加固脚本文件可以包括但不限于luac文件,所述luac文件为lua源码编译得到的包含lua字节码的可在lua虚拟机上执行的文件。
在一些可实施的方式中,所述待加固脚本文件所对应的函数数据包括一个或多个函数数据,当所述待加固脚本文件所对应的函数数据包括多个函数数据时,多个函数数据之间存在嵌套关系,嵌套函数数据可以包括具有调用关系的多个函数数据。
所述嵌套函数数据可以包括具有调用关系的多个函数数据。
在一些实施例中,如图2所示,当待加固脚本文件所对应的函数数据包括多个函数数据时,所述对所述待加固脚本文件所对应的函数数据进行解析处理具体可以通过如下步骤实现:
S1022:获取所述待加固脚本文件中的嵌套函数数据。
本说明书实施例中,如图3所示,图3是本发明实施例提供的一种树形结构的嵌套函数数据的示意图。
具体的,需要对待加固脚本文件进行解析得到相应的函数数据。在一种可实施的方式中,所述待加固脚本文件可以为luac文件,所述luac文件包括Header(文件头)和Function Block(函数体),其中Header是对字节码文件的一些描述信息(例如解析器的版本号,支持的运行的机器类型等等),而FunctionBlock则包含了函数数据的所有信息。
可以理解的是,在luac文件进行解析后,解析出来的Function Block可能为一个,也可能为多个,当解析出来的FunctionBlock为多个时,多个Function Block之间嵌套存在,形成图3中示出的树形结构的嵌套函数数据,具体的,在该树形结构中,Function BlockM可以调用Function Block A和Function Block B,Function Block A可以调用FunctionBlock A1和Function Block A2,Function Block B可以调用Function Block B1,Function Block B可以调用Function Block B1.1和Function Block B1.2。
S1024、对所述嵌套函数数据进行递归解析处理,得到所述待加固脚本文件所对应的函数数据;
具体的,对图3所示的树形结构执行递归解析,遍历所述树形结构,得到待加固脚本文件所对应的函数数据。
在一种可以实现的方式中,如图4所示,图4是本发明提供的一种树形结构的嵌套函数数据进行递归解析的一种示意图。具体的,可以根据函数数据间的调用关系依次解析出函数数据,具体的,可以按照函数数据间的调用关系,依次遍历树形结构的嵌套函数数据,得到函数数据。
在一些实施例中,可以维护一个函数列表来选修解析得到的函数数据,具体的,可以按照递归解析过程中解析的顺序将获取到的所述待加固脚本文件所对应的函数数据依次排列添加到所述函数列表中,也可以依据嵌套函数数据的层数逐层将每层的嵌套的函数数据添加至所述函数列表中。
进一步的,在另一些可实施的方式中,当获取的所述待加固脚本文件所对应的函数数据包括一个函数数据时,直接对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量。
S1026、对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量。
在一种可实施的方式中,获取的待加固脚本文件为luac文件,在对所述待加固脚本文件所对应的函数数据进行解析后得到如下信息:
Function block of a Lua 5 binary chunk(Lua字节码文件中函数体的存储结构)
因此,在对所述待加固脚本文件所对应的函数数据进行解析后,通过直接读取list of instructions(code)(指令列表)可以获取到对所述待加固脚本文件所对应的函数数据解析后所对应的执行指令,在对所述待加固脚本文件所对应的函数数据进行解析后,通过直接读取list of constants(常量列表)可以获取到对所述待加固脚本文件所对应的函数数据解析后所对应的解析常量,可以理解的是,当所述待加固脚本文件所对应的函数数据包括多个函数数据时,对多个所述函数数据进行逐个解析处理得到每个函数数据的执行指令和解析常量。
可以理解的是,当获取的待加固脚本文件包括一个脚本文件时,对获取的所述待加固脚本文件执行上述步骤,当获取的待加固脚本文件包括多个脚本文件时,对待加固脚本文件逐个进行上述步骤。
S104、对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;
在本说明书实施例中,所述执行指令在指令转换加固处理的过程中会产生转换常量和待编码虚拟指令,所述待编码指令为还未引用常量的指令,所述转换常量产生后也会被存储于上述在对所述待加固脚本文件所对应的函数数据进行解析后得到所示的常量列表(list of constants)中;可以理解的是,所述执行指令与转化加固处理后生成的所述待编码虚拟指令是一一对应的,即对所述执行指令逐条翻译,可以获取每条执行指令所对应的待编码虚拟指令。
进一步的,所述转换常量与所述解析指令存储于上述在对所述待加固脚本文件所对应的函数数据进行解析后得到所示的常量列表(list of constants)中后,可以记录所述解析常量在所述常量列表中的位置信息以及所述转换常量在所述常量列表中的位置信息,用以标识转换常量以及解析常量在所述常量列表中的位置。
S106、基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;
在一种可以实施的方式中,所述虚拟指令可以但不限于为在lua虚拟机之上构造的虚拟机所定义的指令。
进一步的,在一种可以实施的方式中,所述基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令可以通过以下步骤实现:
将所述解析常量在所述常量列表中的位置信息编码至所述待编码虚拟指令,得到所述虚拟指令。
具体的,在生成一条虚拟指令时,该虚拟指令可以引用一个或多个解析常量,在具体实现过程中,所述解析常量在产生后,存储于上述在对所述待加固脚本文件所对应的函数数据进行解析后得到所示的常量列表(list of constants)中并记录所述解析常量在所述常量列表中的位置,因此,在所述解析常量在常量列表里的位置信息已经确定了的情况下,根据所要生成的虚拟指令的功能要求,将所需求的解析常量的位置信息编码进所要生成的虚拟指令中,即可实现基于所述解析常量得到虚拟指令。
可以理解的是,所述虚拟指令的结构是任意定义的,但是,生成的虚拟指令需要完成执行指令相同的功能,即执行指令转换之后需要得到等价替换的虚拟指令,因此,在对原始待加固脚本文件对应的函数数据解析出的执行指令进行转换得到虚拟指令的过程中,需要将原始的待加固脚本文件所对应的函数数据解析后所对应的解析常量按照虚拟指令的功能要求编码至虚拟指令中。
在一种可实施的方案中,假设待加固脚本文件对应的函数数据解析出如下一条执行指令:
LOADK ABx R(A):=Kst(Bx)
Loads constant number Bx into register R(A).Constants are usually
numbers or strings.Each function has its own constant list,or pool.
该执行指令含义如下:将常量Bx加载到寄存器R(A)中,常量Bx可以是数字或字符串,函数数据设置有常量列表,可以根据虚拟指令中常量的位置信息从常量列表中获取函数数据所对应的常量。
在对上述的执行指令转换为虚拟指令的过程中,由于得到的虚拟指令需要完成执行指令相同的功能,因此,虽然虚拟指令可以任意定义,但是需要将执行指令中的编码A与Bx编码至待编码虚拟指令中,得到最终的虚拟指令,具体的,这里的编码规则可以自己任意设置,本文给出一个编码方法示例:
最终的虚拟指令长度设计为32bit,其中6bit用来表示指令类型,9bit用来存储A,剩下的17bit用来存储Bx,则编码结果如下
可以理解的是,上述的转换加固处理为转换成一种功能上等价,但是难于阅读和理解的形式的行为。这样可以在不改变源码以及原始功能的情况下实现脚本文件的自定义加固,提高程序的安全性。
S108、获取虚拟环境切换指令。
本说明书实施例中,所述虚拟环境切换指令可以用于创建虚拟指令执行的虚拟环境,以便执行所述虚拟指令。
S110、基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
在一种可以实施的方式中,如图5所示,基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件可以通过如下步骤实现:
S1102、基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成函数体;
可以理解的是,在本说明书中,为了执行转换后的所述虚拟指令,需要在形成的函数体的前面插入虚拟环境切换指令,优选的,在一种可实施的方式中,当待加固脚本文件为luac文件时,所述虚拟环境切换指令可以为如下所示的代码:
通过上述该段指令,创建了图6所示的执行虚拟指令所需要的上下文结构体,如图6所示,图6所示的结构体中保存了虚拟机运行所需要的信息。、
可以理解的是,所述虚拟环境切换指令创建了图6所示的执行虚拟指令所需要的上下文结构体(vmcontext),并且将真实环境的registers(寄存器),upvals(外层局域变量)constants(常量)保存起来,用以实现虚拟指令的执行循环。
S1104、基于所述函数体和加固前的文件头生成加固后的脚本文件。
具体的,对上述步骤中生成的函数体以及加固前的文件头进行重新拼装,得到加固后的脚本文件。
本发明可以规避现有逆向工具的反编译,增加反编译的难度,从而可以极大程度地提高文件的安全性,并且本发明不改变文件的源码程序,本发明加固之后的脚本文件可以在原生虚拟机上正常运行,能够与其它保护方案保持良好的兼容性。
在另一种可实施的方案中,如图7所示,图7是本发明实施例提供的另一种脚本文件加固方法的流程示意图,所述脚本文件加固方法包括:
S202、对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
具体的,步骤S202的具体解释请分别参照上述实施例的相关描述,这里不再赘述。
S204、判断所述待加固脚本文件所对应的函数数据是否满足预设加固条件;
若判断出所述待加固脚本文件所对应的函数数据满足预设加固条件,则执行步骤S206,若判断出所述待加固脚本文件所对应的函数数据不满足预设加固条件,则结束待加固脚本文件的加固过程。
在一种可实施的方案中,所述预设加固条件可以但不限于根据用户需要自定义的加固条件。例如,可以定义对一些不中的函数数据不进行加固:具体的,本发明的文件加固过程会造成一定代码体积膨胀和性能损失,用户为了平衡安全性和性能损失,选择一些不重要的函数数据不进行加固处理,可以有效的平衡加固过程的安全性以及避免代码性能的损失。
在另一种可实施的方案中,可以设定对闭包指令不进行加固。具体的,可以对在执行指令列表中扫描到的执行指令进行判断,判断该执行指令是否为闭包指令,如果该执行指令为闭包指令,则说明该执行指令暂不支持加固,则结束待加固脚本文件的加固过程,如果该执行指令不是闭包指令,则继续执行步骤S206。
可以理解的是,在上述步骤S204、判断所述待加固脚本文件所对应的函数数据是否满足预设加固条件存在以下几种情况:
当所述待加固脚本文件所对应的函数数据为一个时,若判断出所述函数数据满足加固条件,则,执行步骤S206,若判断处所述函数数据不满足加固条件,则结束对待加固脚本文件的加固过程;
当所述待加固脚本文件所对应的函数数据为多个时,需要依次判断所述多个函数数据是否均满足加固条件,在多个函数数据均满足加固条件的情况下,在执行步骤S206,否则结束对待加固脚本文件的加固过程。
S206、对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;
S208、基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;
S210、获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
S212、基于所述解析常量、所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
具体的,步骤S206-S212的具体解释请参照上述实施例中的相关描述,这里不再赘述。
进一步的,所述待加固脚本文件所对应的函数数据包括一个或多个函数数据;
在另一种可实施的方式中,当所述待加固脚本文件所对应的函数数据包括多个函数数据时,如图8所示,图8是本发明实施例提供的另一种脚本文件加固方法的流程示意图,所述脚本文件加固方法包括:
S302、对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
S304、判断所述待加固脚本文件所对应的函数数据是否存在满足预设加固条件的函数数据;
若判断出所述待加固脚本文件所对应的函数数据存在满足预设加固条件的函数数据,则执行步骤S306,若判断出所述待加固脚本文件所对应的函数数据不存在满足预设加固条件的函数数据,则结束对所述待加固脚本文件的加固过程。
具体的,在本实施例中,所述待加固脚本文件对应多个函数数据,但是,与上述实施例不同的是,在本实施例中,依次判断多个函数数据是否满足预设加固条件,对满足预设加固条件的函数数据执行步骤S306。例如,在本实施例中,所述待加固脚本文件包含有4个函数数据f1,f2,f3和f4,依顺序依次判断该四个函数数据是否满足预设加固条件,当正在判断的函数数据满足预设加固条件,则直接对该函数数据执行步骤S306,再次顺次判断后面的函数数据,显然的,该种判断边判断边执行的方式仅是一种优选方式,在其他可实施的方式中,也可以将待加固脚本文件所对应的所有函数均判断完成后,将满足预设加固条件的函数数据顺次排列,再顺次对满足预设加固条件的函数数据执行步骤S306。
S306、对满足预设加固条件的函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量。
S308、基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;
S310、获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
S312、基于所述解析常量、所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
可以理解的是,在本实施例中,未注明之处请参照上述实施例的具体描述,这里不再赘述。
进一步的,在另一种可实施的方案中,如图9所示,图9所以本发明实施例提供的另一种脚本文件加固方法的流程示意图,(图9对图1示出的脚本文件加固方法的流程示意图进行编辑)在上述实施例中示出的基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令步骤之后,所述脚本文件加固方法还包括:
S108':解码所述虚拟指令,得到所述虚拟指令的等价操作指令;
在一种可以实施的方式中,为了执行获得的虚拟指令,可以对虚拟指令进行直接解码,具体执行过程可以参照如下步骤:
1)解析所述虚拟指令,获得A,Bx值;
2)从图6中的vmcontext中保存的常量列表中,取出下标为Bx的值;
3)将第二步取得的值保存到vmcontext中的寄存器列表里下标为A处。
得到等价的伪代码:
loadk 1,#A
loadk 2,#Bx
loadk 3,0
val=vmcontext[‘contexts’][Bx]
vmcontext[‘registers’][A]=val
可以理解的是,在虚拟指令的执行循环中,使用上述解析出的伪代码代替原来的loadk A Bx指令,不需要将获取的执行指令存储在寄存器中,这样可以节约虚拟指令的存储与取值,以及解析指令的成本。因此,在实施实现中,虚拟指令并不存储于加固之后的脚本文件中,而是只在加固过程中存在。
进一步的,如图10所示,图10为本发明实施例提供的一种脚本文件加固装置的结构示意图,具体的,所述装置包括:
解析处理模块,用于对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
指令转换加固处理模块,用于对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;
编码处理模块,用于基于所述转换常量和所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令;
虚拟环境切换指令获取模块,用于获取所述虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
生成模块,用于基于所述解析常量、所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
进一步的,所述脚本文件加固装置还包括:
解码模块,用于解码所述虚拟指令,得到所述虚拟指令的等价操作指令;
所述生成模块还用于基于所述转换常量、所述等价操作指令以及所述虚拟指令切换指令生成加固后的脚本文件。
优选的,所述解析处理模块包括:
嵌套函数数据获取单元,用于当所述待加固脚本文件所对应的函数数据包括多个函数数据时,获取所述待加固脚本文件中的嵌套函数数据,所述嵌套函数数据包括具有调用关系的多个函数数据;
递归解析处理单元,用于对所述具有调用关系的多个函数数据进行递归解析处理,得到所述待加固脚本文件所对应的函数数据;
函数数据解析处理单元,用于对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量。
进一步的,所述装置还包括:
第一判断模块,用于在对所述函数数据所对应的执行指令进行指令转换加固处理之前,判断所述待加固脚本文件所对应的函数数据是否满足预设加固条件。
进一步的,所述装置还包括:
第二判断模块,用于在所述对所述函数数据所对应的执行指令进行指令转换加固处理之前判断所述待加固脚本文件所对应的函数数据是否存在满足预设加固条件的函数数据。
进一步的,所述生成模块包括:
函数体生成单元,用于基于所述解析常量、所述转换常量以及所述虚拟指令生成函数体;
文件头确定单元,用于将所述虚拟环境切换指令作为文件头;
生成单元,用于基于所述函数体和所述文件头生成加固后的脚本文件。
进一步的,所述装置还包括:
存储模块,用于将所述解析常量和所述转换常量存储在常量列表中;
位置信息记录模块,用于记录所述解析常量在所述常量列表中的位信息以及所述转换常量在所述常量列表中的位置信息。
进一步的,所述编码处理模块包括:
编码单元,用于将所述解析常量在所述常量列表中的位置信息编码至所述待编码虚拟指令,得到所述虚拟指令。
所述的装置实施例中的装置与方法实施例基于同样的发明构思。
进一步的,在另一种可以实施的方式中,本发明实施例还提供了一种文件加固设备,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现上述所述的文件加固方法
需要说明的是:上述本发明实施例先后顺序仅仅为了描述,不代表实施例的优劣。且上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、系统和服务器实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种脚本文件加固方法,其特征在于,所述方法包括:
对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;所述待编码虚拟指令为功能与所述执行指令等价、形式较执行指令复杂且未引用常量的指令,所述转换常量为存储于对所述待加固脚本文件所对应的函数数据进行解析后得的常量列表中的常量;
将所述解析常量在所述常量列表中的位置信息编码至所述待编码虚拟指令,得到虚拟指令;
获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
2.根据权利要求1所述的脚本文件加固方法,其特征在于,所述基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令之后,所述方法还包括:
解码所述虚拟指令,得到所述虚拟指令的等价操作指令;
获取虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
基于所述转换常量、所述等价操作指令以及所述虚拟环境切换指令生成加固后的脚本文件。
3.根据权利要求1或2所述的脚本文件加固方法,其特征在于,所述待加固脚本文件所对应的函数数据包括一个或多个函数数据;
当所述待加固脚本文件所对应的函数数据包括多个函数数据时,所述对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量包括:
获取所述待加固脚本文件中的嵌套函数数据,所述嵌套函数数据包括具有调用关系的多个函数数据;
对所述嵌套函数数据进行递归解析处理,得到所述待加固脚本文件所对应的函数数据;
对所述待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据所对应的执行指令和解析常量。
4.根据权利要求2所述的脚本文件加固方法,其特征在于,在所述对所述函数数据所对应的执行指令进行指令转换加固处理之前,所述方法还包括:
判断所述待加固脚本文件所对应的函数数据是否满足预设加固条件;
若是,执行对所述函数数据所对应的执行指令进行指令转换加固处理的步骤。
5.根据权利要求2所述的脚本文件加固方法,其特征在于,在所述对所述函数数据所对应的执行指令进行指令转换加固处理之前,所述方法还包括:
判断所述待加固脚本文件所对应的函数数据是否存在满足预设加固条件的函数数据;
若是,所述对所述函数数据所对应的执行指令进行指令转换加固处理包括对满足预设加固条件的函数数据所对应的执行指令进行指令转换加固处理。
6.根据权利要求1所述的脚本文件加固方法,其特征在于,所述基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件包括:
基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成函数体;
基于所述函数体和加固前的文件头生成加固后的脚本文件。
7.根据权利要求1所述的脚本文件加固方法,其特征在于,所述方法还包括:
将所述解析常量和所述转换常量存储在常量列表中;
记录所述解析常量在所述常量列表中的位置信息以及所述转换常量在所述常量列表中的位置信息。
8.根据权利要求7所述的脚本文件加固方法,其特征在于,所述基于所述解析常量对所述待编码虚拟指令进行编码处理,得到虚拟指令包括:
将所述解析常量在所述常量列表中的位置信息编码至所述待编码虚拟指令中,得到所述虚拟指令。
9.一种脚本文件加固装置,其特征在于,所述装置包括:
解析处理模块,用于对待加固脚本文件所对应的函数数据进行解析处理,得到所述函数数据的执行指令和解析常量;
指令转换加固处理模块,用于对所述函数数据所对应的执行指令进行指令转换加固处理,得到待编码虚拟指令和转换常量;所述待编码虚拟指令为功能与所述执行指令等价、形式较执行指令复杂且未引用常量的指令,所述转换常量为存储于对所述待加固脚本文件所对应的函数数据进行解析后得的常量列表中的常量;
编码处理模块,用于将所述解析常量在所述常量列表中的位置信息编码至所述待编码虚拟指令,得到虚拟指令;
虚拟环境切换指令获取模块,用于获取所述虚拟环境切换指令,所述虚拟环境切换指令用于执行所述虚拟指令;
生成模块,基于所述转换常量、所述虚拟指令以及所述虚拟环境切换指令生成加固后的脚本文件。
10.一种脚本文件加固设备,其特征在于,所述设备包括处理器和存储器,所述存储器中存储有至少一条指令、至少一段程序、代码集或指令集,所述至少一条指令、所述至少一段程序、所述代码集或指令集由所述处理器加载并执行以实现如权利要求1至8任一项所述的脚本文件加固方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910216723.8A CN110032838B (zh) | 2019-03-21 | 2019-03-21 | 一种脚本文件加固方法、装置及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201910216723.8A CN110032838B (zh) | 2019-03-21 | 2019-03-21 | 一种脚本文件加固方法、装置及设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN110032838A CN110032838A (zh) | 2019-07-19 |
CN110032838B true CN110032838B (zh) | 2023-05-12 |
Family
ID=67236462
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201910216723.8A Active CN110032838B (zh) | 2019-03-21 | 2019-03-21 | 一种脚本文件加固方法、装置及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN110032838B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10783082B2 (en) | 2019-08-30 | 2020-09-22 | Alibaba Group Holding Limited | Deploying a smart contract |
CN110675256B (zh) * | 2019-08-30 | 2020-08-21 | 阿里巴巴集团控股有限公司 | 部署和执行智能合约的方法及装置 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016139078A1 (en) * | 2015-03-02 | 2016-09-09 | Inventio Ag | Protecting a computer program against reverse engineering |
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN107729725A (zh) * | 2017-10-09 | 2018-02-23 | 南京南瑞集团公司 | 一种基于虚拟机指令修改的Android应用加固系统及方法 |
CN108829396A (zh) * | 2018-06-15 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN109189470A (zh) * | 2018-08-21 | 2019-01-11 | 北京奇虎科技有限公司 | 代码加固方法及装置 |
CN109344575A (zh) * | 2018-08-17 | 2019-02-15 | 北京奇虎科技有限公司 | Lua脚本文件处理方法、装置及计算设备 |
-
2019
- 2019-03-21 CN CN201910216723.8A patent/CN110032838B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2016139078A1 (en) * | 2015-03-02 | 2016-09-09 | Inventio Ag | Protecting a computer program against reverse engineering |
CN106503496A (zh) * | 2016-12-08 | 2017-03-15 | 合肥康捷信息科技有限公司 | 基于操作码替换与合并的Python脚本程序防逆转方法 |
CN107729725A (zh) * | 2017-10-09 | 2018-02-23 | 南京南瑞集团公司 | 一种基于虚拟机指令修改的Android应用加固系统及方法 |
CN108829396A (zh) * | 2018-06-15 | 2018-11-16 | 腾讯科技(深圳)有限公司 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
CN109344575A (zh) * | 2018-08-17 | 2019-02-15 | 北京奇虎科技有限公司 | Lua脚本文件处理方法、装置及计算设备 |
CN109189470A (zh) * | 2018-08-21 | 2019-01-11 | 北京奇虎科技有限公司 | 代码加固方法及装置 |
Non-Patent Citations (2)
Title |
---|
Handler混淆增强的虚拟机保护方法;谢鑫等;《计算机工程与应用》;20150521(第15期);全文 * |
基于操作码合并的Python程序防逆转算法;王小强等;《计算机工程》;20180515(第05期);全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN110032838A (zh) | 2019-07-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10409966B2 (en) | Optimizing and protecting software | |
TWI730654B (zh) | 部署和執行智能合約的方法及裝置 | |
CN108681457B (zh) | 基于代码下沉与残码解释的Android应用程序保护方法 | |
CN109948308A (zh) | 代码安全保护方法、装置、电子设备和计算机可读存储介质 | |
KR101861341B1 (ko) | 애플리케이션 코드의 역난독화 장치 및 이를 이용한 애플리케이션 코드의 역난독화 방법 | |
CN112214736A (zh) | 一种代码加密方法及相关组件 | |
JP6162733B2 (ja) | コンピュータ環境における式の変換 | |
CN110032838B (zh) | 一种脚本文件加固方法、装置及设备 | |
KR102176742B1 (ko) | 안드로이드 앱의 호출 관계도 생성 방법, 이를 수행하기 위한 기록매체 및 장치 | |
CN112115427A (zh) | 代码混淆方法、装置、电子设备及存储介质 | |
CN101084478B (zh) | 为计算机程序代码加水印 | |
WO2021175053A1 (zh) | 一种在虚拟机中执行功能模块的方法和装置 | |
CN110119601A (zh) | 基于应用程序安装包的程序加固方法及装置 | |
CN111723345A (zh) | 基于回调函数的控制流混淆方法及系统 | |
JP2004062220A (ja) | 情報処理装置、情報処理方法、およびプログラム変換装置 | |
JP2008226010A (ja) | コンパイル方法及びコンパイル装置 | |
CN112528342B (zh) | 一种基于编译中间结果的软件保护方法 | |
CN105095698A (zh) | 基于最近执行的程序代码的程序代码模糊处理 | |
CN112084498A (zh) | 数据反混淆方法、装置、设备及存储介质 | |
Basu et al. | Automatic generation of compact alphanumeric shellcodes for x86 | |
US20030204638A1 (en) | Scripting language for processing typed structured data | |
JP5277825B2 (ja) | プログラム難読化装置及び難読化プログラム | |
CN116541280B (zh) | 一种基于神经网络的模糊测试用例生成方法 | |
KR101554393B1 (ko) | 프로그램의 유사도 비교를 위한 데이터 처리 방법, 장치 및 컴퓨터 프로그램 제품 | |
JP2009211646A (ja) | データ秘匿プログラム、データ読出プログラム、データ秘匿装置及びデータ読出装置 |
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 |