CN108829396B - 脚本编译的方法、脚本执行的方法、相关装置及系统 - Google Patents
脚本编译的方法、脚本执行的方法、相关装置及系统 Download PDFInfo
- Publication number
- CN108829396B CN108829396B CN201810634863.2A CN201810634863A CN108829396B CN 108829396 B CN108829396 B CN 108829396B CN 201810634863 A CN201810634863 A CN 201810634863A CN 108829396 B CN108829396 B CN 108829396B
- Authority
- CN
- China
- Prior art keywords
- script
- compiling
- target
- sequencing
- rule
- 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
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
Landscapes
- Engineering & Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明实施例公开了一种脚本编译的方法,包括:获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码。本发明实施例公开了一种脚本执行的方法、脚本编译装置、脚本执行装置以及脚本执行系统。本发明实施例生成的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
Description
技术领域
本发明涉及计算机处理领域,尤其涉及脚本编译的方法、脚本执行的方法、相关装置及系统。
背景技术
Lua是一种小巧的脚本语言。Lua脚本可以很容易的被调用,也可以反过来调用其他函数,这使得Lua脚本被广泛的应用。不仅仅作为扩展脚本,还可以作为普通的配置文件,同时,Lua脚本容易理解和维护。
目前,可以通过Luac工具对Lua脚本进行编译,并生成字节码,这种字节码可以直接被Lua虚拟机解释执行。由于字节码是二进制格式的,不易约定,因此具有良好的加密效果。
然而,采用上述方式生成的Lua字节码很容易被Lua反编译工具破解,破解的门槛很低,因此,不适合采用Lua脚本保存敏感数据,存在严重的信息安全隐患。
发明内容
本发明实施例提供了一种脚本编译的方法、脚本执行的方法、相关装置及系统,生成的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
有鉴于此,本发明的第一方面提供了一种脚本编译的方法,包括:
获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;
按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码。
本发明的第二方面提供了一种脚本执行的方法,包括:
接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元排序结果生成的,所述预编译单元排序结果为所述脚本编译装置按照第一排序规则对待编译脚本中的所述多个预编译单元进行排序后得到的;
按照所述第一排序规则执行所述目标字节码。
本发明的第三方面提供了一种脚本执行系统,所述脚本执行系统包括脚本编译装置以及脚本执行装置;
所述脚本编译装置,用于获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;
所述脚本编译装置,用于按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
所述脚本编译装置,用于根据所述预编译单元排序结果生成目标字节码;
所述脚本编译装置,用于向所述脚本执行装置发送所述目标字节码,所述脚本执行装置接收所述脚本编译装置发送的目标字节码;
所述脚本执行装置,用于按照所述第一排序规则执行所述目标字节码。
本发明的第四方面提供了一种脚本编译装置,包括:
获取模块,用于获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;
排序模块,用于按照第一排序规则对所述获取模块获取的所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
生成模块,用于根据所述排序模块排序得到的所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码。
本发明的第五方面提供了一种脚本执行装置,包括:
接收模块,用于接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元排序结果生成的,所述预编译单元排序结果为所述脚本编译装置按照第一排序规则对待编译脚本中的所述多个预编译单元进行排序后得到的;
执行模块,用于按照所述第一排序规则执行所述接收模块接收的所述目标字节码。
本发明的第六方面提供了一种脚本编译装置,其特征在于,包括:存储器、收发器、处理器以及总线系统;
其中,所述存储器用于存储程序;
所述处理器用于执行所述存储器中的程序,包括如下步骤:
获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;
按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码;
所述总线系统用于连接所述存储器以及所述处理器,以使所述存储器以及所述处理器进行通信。
本发明的第七方面提供了一种脚本执行装置,包括:存储器、收发器、处理器以及总线系统;
其中,所述存储器用于存储程序;
所述处理器用于执行所述存储器中的程序,包括如下步骤:
接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元排序结果生成的,所述预编译单元排序结果为所述脚本编译装置按照第一排序规则对待编译脚本中的所述多个预编译单元进行排序后得到的;
按照所述第一排序规则执行所述目标字节码;
所述总线系统用于连接所述存储器以及所述处理器,以使所述存储器以及所述处理器进行通信。
本发明的第八方面提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述各方面所述的方法。
从以上技术方案可以看出,本发明实施例具有以下优点:
本发明实施例中,提供了一种脚本编译的方法,首先脚本编译装置获取待编译脚本,其中,待编译脚本包括多个预编译单元,然后脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序,以得到预编译单元排序结果,其中,第一排序规则用于指示每个预编译单元的排列顺序,最后脚本编译装置根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码。通过上述方式,重新对待编译脚本中的各个预编译单元进行排序,由此打乱预编译单元的顺序,增加预编译单元排序的复杂度,因此,得到的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
附图说明
图1为本发明实施例中脚本执行系统的一个架构示意图;
图2为本发明实施例中脚本生成及执行方法一个交互流程示意图;
图3为本发明实施例中脚本编译的方法一个实施例示意图;
图4为本发明实施例中操作码指令的一个格式示意图;
图5为本发明实施例中操作码指令的另一个格式示意图;
图6为本发明实施例中操作码指令的另一个格式示意图;
图7为本发明实施例中操作码指令的另一个格式示意图;
图8为本发明实施例中原始字节码文件格式的一个示意图;
图9为本发明实施例中自定义字节码文件格式的一个示意图;
图10为本发明实施例中脚本执行的方法一个实施例示意图;
图11为本发明应用场景中对脚本进行加密的一个流程示意图;
图12为本发明实施例中脚本编译装置的一个实施例示意图;
图13为本发明实施例中脚本编译装置的另一个实施例示意图;
图14为本发明实施例中脚本编译装置的另一个实施例示意图;
图15为本发明实施例中脚本编译装置的另一个实施例示意图;
图16为本发明实施例中脚本编译装置的另一个实施例示意图;
图17为本发明实施例中脚本执行装置的一个实施例示意图;
图18为本发明实施例中脚本编译装置的一个结构示意图;
图19为本发明实施例中脚本执行装置的一个结构示意图;
图20为本发明实施例中脚本执行系统的一个实施例示意图。
具体实施方式
本发明实施例提供了一种脚本编译的方法、脚本执行的方法、相关装置及系统,生成的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”、“第四”等(如果存在)是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例例如能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
应理解,本发明中的脚本具体可以是Lua脚本,Lua脚本是一个小巧的脚本语言,Lua脚本的设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。Lua脚本由标准C语言编写而成,几乎在所有操作系统和平台上都可以编译和运行。Lua脚本有一个同时进行的即时编译器(Just-In-Time Compiler)项目,提供在特定平台上的即时编译功能。Lua脚本可以很容易的被C代码或C++代码调用,也可以反过来调用C代码的函数或C++代码的函数,这使得Lua脚本在应用程序中可以被广泛应用。不仅仅作为扩展脚本,也可以作为普通的配置文件,代替可扩展标记语言(Extensible Markup Language,XML)等文件格式,并且更容易理解和维护。
本发明可以应用于需要对Lua脚本进行加密的场景,比如,随客户端一起发布的客户端游戏脚本,或者发布到服务器的服务端脚本,又或者应用于网页应用、游戏开发、扩展和数据库插件以及安全系统等。
为了便于理解,请参阅图1,图1为本发明实施例中脚本执行系统的一个架构示意图,如图所示,本发明中的脚本编译装置可以部署于至少一台终端设备上,或者部署于至少一台服务器上,采用脚本编译装置可以针对Lua 5.3的自定义格式对脚本进行编译和加班,并生成经过编译和加密后的Lua字节码,这种Lua字节码只能被相应改造后的脚本执行装置来解释并执行,从而极大地提高Lua脚本被破解的难度。脚本执行装置同样可以部署于至少一台终端设备上,或者部署于至少一台服务器上。
可以理解的是,脚本编译装置具体可以是Lua字节码编译工具——Luac,Luac把用Lua语言编写的程序翻译为二进制文件,之后这些文件可被载入并执行。脚本执行装置具体可以是Lua虚拟机,Lua虚拟机主要功能是用于解析编码后得到的字节码,并执行其中的指令集,最后输出结果。
下面将结合图2,解释脚本生成及执行方法,请参阅图2,图2为本发明实施例中脚本生成及执行方法一个交互流程示意图,如图所示,具体地:
步骤S1中,假设脚本编译装置为Luac,脚本执行装置为Lua虚拟机,首先Luac获取待编译的Lua脚本;
步骤S2中,Luac采用预先定义的编码规则重新对Lua脚本进行编译,其中,编码规则可以是对Lua脚本中的签名信息进行变更,或者对多个元信息进行重新排序,或者对多个预编译单元进行重新排序等;
步骤S3中,Luac根据编码规则重新生成Lua字节码;
步骤S4中,Luac向Lua虚拟机发送编码后的Lua字节码;
步骤S5中,对于Lua虚拟机而言,同样了解预先定义的编码规则,因此,Lua虚拟机可以采用预先定义的编码规则对Lua字节码进行反编译,并执行该Lua字节码中的指令。
下面将从脚本编译装置的角度,对本发明中脚本编译的方法进行介绍,请参阅图3,本发明实施例中脚本编译的方法一个实施例包括:
101、获取待编译脚本,其中,待编译脚本包括多个预编译单元;
本实施例中,脚本编译装置先获取待编译脚本,其中,字节码是一种包含执行程序且由一序列操作码或数据对组成的二进制格式文件。
待编译脚本中包含有多个预编译单元,预编译单元(chunk)的主要目标是加快装载,可以保护源代码免于被用户意外修改,预编译并非意味着执行更快速,因为脚本中的单元总会在执行前被编译为字节码,脚本编译装置允许这些字节码被存为文件,以用于后续的运行。
102、按照第一排序规则对待编译脚本中的多个预编译单元进行排序,以得到预编译单元排序结果,其中,第一排序规则用于指示每个预编译单元的排列顺序;
本实施例中,脚本编译装置根据预先设定的第一排序规则,对该待编译脚本中的多个预编译单元进行排序,并得到预编译单元排序结果。其中,第一排序规则是预先定义用于指示各个预编译单元排列顺序的规则。
具体地,假设排序之前多个预编译单元的排序为如下表1所示。
表1
这些预编译单元加载到内存中实际会还原成一个函数。假设表1所示的各个预编译单元排列顺序为初始排序,那么本实施例将打乱原有的预编译单元排序,按照预先定义的第一排序规则对待编译脚本中的多个预编译单元进行重新排序。需要说明的是,第一排序规则只要不同于目前定义的预编译单元排序规则即可,若存在11个预编译单元,则第一排序规则有(11!-1)种可能性,“!”为阶乘符号,“1”表示目前所定义的一种排序规则可能性。为了便于介绍,请参阅表2,表2为预编译单元排序结果的一种可能性,然而并不应理解为对本发明的限定。
表2
103、根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码。
本实施例中,脚本编译装置根据预编译单元排序结果生成目标字节码,目标字节码可以为Lua脚本。此处,完成了目标字节码的编译,脚本编译装置可以将编译完的目标字节码发送给脚本执行装置,如Lua虚拟机。这里的脚本执行装置与脚本编译装置一样,也经过了相应的修改,从而能够采用第一排序规则对目标字节码进行反编译,并执行该目标字节码。
本发明实施例中,提供了一种脚本编译的方法,首先脚本编译装置获取待编译脚本,其中,待编译脚本包括多个预编译单元,然后脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序,以得到预编译单元排序结果,其中,第一排序规则用于指示每个预编译单元的排列顺序,最后脚本编译装置根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码。通过上述方式,重新对待编译脚本中的各个预编译单元进行排序,由此打乱预编译单元的顺序,增加预编译单元排序的复杂度,因此,得到的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
可选地,在上述图3对应的实施例的基础上,本发明实施例提供的脚本编译的方法第一个可选实施例中,多个预编译单元中包括操作码序列,操作码序列中包含多个操作码;
还可以包括:
按照第二排序规则对操作码序列中的多个操作码进行排序,以得到操作码排序结果,其中,第二排序规则用于指示每个操作码的排列顺序;
根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码,可以包括:
根据预编译单元排序结果以及操作码排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及第二排序规则执行的字节码。
本实施例中,还可以针对预编译单元中的操作码序列进行修改,即随机混淆操作码。这里的操作码可以是指Lua源码被编译后生成的指令码,用于指定Lua虚拟机要执行的操作,随机混淆则是通过随机算法打乱Lua源码中操作码的顺序,以达到字节码加密的目的。其中,操作码序列包含有多个操作码指令,每个操作码指令包含一个操作码。下面将集合图4至图7对操作码指令进行介绍。
请参阅图4,图4为本发明实施例中操作码指令的一个格式示意图,如图所示,图4表示iABC操作码指令的格式,其中,i表示6位的操作码,A表示一个8位的数据,B表示一个9位的数据,C表示一个9位的无符号数据。请参阅图5,图5为本发明实施例中操作码指令的另一个格式示意图,如图所示,图5表示iABx操作码指令的格式,其中,i表示6位的操作码,A表示一个8位的数据,B表示一个9位的数据,x表示数据组合。请参阅图6,图6为本发明实施例中操作码指令的另一个格式示意图,如图所示,图6表示iAsBx操作码指令的格式,其中,表示i表示6位操作码,A表示一个8位的数据;B表示一个9位的数据s表示是有符号数。请参阅图7,图7为本发明实施例中操作码指令的另一个格式示意图,如图所示,图7表示iAx操作码指令的格式,其中,i表示6位的操作码,A表示一个8位的数据,x表示数据组合。
由此可见,操作码指令可以通过一个32位整数表示,整数的低6位用于表示操作码,剩下的26位表示操作数。在Lua5.3的实现中,可以采用表3所示操作码排序规则。
表3
序号 | 操作码 | 序号 | 操作码 | 序号 | 操作码 |
0 | OP_MOVE | 17 | OP_POW | 34 | OP_TEST |
1 | OP_LOADK | 18 | OP_DIV | 35 | OP_TESTSET |
2 | OP_LOADKX | 19 | OP_IDIV | 36 | OP_CALL |
3 | OP_LOADBOOL | 20 | OP_BAND | 37 | OP_TALLCALL |
4 | OP_LOADNIL | 21 | OP_BOR | 38 | OP_RETURN |
5 | OP_GETUPVAL | 22 | OP_BXOR | 39 | OP_FORLOOP |
6 | OP_GETTABUP | 23 | OP_SHL | 40 | OP_FORPREP |
7 | OP_GETTABLE | 24 | OP_SHR | 41 | OP_TFORCALL |
8 | OP_SETTABUP | 25 | OP_UNM | 42 | OP_TFORLOOP |
9 | OP_SETUPVAL | 26 | OP_BNOT | 43 | OP_SETLIST |
10 | OP_SETTABLE | 27 | OP_NOT | 44 | OP_CLOSURE |
11 | OP_NEWTABLE | 28 | OP_LEN | 45 | OP_VARARG |
12 | OP_SELF | 29 | OP_CONCAT | 46 | OP_EXTRAARG |
13 | OP_ADD | 30 | OP_JMP | ||
14 | OP_SUB | 31 | OP_EQ | ||
15 | OP_MUL | 32 | OP_LT | ||
16 | OP_MOD | 33 | OP_LE |
因此,当脚本编译装置需要生成一个赋值指令时,会把指令的操作码部分设置为0,当需要生成一个加法指令时,会把指令的操作码部分设置为13。每一条指令的低六位都是指令的指令码,比如0代表赋值指令,13代表加法指令等。
脚本编译装置可以通过随机算法打乱表3所定义的操作码顺序,即按照第二排序规则对操作码序列中的多个操作码进行排序,以得到操作码排序结果,可以采用表4所示操作码排序规则。
表4
当脚本编译装置需要生成一个赋值指令时,会把指令的操作码部分设置为13,当需要生成一个加法指令时,会把指令的操作码部分设置为17。通过这样的混淆之后,使用未经改造过的脚本执行装置执行自定义指令会产生错误的结果,因此,脚本执行装置也需要知道操作码指令的排列顺序,即获知第二排序规则,最后利用第一排序规则以及第二排序规则执行的字节码。
需要说明的是,第二排序规则只要不同于目前定义的操作码排序规则即可,若存在47个操作码,除去最后一个用于特殊用途外,则第二排序规则有(46!-1)种可能性,“1”表示目前所定义的一种排序规则可能性。
其次,本发明实施例中,多个预编译单元中包括操作码序列,操作码序列中包含多个操作码,还可以按照第二排序规则对操作码序列中的多个操作码进行排序,以得到操作码排序结果,最后根据预编译单元排序结果以及操作码排序结果生成目标字节码。通过上述方式,不但能够对多个预编译单元进行顺序调整,还可以打乱预编译单元中操作码序列的顺序,一旦打乱操作码序列中各个操作码顺序,就会产生相当多的排列情形,从而能够有效地降低脚本被破解的可能性,大幅度地提升脚本的安全性。
可选地,在上述图3对应的第一个实施例的基础上,本发明实施例提供的脚本编译的方法第二个可选实施例中,按照第二排序规则对操作码序列中的多个操作码进行排序,以得到操作码排序结果之前,还可以包括:
接收操作码更新指令,其中,操作码更新指令中携带目标操作码所对应的修改信息,目标操作码属于多个操作码中的操作码;
根据操作码更新指令更新目标操作码之间的调用关系,以使目标操作码中的每个操作码在被执行时处于可直接调用状态。
本实施例中,操作码的操作码排序结果是通过随机算法生成的,那么能够保证随机之后操作码还能正确生成和执行的前提是,在Lua虚拟机的实现中,操作码之间不能有定义顺序的依赖关系。然而,在Lua5.3的源码实现中,有部分目标操作码用到了操作码之间的顺序关系,因此,需要对源代码进行更新,从而解除目标操作码之间的调用关系,使得目标操作码中的每个操作码在被执行时处于可直接调用状态。
下面将结合具体的代码说明如何解除目标操作码直接的顺序关系。
1、生成二元运算指令;
其中,二元运算是由两个元素形成第三个元素的一种规则,例如数的加法及乘法,由两个集合形成第三个集合的产生方法或构成规则称为二次运算,如任意二数相加或相乘而得另一数,或者任意二集合相交或相并而得另一集合,或者任意一个多行矩阵与一个多列矩阵相乘而得另一矩阵,或者任意二函数合成而为另一函数,以上加、乘、交、并、积及合成均属二元运算。
目前采用的Lua5.3源码如下所示:
根据操作码更新指令更新目标操作码之间的调用关系之后,得到修改后的源码如下所示:
2、生成比较运算指令;
比较运算指令的功能相当于减法指令,只是对操作数之间运算比较,不保存结果。比较运算指令执行后,将对标志寄存器产生影响。其他相关指令通过识别这些被影响的标志寄存器位来得知比较结果。
目前采用的Lua5.3源码如下所示:
根据操作码更新指令更新目标操作码之间的调用关系之后,得到修改后的源码如下所示:
3、生成前置运算指令;
前置运算是先将变量的值加1,然后使用加1后的值参与运算,而后置运算是先使用该值参与运算,然后再将该值加1。前置运算与后置运算都是先将变量的值加1。
目前采用的Lua5.3源码如下所示:
根据操作码更新指令更新目标操作码之间的调用关系之后,得到修改后的源码如下所示:
4、消除故障(debug)接口获取元方法名;
Lua脚本没有内置的调试设施。它使用一种特殊的接口,即debug接口。这种debug接口依赖函数和钩子(hooks)。该debug接口允许构造不同种类的调试器,分析器以及其他工具用以从解释器得到所需的信息。
目前采用的Lua5.3源码如下所示:
根据操作码更新指令更新目标操作码之间的调用关系之后,得到修改后的源码如下所示:
case OP_ADD:tm=TM_ADD;break;
case OP_SUB:tm=TM_SUB;break;
case OP_MUL:tm=TM_MUL;break;
case OP_MOD:tm=TM_MOD;break;
case OP_POW:tm=TM_POW;break;
case OP_DIV:tm=TM_DIV;break;
case OP_IDIV:tm=TM_IDIV;break;
case OP_BAND:tm=TM_BAND;break;
case OP_BOR:tm=TM_BOR;break;
case OP_BXOR:tm=TM_BXOR;break;
case OP_SHL:tm=TM_SHL;break;
case OP_SHR:tm=TM_SHR;break;
再次,本发明实施例中,脚本编译装置在得到操作码排序结果之前,需要先接收操作码更新指令,然后根据操作码更新指令更新目标操作码之间的调用关系,以使目标操作码中的每个操作码在被执行时处于可直接调用状态。通过上述方式,需要预先对源代码进行修改,避免操作码之间存在顺序依赖关系,使得每个操作码在被执行的过程中都能够处于独立状态,直接调用即可,无用依赖于其他操作码的实现,从而保证了对操作码进行排序的可行性。
可选地,在上述图3对应的实施例的基础上,本发明实施例提供的脚本编译的方法第三个可选实施例中,待编译脚本还包括多个元信息;
按照第三排序规则对待编译脚本中的多个元信息进行排序,以得到元信息排序结果,其中,第三排序规则用于指示每个元信息的排列顺序;
根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码,可以包括:
根据预编译单元排序结果以及元信息排序结果生成目标字节码,目标字节码为脚本执行装置按照第一排序规则以及第三排序规则执行的字节码。
本实施例中,待编译脚本还包括多个元信息,其中,元信息是关于信息的信息,用于描述信息的结构、语义、用途和用法等。
脚本编译装置根据预先设定的第三排序规则,对该待编译脚本中的多个元信息进行排序,并得到元信息排序结果。其中,第三排序规则用于指示各个元信息的排列顺序。具体地,假设排序之前多个元信息的排序为如下表5所示。
表5
1 | LUAC_VERSION | 字节码Lua版本 |
2 | LUAC_FORMAT | 格式类型 |
3 | LUAC_DATA | 用于捕获转换错误的数据 |
4 | int类型字节数 | 向下取整函数 |
5 | size_t类型字节数 | 用于记录大小的数据类型” |
6 | Instruction字节数 | 单个指令所占用的字节数 |
7 | lua_Integer字节数 | 用于Lua应用程序编程接口接收整数值 |
8 | lua_Number字节数 | 用于改变Lua操作其它数字类型 |
9 | LUAC_INT | 用于匹配大小端的整数 |
10 | LUAC_NUM | 用于匹配浮点数格式的浮点数 |
随机混淆表5中的元信息顺序,按照第三排序规则对待编译脚本中的多个元信息进行排序,以得到元信息排序结果,为了便于介绍,请参阅表6,表6为元信息排序结果的一种可能性,然而并不应理解为对本发明的限定。
表6
序号 | 元信息 | 主要功能 |
1 | int类型字节数 | 向下取整函数 |
2 | LUAC_INT | 用于匹配大小端的整数 |
3 | LUAC_NUM | 用于匹配浮点数格式的浮点数 |
4 | LUAC_VERSION | 字节码Lua版本 |
5 | Instruction字节数 | 单个指令所占用的字节数 |
6 | LUAC_FORMAT | 格式类型 |
7 | size_t类型字节数 | 用于记录大小的数据类型” |
8 | LUAC_DATA | 用于捕获转换错误的数据 |
9 | lua_Integer字节数 | 用于Lua应用程序编程接口接收整数值 |
10 | lua_Number字节数 | 用于改变Lua操作其它数字类型 |
需要说明的是,第三排序规则只要不同于目前定义的元信息排序规则即可,若存在10个元信息的字段,则第三排序规则有(10!-1)种可能性,“1”表示目前所定义的一种排序规则可能性。
其次,本发明实施例中,待编译脚本还包括多个元信息,脚本编译装置还可以按照第三排序规则对待编译脚本中的多个元信息进行排序,以得到元信息排序结果,最后根据预编译单元排序结果以及元信息排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及第三排序规则执行的字节码。通过上述方式,不但能够对多个预编译单元进行顺序调整,还可以打乱元信息的顺序,一旦打乱元信息顺序,便会产生相当多的排列情形,从而能够有效地降低脚本被破解的可能性,大幅度地提升脚本的安全性。
可选地,在上述图3对应的第三个实施例的基础上,本发明实施例提供的脚本编译的方法第四个可选实施例中,元信息对应于原始数据;
获取待编译脚本之后,方法还包括:
对至少一个原始数据进行修改,以得到目标数据;
根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码,可以包括:
根据预编译单元排序结果以及目标数据生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及目标数据执行的字节码。
本实施例中,元信息可以对应于一个原始数据,比如元信息LUAC_INT的原始数据为0x5678,元信息LUAC_NUM的原始数据为370.5。脚本编译装置可以对至少一个原始数据进行修改,从而得到目标数据。比如将元信息LUAC_INT的原始数据0x5678修改为目标数据0x3456,又比如将元信息LUAC_NUM的原始数据370.5修改为目标数据371.4。
需要说明的是,目标数据的位数不一定要和原始数据一致。此外,类似Instruction字节数这样的原始数据是不能被修改的,这是因为这些原始数据定义的是具体的字节数。
再次,本发明实施例中,脚本编译装置可以对多个原始数据中的至少一个原始数据进行修改,以得到目标数据,然后根据预编译单元排序结果以及目标数据生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及目标数据执行的字节码。通过上述方式,还可以自定义部分的原始数据,自定义的数据很难被直接破解,因此很大程度上增加了脚本被破解的难度,从而提升脚本的安全性。
可选地,在上述图3对应的实施例的基础上,本发明实施例提供的脚本编译的方法第五个可选实施例中,待编译脚本还包括签名信息,签名信息包括第一字符和第二字符;
获取待编译脚本之后,还可以包括:
将签名信息中的第一字符更新为第三字符,根据第三字符和第二字符确定目标签名信息,其中,第一字符和第三字符均属于不可打印字符;
或,
将签名信息中的第二字符更新为第四字符,根据第二字符和第四字符确定目标签名信息,其中,第二字符和第四字符均属于可打印字符;
或,
将签名信息中的第一字符更新为第三字符,并将签名信息中的第二字符更新为第四字符,根据第三字符和第四字符确定目标签名信息;
根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码,可以包括:
根据预编译单元排序结果以及目标签名信息生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及目标签名信息执行的字节码。
本实施例中,待编译脚本还包括签名信息,其中,签名信息包括第一字符和第二字符,这里的第一字符表示不可打印的美国信息交换标准代码(American Standard Codefor Information Interchange,ASCII)字符,第二字符表示可打印的ASCII字符。下面将对不可打印ASCII字符进行介绍,请参阅表7,表7为不可打印ASCII字符。
表7
十六进制 | 缩写 | 十六进制 | 缩写 | 十六进制 | 缩写 |
00 | NUL | 0B | VT | 16 | SYN |
01 | SOH | 0C | FF | 17 | ETB |
02 | STX | 0D | CR | 18 | CAN |
03 | ETX | 0E | SO | 19 | EM |
04 | EOT | 0F | SI | 1A | SUB |
05 | ENQ | 10 | DLE | 1B | ESC |
06 | ACK | 11 | DC1 | 1C | FS |
07 | BEL | 12 | DC2 | 1D | GS |
08 | BS | 13 | DC3 | 1E | RS |
09 | HT | 14 | DC4 | 1F | US |
0A | LF | 15 | NAK | 7F | DEL |
可以将将签名信息中的第一字符更新为第三字符,假设第一字符为“\x1B”,那么可以将“\x1B”替换为表7中其他的不可打印字符,比如“\x119”或者“\x12”等,此处不做限定。
类似地,也可以将将签名信息中的第二字符更新为第四字符,假设第二字符为“Lua”,那么可以将该字符自定义为“Lll”。通过这一步,一般的Lua反编译器已经不能识别自定义的Lua字节码了。
对于字节码签名的修改,假设签名的长度不变,且假设不可打印字符一共有30个,可打印字符为128个,那么就存在30+128×128×128中签名的可能,而在实际应用中,签名信息的长度还是可变的,因此,签名的可能性就会更多,从而极大地增加了签名被破译的难度。只有同样了解该签名编码方式的脚本执行装置,才能对其进行解码操作。
为了便于介绍,请参阅图8,图8为本发明实施例中原始字节码文件格式的一个示意图,如图所示,在原始的字节码文件中包括签名信息、文件的元信息和chunk。其中,签名信息表示为“\x1bLua”。文件的元信息顺序依次为:LUAC_VERSION、LUAC_FORMAT、LUAC_DATA、int类型字节数、size_t类型字节数、Instruction字节数、lua_Integer字节数、lua_Number字节数、LUAC_INT以及LUAC_NUM。预编译的chunk的顺序依次为:调试源码信息、定义开始行、定义结束行、固定参数个数、变参信息、最大寄存器数量、操作码序列、常量表、Upvalues表、内嵌函数信息以及调试信息。
为了增加字节码被破译的难度,可以对原始字节码文件格式进行改造,请参阅图9,图9为本发明实施例中自定义字节码文件格式的一个示意图如图所示,签名信息表示为“\x19Lll”。文件的元信息顺序依次为:LUAC_INT、lua_Number字节数、LUAC_FORMAT、LUAC_NUM、LUAC_DATA、lua_Integer字节数、size_t类型字节数、LUAC_VERSION、Instruction字节数以及int类型字节数。预编译的chunk的顺序依次为:调试源码信息、调试信息、定义开始行、固定参数个数、定义结束行、常量表、变参信息、最大寄存器数量、混淆过的操作码序列、Upvalues表以及内嵌函数信息。
其次,本发明实施例中,待编译脚本还包括签名信息,签名信息包括第一字符和第二字符,脚本编译装置可以对第一字符和第二字符中的至少一项进行改写,其中,第一字符属于不可打印字符,第二字符属于可打印字符。通过上述方式,由于不可打印字符有30多个,可打印字符有120多个,因此,对这些字符进行修改会存在成千上万种可能性,大幅地增加了脚本被破解的难度,而一般的反编译器已经难以识别自定义的字节码了,从而提升脚本的安全性。
可选地,在上述图3、图3对应的第一个至第五个实施例中任一项的基础上,本发明实施例提供的脚本编译的方法第六个可选实施例中,根据预编译单元排序结果生成目标字节码之后,还可以包括:
采用对称加密算法对目标字节码进行加密处理,得到目标加密脚本;
向脚本执行装置发送目标加密脚本,以使脚本执行装置采用对称加密算法对目标加密脚本进行解密处理,得到目标字节码。
本实施例中,在实际应用中,在编译得到目标字节码之后还可以采用对称加密算法对目标字节码进行加密处理,从而生成目标加密脚本。脚本编译装置将目标加密脚本发送给脚本执行装置,使得脚本执行装置能够同样采用对称加密算法对目标加密脚本进行解密,解密可以认为是加密的逆过程,由此可以得到加密前的目标字节码。
可以理解的是,对称加密算法包含但不仅限于数据加密标准(Data EncryptionStandard,DES)、国际数据加密算法(International Data Encryption Algorithm,IDEA)、数字签名算法(Digital Signature Algorithm,DSA)以及RC4算法等。
其中,采用RC4算法对自定义的Lua字节码进行加密是一个比较好的选择,这是因为RC4算法是一种流加密算法,其加解密速度都非常快。RC4是一种流加密算法,它的密钥长度可变,但是加解密密钥相同,因此RC4属于对称加密。RC4是针对字节流进行加解密,因此RC4更适合于网络通信数据的加密解密,RC4能有效应用的原因还包括运算速度极快的特点。
进一步地,本发明实施例中,在脚本编译装置根据预编译单元排序结果生成目标字节码之后,还可以采用对称加密算法对目标字节码进行加密处理,得到目标加密脚本,然后向脚本执行装置发送目标加密脚本,以使脚本执行装置采用对称加密算法对目标加密脚本进行解密处理,得到目标字节码。通过上述方式,采用对称加密算法对目标字节码进行加密可以有效地提升脚本的安全性,降低脚本被恶意窃取的可能性,此外,对称加密算法具有算法公开,计算量小,加密速度快以及加密效率高的优势。而RC4算法加解密速度都非常快。在算法速度和安全性的综合考虑下,使用RC4算法对自定义的Lua字节码进行加密,还能有效地提升方案的可行性和实用性。
下面将从脚本执行装置的角度,对本发明中脚本执行的方法进行介绍,请参阅图10,本发明实施例中脚本执行的方法一个实施例包括:
201、接收脚本编译装置发送的目标字节码,其中,目标字节码为脚本编译装置根据预编译单元排序结果生成的,预编译单元排序结果为脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序后得到的;
本实施例中,脚本编译装置先获取待编译脚本,其中,字节码是一种包含执行程序且由一序列操作码或数据对组成的二进制格式文件。待编译脚本中包含有多个预编译单元。
然后脚本编译装置根据预先设定的第一排序规则,对该待编译脚本中的多个预编译单元进行排序,并得到预编译单元排序结果。其中,第一排序规则是预先定义用于指示各个预编译单元排列顺序的规则。具体过程可参阅步骤102所述的内容,此处不做赘述。
脚本编译装置根据预编译单元排序结果生成目标字节码,目标字节码可以为Lua脚本。此处,完成了目标字节码的编译,脚本编译装置可以将编译完的目标字节码发送给脚本执行装置,脚本执行装置可以为Lua虚拟机。
202、按照第一排序规则执行目标字节码。
本实施例中,脚本执行装置在收到目标字节码之后,由于脚本执行装置和脚本编译装置一样,预先经过了代码修改,因此,也能同步使用第一排序规则对目标字节码进行反编译,并执行该目标字节码。
本发明实施例中,提供了一种脚本编译的方法,首先脚本执行装置接收目标字节码,该目标字节码为脚本编译装置根据预编译单元排序结果生成的,预编译单元排序结果为脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序后得到的,然后脚本执行装置可以按照第一排序规则执行目标字节码。通过上述方式,重新对待编译脚本中的各个预编译单元进行排序,由此打乱预编译单元的顺序,增加预编译单元排序的复杂度,因此,得到的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
可选地,在上述图10对应的实施例的基础上,本发明实施例提供的脚本执行的方法第一个可选实施例中,接收脚本编译装置发送的目标字节码,可以包括:
接收脚本编译装置发送的目标加密脚本,其中,目标加密脚本为脚本编译装置采用对称加密算法对目标字节码进行加密处理后得到的;
采用对称加密算法对目标加密脚本进行解密处理,得到目标字节码。
本实施例中,在实际应用中,在编译得到目标字节码之后还可以采用对称加密算法对目标字节码进行加密处理,从而生成目标加密脚本。脚本编译装置将目标加密脚本发送给脚本执行装置,使得脚本执行装置能够同样采用对称加密算法对目标加密脚本进行解密,解密可以认为是加密的逆过程,由此可以得到加密前的目标字节码。其中,采用RC4算法对自定义的Lua字节码进行加密是一个比较好的选择,这是因为RC4算法是一种流加密算法,其加解密速度都非常快。
为了便于理解,请参阅图11,图11为本发明应用场景中对脚本进行加密的一个流程示意图,如图所示,具体地:
步骤A1中,首先获取Lua虚拟机的源代码;
步骤A2中,然后对Lua虚拟机的源代码进行修改,并且自定义字节码文件的格式,混淆操作码;
步骤A3中,采用修改后的Lua虚拟机源代码对Luac进行修改;
步骤A4中,采用修改后的Lua虚拟机源代码对Lua虚拟机进行修改;
步骤A5中,使用步骤A3中得到的Luac,将所有Lua脚本编译为Lua字节码;
步骤A6中,得到改造后的Lua字节码;
步骤A7中,对步骤A6中得到的Lua字节码使用RC4加密得到可发布的加密后的字节码;
步骤A8中,对加密后的字节码进行RC4解密,并且得到未加密的自定义字节码;
步骤A9中,加载改造后的字节码,从而执行内存中的chunk。
其次,本发明实施例中,在脚本编译装置根据预编译单元排序结果生成目标字节码之后,还可以采用对称加密算法对目标字节码进行加密处理,得到目标加密脚本,然后向脚本执行装置发送目标加密脚本,以使脚本执行装置采用对称加密算法对目标加密脚本进行解密处理,得到目标字节码。通过上述方式,采用对称加密算法对目标字节码进行加密可以有效地提升脚本的安全性,降低脚本被恶意窃取的可能性,此外,对称加密算法具有算法公开,计算量小,加密速度快以及加密效率高的优势。而RC4算法加解密速度都非常快。在算法速度和安全性的综合考虑下,使用RC4算法对自定义的Lua字节码进行加密,还能有效地提升方案的可行性和实用性。
下面对本发明中的脚本编译装置进行详细描述,请参阅图12,图12为本发明实施例中脚本编译装置一个实施例示意图,脚本编译装置30包括:
获取模块301,用于获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;
排序模块302,用于按照第一排序规则对所述获取模块301获取的所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
生成模块303,用于根据所述排序模块302排序得到的所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码。
本实施例中,获取模块301获取待编译脚本,其中,所述待编译脚本包括多个预编译单元,排序模块302按照第一排序规则对所述获取模块301获取的所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序,生成模块303根据所述排序模块302排序得到的所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码。
本发明实施例中,提供了一种脚本编译装置,首先脚本编译装置获取待编译脚本,其中,待编译脚本包括多个预编译单元,然后脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序,以得到预编译单元排序结果,其中,第一排序规则用于指示每个预编译单元的排列顺序,最后脚本编译装置根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码。通过上述方式,重新对待编译脚本中的各个预编译单元进行排序,由此打乱预编译单元的顺序,增加预编译单元排序的复杂度,因此,得到的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
可选地,在上述图12所对应的实施例的基础上,本发明实施例提供的脚本编译装置30的另一实施例中,所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;
所述排序模块302,还用于按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,以得到操作码排序结果,其中,所述第二排序规则用于指示每个操作码的排列顺序;
所述生成模块303,具体用于根据所述预编译单元排序结果以及所述操作码排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第二排序规则执行的字节码。
其次,本发明实施例中,多个预编译单元中包括操作码序列,操作码序列中包含多个操作码,还可以按照第二排序规则对操作码序列中的多个操作码进行排序,以得到操作码排序结果,最后根据预编译单元排序结果以及操作码排序结果生成目标字节码。通过上述方式,不但能够对多个预编译单元进行顺序调整,还可以打乱预编译单元中操作码序列的顺序,一旦打乱操作码序列中各个操作码顺序,就会产生相当多的排列情形,从而能够有效地降低脚本被破解的可能性,大幅度地提升脚本的安全性。
可选地,在上述图12所对应的实施例的基础上,请参阅图13,本发明实施例提供的脚本编译装置30的另一实施例中,所述脚本编译装置30还包括接收模块304以及更新模块305;
所述接收模块304,用于所述排序模块302按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,以得到操作码排序结果之前,接收操作码更新指令,其中,所述操作码更新指令中携带目标操作码所对应的修改信息,所述目标操作码属于所述多个操作码中的操作码;
所述更新模块305,用于根据所述接收模块304接收的所述操作码更新指令更新所述目标操作码之间的调用关系,以使所述目标操作码中的每个操作码在被执行时处于可直接调用状态。
再次,本发明实施例中,脚本编译装置在得到操作码排序结果之前,需要先接收操作码更新指令,然后根据操作码更新指令更新目标操作码之间的调用关系,以使目标操作码中的每个操作码在被执行时处于可直接调用状态。通过上述方式,需要预先对源代码进行修改,避免操作码之间存在顺序依赖关系,使得每个操作码在被执行的过程中都能够处于独立状态,直接调用即可,无用依赖于其他操作码的实现,从而保证了对操作码进行排序的可行性。
可选地,在上述图13所对应的实施例的基础上,本发明实施例提供的脚本编译装置30的另一实施例中,所述待编译脚本还包括多个元信息;
所述排序模块302,还用于按照第三排序规则对所述待编译脚本中的所述多个元信息进行排序,以得到元信息排序结果,其中,所述第三排序规则用于指示每个元信息的排列顺序;
所述生成模块303,具体用于根据所述预编译单元排序结果以及所述元信息排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第三排序规则执行的字节码。
其次,本发明实施例中,待编译脚本还包括多个元信息,脚本编译装置还可以按照第三排序规则对待编译脚本中的多个元信息进行排序,以得到元信息排序结果,最后根据预编译单元排序结果以及元信息排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及第三排序规则执行的字节码。通过上述方式,不但能够对多个预编译单元进行顺序调整,还可以打乱元信息的顺序,一旦打乱元信息顺序,便会产生相当多的排列情形,从而能够有效地降低脚本被破解的可能性,大幅度地提升脚本的安全性。
可选地,在上述图13所对应的实施例的基础上,请参阅图14,本发明实施例提供的脚本编译装置30的另一实施例中,所述元信息对应于原始数据;
所述脚本编译装置30还包括修改模块306;
所述修改模块306,用于所述获取模块301所述获取待编译脚本,对至少一个原始数据进行修改,以得到目标数据;
所述生成模块303,具体用于根据所述预编译单元排序结果以及所述目标数据生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述目标数据执行的字节码。
再次,本发明实施例中,脚本编译装置可以对多个原始数据中的至少一个原始数据进行修改,以得到目标数据,然后根据预编译单元排序结果以及目标数据生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则以及目标数据执行的字节码。通过上述方式,还可以自定义部分的原始数据,自定义的数据很难被直接破解,因此很大程度上增加了脚本被破解的难度,从而提升脚本的安全性。
可选地,在上述图12所对应的实施例的基础上,请参阅图15,本发明实施例提供的脚本编译装置30的另一实施例中,所述待编译脚本还包括签名信息,所述签名信息包括第一字符和第二字符;
所述脚本编译装置30还包括所述确定模块307;
所述确定模块307,用于所述获取模块301获取待编译脚本之后,将所述签名信息中的所述第一字符更新为第三字符,根据所述第三字符和所述第二字符确定目标签名信息,其中,所述第一字符和所述第三字符均属于不可打印字符;
或,
将所述签名信息中的所述第二字符更新为第四字符,根据所述第二字符和所述第四字符确定所述目标签名信息,其中,所述第二字符和所述第四字符均属于可打印字符;
或,
将所述签名信息中的所述第一字符更新为所述第三字符,并将所述签名信息中的所述第二字符更新为所述第四字符,根据所述第三字符和所述第四字符确定所述目标签名信息;
所述生成模块303,具体用于根据所述预编译单元排序结果以及所述目标签名信息生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则以及所述目标签名信息执行的字节码。
其次,本发明实施例中,待编译脚本还包括签名信息,签名信息包括第一字符和第二字符,脚本编译装置可以对第一字符和第二字符中的至少一项进行改写,其中,第一字符属于不可打印字符,第二字符属于可打印字符。通过上述方式,由于不可打印字符有30多个,可打印字符有120多个,因此,对这些字符进行修改会存在成千上万种可能性,大幅地增加了脚本被破解的难度,而一般的反编译器已经难以识别自定义的字节码了,从而提升脚本的安全性。
可选地,在上述图12至图15中任一项所对应的实施例的基础上,请参阅图16,本发明实施例提供的脚本编译装置30的另一实施例中,所述脚本编译装置30还包括加密模块308和发送模块309;
所述加密模块308,用于所述生成模块303根据所述预编译单元排序结果生成目标字节码之后,采用对称加密算法对所述目标字节码进行加密处理,得到目标加密脚本;
所述发送模块309,用于向所述脚本执行装置发送所述加密模块308加密后的所述目标加密脚本,以使所述脚本执行装置采用所述对称加密算法对所述目标加密脚本进行解密处理,得到所述目标字节码。
进一步地,本发明实施例中,在脚本编译装置根据预编译单元排序结果生成目标字节码之后,还可以采用对称加密算法对目标字节码进行加密处理,得到目标加密脚本,然后向脚本执行装置发送目标加密脚本,以使脚本执行装置采用对称加密算法对目标加密脚本进行解密处理,得到目标字节码。通过上述方式,采用对称加密算法对目标字节码进行加密可以有效地提升脚本的安全性,降低脚本被恶意窃取的可能性,此外,对称加密算法具有算法公开,计算量小,加密速度快以及加密效率高的优势。而RC4算法加解密速度都非常快。在算法速度和安全性的综合考虑下,使用RC4算法对自定义的Lua字节码进行加密,还能有效地提升方案的可行性和实用性。
下面对本发明中的脚本执行装置进行详细描述,请参阅图17,图17为本发明实施例中脚本执行装置一个实施例示意图,脚本执行装置40包括:
接收模块401,用于接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元排序结果生成的,所述预编译单元排序结果为所述脚本编译装置按照第一排序规则对待编译脚本中的所述多个预编译单元进行排序后得到的;
执行模块402,用于按照所述第一排序规则执行所述接收模块401接收的所述目标字节码。
本实施例中,接收模块401接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元排序结果生成的,所述预编译单元排序结果为所述脚本编译装置按照第一排序规则对待编译脚本中的所述多个预编译单元进行排序后得到的,执行模块402按照所述第一排序规则执行所述接收模块401接收的所述目标字节码。
本发明实施例中,提供了一种脚本编译的方法,首先脚本执行装置接收目标字节码,该目标字节码为脚本编译装置根据预编译单元排序结果生成的,预编译单元排序结果为脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序后得到的,然后脚本执行装置可以按照第一排序规则执行目标字节码。通过上述方式,重新对待编译脚本中的各个预编译单元进行排序,由此打乱预编译单元的顺序,增加预编译单元排序的复杂度,因此,得到的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
可选地,在上述图17所对应的实施例的基础上,本发明实施例提供的脚本执行装置40的另一实施例中,
所述接收模块401,具体用于接收所述脚本编译装置发送的目标加密脚本,其中,所述目标加密脚本为所述脚本编译装置采用对称加密算法对所述目标字节码进行加密处理后得到的;
所述执行模块402,具体用于采用所述对称加密算法对所述目标加密脚本进行解密处理,得到所述目标字节码。
其次,本发明实施例中,在脚本编译装置根据预编译单元排序结果生成目标字节码之后,还可以采用对称加密算法对目标字节码进行加密处理,得到目标加密脚本,然后向脚本执行装置发送目标加密脚本,以使脚本执行装置采用对称加密算法对目标加密脚本进行解密处理,得到目标字节码。通过上述方式,采用对称加密算法对目标字节码进行加密可以有效地提升脚本的安全性,降低脚本被恶意窃取的可能性,此外,对称加密算法具有算法公开,计算量小,加密速度快以及加密效率高的优势。而RC4算法加解密速度都非常快。在算法速度和安全性的综合考虑下,使用RC4算法对自定义的Lua字节码进行加密,还能有效地提升方案的可行性和实用性。
图18是本发明实施例脚本编译装置50的结构示意图。脚本编译装置50可包括输入设备510、输出设备520、处理器530和存储器540。本发明实施例中的输出设备可以是显示设备。
存储器540可以包括只读存储器和随机存取存储器,并向处理器530提供指令和数据。存储器540的一部分还可以包括非易失性随机存取存储器(Non-Volatile RandomAccess Memory,NVRAM)。
存储器540存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
本发明实施例中处理器530用于:
获取待编译脚本,其中,所述待编译脚本包括多个预编译单元;
按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码。
可选地,本发明实施例中处理器530还用于:
按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,以得到操作码排序结果,其中,所述第二排序规则用于指示每个操作码的排列顺序;
处理器530具体用于:
根据所述预编译单元排序结果以及所述操作码排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第二排序规则执行的字节码。
可选地,本发明实施例中处理器530还用于:
接收操作码更新指令,其中,所述操作码更新指令中携带目标操作码所对应的修改信息,所述目标操作码属于所述多个操作码中的操作码;
根据所述操作码更新指令更新所述目标操作码之间的调用关系,以使所述目标操作码中的每个操作码在被执行时处于可直接调用状态。
可选地,本发明实施例中处理器530还用于:
按照第三排序规则对所述待编译脚本中的所述多个元信息进行排序,以得到元信息排序结果,其中,所述第三排序规则用于指示每个元信息的排列顺序;
处理器530具体用于:
根据所述预编译单元排序结果以及所述元信息排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第三排序规则执行的字节码。
可选地,本发明实施例中处理器530还用于:
对至少一个原始数据进行修改,以得到目标数据;
处理器530具体用于:
根据所述预编译单元排序结果以及所述目标数据生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述目标数据执行的字节码。
可选地,本发明实施例中处理器530还用于:
将所述签名信息中的所述第一字符更新为第三字符,根据所述第三字符和所述第二字符确定目标签名信息,其中,所述第一字符和所述第三字符均属于不可打印字符;
或,
将所述签名信息中的所述第二字符更新为第四字符,根据所述第二字符和所述第四字符确定所述目标签名信息,其中,所述第二字符和所述第四字符均属于可打印字符;
或,
将所述签名信息中的所述第一字符更新为所述第三字符,并将所述签名信息中的所述第二字符更新为所述第四字符,根据所述第三字符和所述第四字符确定所述目标签名信息;
处理器530具体用于:
根据所述预编译单元排序结果以及所述目标签名信息生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则以及所述目标签名信息执行的字节码。
可选地,本发明实施例中处理器530还用于:
采用对称加密算法对所述目标字节码进行加密处理,得到目标加密脚本;
向所述脚本执行装置发送所述目标加密脚本,以使所述脚本执行装置采用所述对称加密算法对所述目标加密脚本进行解密处理,得到所述目标字节码。
处理器530控制脚本编译装置50的操作,处理器530还可以称为中央处理单元(Central Processing Unit,CPU)。存储器540可以包括只读存储器和随机存取存储器,并向处理器530提供指令和数据。存储器540的一部分还可以包括NVRAM。具体的应用中,脚本编译装置50的各个组件通过总线系统550耦合在一起,其中总线系统550除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统550。
上述本发明实施例揭示的方法可以应用于处理器530中,或者由处理器530实现。处理器530可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器530中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器530可以是通用处理器、数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现成可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器540,处理器530读取存储器540中的信息,结合其硬件完成上述方法的步骤。
图18的相关描述可以参阅图3方法部分的相关描述和效果进行理解,本处不做过多赘述。
图19是本发明实施例脚本执行装置60的结构示意图。脚本执行装置60可包括输入设备610、输出设备620、处理器630和存储器640。本发明实施例中的输出设备可以是显示设备。
存储器640可以包括只读存储器和随机存取存储器,并向处理器630提供指令和数据。存储器640的一部分还可以包括NVRAM。
存储器640存储了如下的元素,可执行模块或者数据结构,或者它们的子集,或者它们的扩展集:
操作指令:包括各种操作指令,用于实现各种操作。
操作系统:包括各种系统程序,用于实现各种基础业务以及处理基于硬件的任务。
本发明实施例中处理器630用于:
接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元排序结果生成的,所述预编译单元排序结果为所述脚本编译装置按照第一排序规则对待编译脚本中的所述多个预编译单元进行排序后得到的;
按照所述第一排序规则执行所述目标字节码。
可选地,本发明实施例中处理器530具体用于:
接收所述脚本编译装置发送的目标加密脚本,其中,所述目标加密脚本为所述脚本编译装置采用对称加密算法对所述目标字节码进行加密处理后得到的;
采用所述对称加密算法对所述目标加密脚本进行解密处理,得到所述目标字节码。
处理器630控制脚本执行装置60的操作,处理器630还可以称为CPU。存储器640可以包括只读存储器和随机存取存储器,并向处理器630提供指令和数据。存储器640的一部分还可以包括NVRAM。具体的应用中,脚本执行装置60的各个组件通过总线系统650耦合在一起,其中总线系统650除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图中将各种总线都标为总线系统650。
上述本发明实施例揭示的方法可以应用于处理器630中,或者由处理器630实现。处理器630可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器630中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器630可以是通用处理器、DSP、ASIC、FPGA或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本发明实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本发明实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器640,处理器630读取存储器640中的信息,结合其硬件完成上述方法的步骤。
图19的相关描述可以参阅图10方法部分的相关描述和效果进行理解,本处不做过多赘述。
请参阅图20,图20为本发明实施例中脚本执行系统的一个实施例示意图,如图所示,脚本执行系统包括脚本编译装置701以及脚本执行装置702;
本实施例中,脚本编译装置701获取待编译脚本,其中,待编译脚本包括多个预编译单元,脚本编译装置701用于按照第一排序规则对待编译脚本中的多个预编译单元进行排序,以得到预编译单元排序结果,其中,第一排序规则用于指示每个预编译单元的排列顺序,脚本编译装置701根据预编译单元排序结果生成目标字节码,脚本编译装置701向脚本执行装置702发送目标字节码,脚本执行装置702接收脚本编译装置发送的目标字节码,脚本执行装置702按照第一排序规则执行目标字节码。
本发明实施例中,提供了一种脚本执行系统,首先脚本编译装置获取待编译脚本,其中,待编译脚本包括多个预编译单元,然后脚本编译装置按照第一排序规则对待编译脚本中的多个预编译单元进行排序,以得到预编译单元排序结果,其中,第一排序规则用于指示每个预编译单元的排列顺序,最后脚本编译装置根据预编译单元排序结果生成目标字节码,其中,目标字节码为脚本执行装置按照第一排序规则执行的字节码。通过上述方式,重新对待编译脚本中的各个预编译单元进行排序,由此打乱预编译单元的顺序,增加预编译单元排序的复杂度,因此,得到的脚本难以被反编译工具破解,只有同样获知预编译单元排序规则的脚本执行装置才能执行该脚本,从而大幅度提升了脚本的安全性。
所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。
Claims (14)
1.一种脚本编译的方法,其特征在于,包括:
获取待编译脚本,其中,所述待编译脚本包括多个预编译单元chunk;
打乱预编译单元的原有排序,按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行重新排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码;
所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;
所述方法还包括:
按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果,其中,所述第二排序规则用于指示每个操作码的排列顺序;
所述根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码,包括:
根据所述预编译单元排序结果以及所述操作码排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第二排序规则执行的字节码。
2.根据权利要求1所述的方法,其特征在于,所述按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,以得到操作码排序结果之前,所述方法还包括:
接收操作码更新指令,其中,所述操作码更新指令中携带目标操作码所对应的修改信息,所述目标操作码属于所述多个操作码中的操作码;
根据所述操作码更新指令更新所述目标操作码之间的调用关系,以使所述目标操作码中的每个操作码在被执行时处于可直接调用状态。
3.根据权利要求1所述的方法,其特征在于,所述待编译脚本还包括多个元信息;
所述方法还包括:
按照第三排序规则对所述待编译脚本中的所述多个元信息进行排序,以得到元信息排序结果,其中,所述第三排序规则用于指示每个元信息的排列顺序;
所述根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码,包括:
根据所述预编译单元排序结果以及所述元信息排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第三排序规则执行的字节码。
4.根据权利要求3所述的方法,其特征在于,所述元信息对应于原始数据;
所述获取待编译脚本之后,所述方法还包括:
对至少一个原始数据进行修改,以得到目标数据;
所述根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码,包括:
根据所述预编译单元排序结果以及所述目标数据生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述目标数据执行的字节码。
5.根据权利要求1所述的方法,其特征在于,所述待编译脚本还包括签名信息,所述签名信息包括第一字符和第二字符;
所述获取待编译脚本之后,所述方法还包括:
将所述签名信息中的所述第一字符更新为第三字符,根据所述第三字符和所述第二字符确定目标签名信息,其中,所述第一字符和所述第三字符均属于不可打印字符;
或,
将所述签名信息中的所述第二字符更新为第四字符,根据所述第二字符和所述第四字符确定所述目标签名信息,其中,所述第二字符和所述第四字符均属于可打印字符;
或,
将所述签名信息中的所述第一字符更新为所述第三字符,并将所述签名信息中的所述第二字符更新为所述第四字符,根据所述第三字符和所述第四字符确定所述目标签名信息;
所述根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码,包括:
根据所述预编译单元排序结果以及所述目标签名信息生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则以及所述目标签名信息执行的字节码。
6.根据权利要求1至5中任一项所述的方法,其特征在于,所述根据所述预编译单元排序结果生成目标字节码之后,所述方法还包括:
采用对称加密算法对所述目标字节码进行加密处理,得到目标加密脚本;
向所述脚本执行装置发送所述目标加密脚本,以使所述脚本执行装置采用所述对称加密算法对所述目标加密脚本进行解密处理,得到所述目标字节码。
7.一种脚本执行的方法,其特征在于,包括:
接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元chunk排序结果生成的,所述预编译单元排序结果为所述脚本编译装置打乱预编译单元的原有排序,按照第一排序规则对待编译脚本中的多个预编译单元进行重新排序后得到的;所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;所述预编译单元排序结果还为所述脚本编译装置按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果后得到的,其中,所述第二排序规则用于指示每个操作码的排列顺序;
按照所述第一排序规则以及所述第二排序规则执行所述目标字节码。
8.根据权利要求7所述的方法,其特征在于,所述接收脚本编译装置发送的目标字节码,包括:
接收所述脚本编译装置发送的目标加密脚本,其中,所述目标加密脚本为所述脚本编译装置采用对称加密算法对所述目标字节码进行加密处理后得到的;
采用所述对称加密算法对所述目标加密脚本进行解密处理,得到所述目标字节码。
9.一种脚本执行系统,其特征在于,所述脚本执行系统包括脚本编译装置以及脚本执行装置;
所述脚本编译装置,用于获取待编译脚本,其中,所述待编译脚本包括多个预编译单元chunk;
所述脚本编译装置,用于打乱预编译单元的原有排序,按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行重新排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
所述脚本编译装置,用于根据所述预编译单元排序结果生成目标字节码;
所述脚本编译装置,用于向所述脚本执行装置发送所述目标字节码,所述脚本执行装置接收所述脚本编译装置发送的目标字节码;
所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;
所述脚本编译装置还用于:按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果,其中,所述第二排序规则用于指示每个操作码的排列顺序;
所述脚本执行装置,用于按照所述第一排序规则以及所述第二排序规则执行所述目标字节码。
10.一种脚本编译装置,其特征在于,包括:
获取模块,用于获取待编译脚本,其中,所述待编译脚本包括多个预编译单元chunk;
排序模块,用于打乱预编译单元的原有排序,按照第一排序规则对所述获取模块获取的所述待编译脚本中的所述多个预编译单元进行重新排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
生成模块,用于根据所述排序模块排序得到的所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码;
所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;
所述脚本编译装置还用于:
按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果,其中,所述第二排序规则用于指示每个操作码的排列顺序;
所述生成模块具体用于:
根据所述预编译单元排序结果以及所述操作码排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第二排序规则执行的字节码。
11.一种脚本执行装置,其特征在于,包括:
接收模块,用于接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元chunk排序结果生成的,所述预编译单元排序结果为所述脚本编译装置打乱预编译单元的原有排序,按照第一排序规则对待编译脚本中的多个预编译单元进行重新排序后得到的;所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;所述预编译单元排序结果还为所述脚本编译装置按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果后得到的,其中,所述第二排序规则用于指示每个操作码的排列顺序;
执行模块,用于按照所述第一排序规则以及所述第二排序规则执行所述接收模块接收的所述目标字节码。
12.一种脚本编译装置,其特征在于,包括:存储器、收发器、处理器以及总线系统;
其中,所述存储器用于存储程序;
所述处理器用于执行所述存储器中的程序,包括如下步骤:
获取待编译脚本,其中,所述待编译脚本包括多个预编译单元chunk;
打乱预编译单元的原有排序,按照第一排序规则对所述待编译脚本中的所述多个预编译单元进行重新排序,以得到预编译单元排序结果,其中,所述第一排序规则用于指示每个预编译单元的排列顺序;
根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码;
所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;
还包括:
按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果,其中,所述第二排序规则用于指示每个操作码的排列顺序;
所述根据所述预编译单元排序结果生成目标字节码,其中,所述目标字节码为脚本执行装置按照所述第一排序规则执行的字节码,包括:
根据所述预编译单元排序结果以及所述操作码排序结果生成所述目标字节码,其中,所述目标字节码为所述脚本执行装置按照所述第一排序规则以及所述第二排序规则执行的字节码;
所述总线系统用于连接所述存储器以及所述处理器,以使所述存储器以及所述处理器进行通信。
13.一种脚本执行装置,其特征在于,包括:存储器、收发器、处理器以及总线系统;
其中,所述存储器用于存储程序;
所述处理器用于执行所述存储器中的程序,包括如下步骤:
接收脚本编译装置发送的目标字节码,其中,所述目标字节码为所述脚本编译装置根据预编译单元chunk排序结果生成的,所述预编译单元排序结果为所述脚本编译装置打乱预编译单元的原有排序,按照第一排序规则对待编译脚本中的多个预编译单元进行重新排序后得到的;所述多个预编译单元中包括操作码序列,所述操作码序列中包含多个操作码;所述预编译单元排序结果还为所述脚本编译装置按照第二排序规则对所述操作码序列中的所述多个操作码进行排序,打乱操作码序列中操作码的顺序,以得到操作码排序结果后得到的,其中,所述第二排序规则用于指示每个操作码的排列顺序;
按照所述第一排序规则以及所述第二排序规则执行所述目标字节码;
所述总线系统用于连接所述存储器以及所述处理器,以使所述存储器以及所述处理器进行通信。
14.一种计算机可读存储介质,包括指令,当其在计算机上运行时,使得计算机执行如权利要求1至6中任一项所述的方法,或者执行如权利要求7至8中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810634863.2A CN108829396B (zh) | 2018-06-15 | 2018-06-15 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810634863.2A CN108829396B (zh) | 2018-06-15 | 2018-06-15 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108829396A CN108829396A (zh) | 2018-11-16 |
CN108829396B true CN108829396B (zh) | 2022-02-01 |
Family
ID=64142648
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810634863.2A Active CN108829396B (zh) | 2018-06-15 | 2018-06-15 | 脚本编译的方法、脚本执行的方法、相关装置及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108829396B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111291333A (zh) * | 2018-12-07 | 2020-06-16 | 中国移动通信集团陕西有限公司 | 一种Java应用程序加密方法及装置 |
CN109885990B (zh) * | 2019-03-11 | 2021-01-29 | 腾讯科技(深圳)有限公司 | 脚本管理方法 |
CN110032838B (zh) * | 2019-03-21 | 2023-05-12 | 深圳市腾讯信息技术有限公司 | 一种脚本文件加固方法、装置及设备 |
CN111310133A (zh) * | 2020-02-28 | 2020-06-19 | 西安四叶草信息技术有限公司 | 脚本混淆方法及装置 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102346834A (zh) * | 2011-11-25 | 2012-02-08 | 武汉钢铁(集团)公司 | Java应用软件加密保护的方法 |
CN102789454A (zh) * | 2011-05-16 | 2012-11-21 | 腾讯科技(北京)有限公司 | 一种浏览器网页中的输入框内容即时存储方法及系统 |
CN104166822A (zh) * | 2013-05-20 | 2014-11-26 | 阿里巴巴集团控股有限公司 | 一种数据保护的方法和装置 |
CN105468505A (zh) * | 2014-08-12 | 2016-04-06 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及覆盖率测试装置 |
CN105868589A (zh) * | 2016-03-30 | 2016-08-17 | 网易(杭州)网络有限公司 | 一种脚本加密方法、脚本运行方法及装置 |
CN107169317A (zh) * | 2017-03-31 | 2017-09-15 | 武汉斗鱼网络科技有限公司 | 一种对lua脚本进行加密的方法及装置 |
CN107908392A (zh) * | 2017-11-13 | 2018-04-13 | 平安科技(深圳)有限公司 | 数据采集工具包定制方法、装置、终端和存储介质 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8452005B2 (en) * | 2009-11-30 | 2013-05-28 | Red Hat, Inc. | Unicode-compatible encipherment |
EP2698756B1 (en) * | 2012-08-13 | 2016-01-06 | Nxp B.V. | Local Trusted Service Manager |
US20160274962A1 (en) * | 2015-03-19 | 2016-09-22 | Alcatel-Lucent Usa Inc. | Self-Tuning Troubleshooting Scripts |
US9612768B2 (en) * | 2015-07-23 | 2017-04-04 | Netapp, Inc. | Methods and systems for storing data at different storage tiers of a storage system |
-
2018
- 2018-06-15 CN CN201810634863.2A patent/CN108829396B/zh active Active
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102789454A (zh) * | 2011-05-16 | 2012-11-21 | 腾讯科技(北京)有限公司 | 一种浏览器网页中的输入框内容即时存储方法及系统 |
CN102346834A (zh) * | 2011-11-25 | 2012-02-08 | 武汉钢铁(集团)公司 | Java应用软件加密保护的方法 |
CN104166822A (zh) * | 2013-05-20 | 2014-11-26 | 阿里巴巴集团控股有限公司 | 一种数据保护的方法和装置 |
CN105468505A (zh) * | 2014-08-12 | 2016-04-06 | 腾讯科技(深圳)有限公司 | 覆盖率测试方法及覆盖率测试装置 |
CN105868589A (zh) * | 2016-03-30 | 2016-08-17 | 网易(杭州)网络有限公司 | 一种脚本加密方法、脚本运行方法及装置 |
CN107169317A (zh) * | 2017-03-31 | 2017-09-15 | 武汉斗鱼网络科技有限公司 | 一种对lua脚本进行加密的方法及装置 |
CN107908392A (zh) * | 2017-11-13 | 2018-04-13 | 平安科技(深圳)有限公司 | 数据采集工具包定制方法、装置、终端和存储介质 |
Non-Patent Citations (1)
Title |
---|
lua字节码的加密;https://blog.csdn.net/tanpan004/article/details/73836070;《https://blog.csdn.net/tanpan004/article/details/73836070》;20170831;全文 * |
Also Published As
Publication number | Publication date |
---|---|
CN108829396A (zh) | 2018-11-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108829396B (zh) | 脚本编译的方法、脚本执行的方法、相关装置及系统 | |
EP2962193B1 (en) | Compiler based obfuscation | |
US8286251B2 (en) | Obfuscating computer program code | |
US7549147B2 (en) | Security framework for protecting rights in computer software | |
El-Khalil et al. | Hydan: Hiding information in program binaries | |
US10586026B2 (en) | Simple obfuscation of text data in binary files | |
KR101521765B1 (ko) | 분간이 난해한 식별자 변환을 이용한 코드 난독화 장치 및 방법 | |
EP1873676B1 (en) | Program converting device, secure processing device, computer program, and recording medium | |
EP2831791A1 (en) | Securing accessible systems using cross-linking | |
CN107077540B (zh) | 用于提供基于云的应用安全服务的方法和系统 | |
CN111639306A (zh) | 离线软件授权方法、装置、设备及存储介质 | |
CN108399319B (zh) | 源代码保护方法、应用服务器及计算机可读存储介质 | |
CN108830096B (zh) | 数据处理方法、装置、电子设备及存储介质 | |
US20190228137A1 (en) | Efficient obfuscation of program control flow | |
CN110737908A (zh) | 加密方法和装置、解密方法和装置、电子设备和介质 | |
CN111159757A (zh) | 文件加密方法、解密方法及相应装置 | |
CN111512307B (zh) | 编译设备和方法 | |
CN110210211A (zh) | 一种数据保护的方法和计算设备 | |
CN114547558B (zh) | 授权方法、授权控制方法及装置、设备和介质 | |
CN106897587A (zh) | 加固应用、加载加固应用的方法和装置 | |
CN104462883A (zh) | 一种apk文件加固的方法 | |
US20210342486A1 (en) | Encrypted data processing | |
JP2007094728A (ja) | 情報処理装置、情報処理システム、プログラムおよび記録媒体 | |
CN110119601A (zh) | 基于应用程序安装包的程序加固方法及装置 | |
CN110990846B (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 |