一种网页代码加固方法、装置及设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种网页代码加固方法、装置及设备。
背景技术
网页代码是指在网页制作过程中用到的一些特殊的“语言”,例如:超级文本标记HTML语言、JavaScript语言等。
以Javascript语言为例,作为前端语言,其运行代码容易被外部人员获取并拿去分析;而在某些核心技术领域,技术拥有方并不希望Javascript代码的计算逻辑被外界知晓。
因此,需要更加安全的代码加固方案。
发明内容
本说明书实施例提供一种网页代码加固方法,用于对网页代码进行加固,以隐藏其核心运算逻辑。
本说明书实施例还提供一种网页代码加固方法,包括:
确定原始网页代码对应的语法树,所述语法树用于表征所述原始网页代码的语法结构;
对所述语法树中的语法块进行加固处理,得到加固后的语法树;
将所述加固后的语法树转换为加固网页代码。
本说明书实施例还提供一种网页代码加固装置,包括:
确定模块,用于确定原始网页代码对应的语法树,所述语法树用于表征所述原始网页代码的语法结构;
加固模块,用于对所述语法树中的语法块进行加固处理,得到加固后的语法树;
转换模块,用于将所述加固后的语法树转换为加固网页代码。
本说明书实施例还提供一种电子设备,包括:
处理器;以及
被安排成存储计算机可执行指令的存储器,所述可执行指令在被执行时使所述处理器执行如上述的方法的步骤。
本说明书实施例还提供一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如上述的方法的步骤。
本说明书实施例采用的上述至少一个技术方案能够达到以下有益效果:
通过从语法树的维度,对原始网页代码对应的语法树中的语法块进行加固处理,以得到加固后的语法树,并转换为加固网页代码。与现有技术中,从原始网页代码的维度进行的加固方案相比,能够有效加固网页代码,提高网页代码的安全性。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本说明书一实施例提供的一种网页代码加固方法的流程示意图;
图2为本说明书一实施例提供的混淆之前的语法块的示意图;
图3为本说明书一实施例提供的混淆之后的代码段的示意图;
图4为本说明书一实施例提供的一种网页代码加固装置的结构示意图;
图5为本说明书一实施例提供的一种电子设备的结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
正如背景技术部分陈述的,现有技术一般从网页代码的维度进行加固,例如:加密其中的常量等;但这种加固方式容易在解密过程中被恢复,并不稳固。基于此,本发明提供一种网页加固方法,通过从网页代码的语法树的维度进行加固,以得到加固的网页代码,能够有效隐藏其核心运算逻辑,确保其运行安全性。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本说明书一实施例提供的一种网页代码加固方法的流程示意图,参见图1,该方法具体可以包括如下步骤:
步骤102、确定原始网页代码对应的语法树,所述语法树用于表征所述原始网页代码的语法结构;
其中,语法树是句子结构的图形表示,它代表了句子的推导结果,有利于理解句子语法结构的层次。
基于此,步骤102的一种实现方式可以为:
对所述原始网页代码进行语法解析处理,得到所述原始网页代码对应的语法树。具体可以示例为:
首先,确定原始网页代码的语言类型,例如:HTML语言、JavaScript(简称为JS)语言等,以便于描述,后续均以JS言为例;然后,调用JS语言对应的开源语法解析器,例如:uglifyjs等,并使用该开源语法解析器将js代码转化为语法树的形式。
步骤104、对所述语法树中的语法块进行加固处理,得到加固后的语法树;
其中,语法块是指按照顺序执行,且没有循环或者跳转的逻辑。
不难理解的是,原始网页代码中可能存在多种类型的语法块,例如:多项式、函数等,而对于不同种类的语法块,其加固方式可能也不尽相同,因此,为提高加固效果,可采用不同的加固规则对不同种类的语法块进行加固。
基于此,步骤104的一种实现方式可以为:
确定所述语法树中包含的至少一种语法块;确定所述至少一种语法块中每种语法块对应的加固规则,并基于对应的加固规则对所述至少一种语法块进行加固处理。
为便于理解,下面对多个语法块种类对应的加固方式进行示例性说明:
加固方式1、对于至少一种语法块中的有限循环次数(一般为小于10次)的循环语句
将所述循环语句转换为多个代码块,所述多个代码块的数量与所述循环语句的循环次数相对应,且均包括与所述循环语句的循环次数变量对应的代码变量;将所述多个代码块中的循环次数变量分别转换为常量,所述常量的取值与所述循环次数变量的取值范围相对应。具体可以示例为:
假设有限循环次数的循环语句为:
for(var i=0;i<5;i++){
a=a+i;
}
则转换后的多个代码块为:
a=a+1
a=a+2
a=a+3
a=a+4
a=a+5
基于此,通过将循环次数较小的循环语句展开成多个重复的代码块,并将其中的循环变量替换为对应的值,能够有效提高单步调试的复杂度,增加加固效果。
加固方式2、对于至少一种语法块中的字符串
示例1、对于任意的字符串
使用随机生成的密钥对所述字符串的每个字节进行异或加密处理,得到加密后的字符串;将所述加密后的字符串替换为异或解密的代码段,所述异或解密的代码段用于解密所述加密后的字符串,以得到原字节的字符串。
示例2、对于仅包括数字和小写字符的目标字符串
将所述目标字符串转换为预设位数(优选为36位)的数字;使用随机生成的密钥对所述预设位数的数字进行位运算处理,得到加密后的数字;将所述加密后的数字替换为解密的代码段,所述解密的代码段用于解密所述加密后的数字,以得到原目标字符串。
示例3、对于长度超限的长字符串
将所述长字符串拆分为多个短字符串,所述短字符串的字符长度小于所述长字符串的字符长度,两者的字符长度可情况而定,例如:将abc长字符串拆分为a+b+c形式的三个短字符串;将所述短字符串中的字符进行位置调整处理,得到加密后的短字符串,例如:字符前后互换;将所述加密后的短字符串替换为位置恢复代码段,所述位置恢复代码段用于恢复所述短字符串中的字符的位置,以得到原短字符串。
基于此,通过引入随机化参数,使得每个字符串的解密方式均不尽相同,进而外界无法通过同一代码进行还原,能够有效增加加固效果。
加固方式3、对于所述至少一种语法块中的多项式语句
将所述多项式语句拆分为多个单项式语句;调整所述多个单项式语句之间的语句顺序,并在所述多个单项式语句中加入干扰语句;其中,所述干扰语句对所述多个单项式语句的执行结果无影响。具体可以示例为:
假设多项式为:(a*b+c)*d
则转换后的多个单项式语句为:
t1=a*b
t2=t1+c
t3=t2*d
然后,打乱三个语句的语句顺序,并加入影响运算结果的干扰语句,由此,可提高加固复杂度。
加固方式4、对于所述至少一种语法块中的简单函数
确定所述简单函数的至少一个调用函数;将所述简单函数转换为代码片段,并将所述代码片段合并到所述至少一个调用函数中。具体可以示例为:
假设简单函数为:
则转换后的代码片段为:
var a_arg0=101;
a_arg0=a_arg0+1;
var a_retn=a_arg0
var t=a_retn
然后,将该代码片段合并至所有调用该简单函数的调用函数中。
其中,所述简单函数中的return返回语句的数量少于预设阈值(一般仅有1个)。
基于此,通过将将一个函数的重复调用分拆到各个调用代码中,使得外界无法对单一函数进行分析。
进一步地,网页代码的函数的入参中很多情况下传递的都是未加密的数据,例如:采集的原始数据或加密前的字符串,因此,可通过去除参数,以有效隐藏这些信息,达到提高加固效果的目的。具体地,形式参数的加固方式可以为:
确定所述语法树中的形式参数;将所述形式参数转化为预设的全局变量,并基于所述形式参数的取值为所述全局变量赋值。具体可以示例为:
假设函数为:
其中,形式参数为x;
则转换后得到:
其中,形式参数是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传入的参数。
更进一步地,控制流指执行时指令的执行顺序,在各种控制逻辑的作用下(条件、循环、函数调用等),程序会沿着特定的逻辑顺序执行。正常情况下程序的逻辑非常好理解,因为开发过程中有各种人为的行为使代码逻辑清晰,便于维护和扩展,但对于逆向来说,清洗的代码逻辑会导致很容易抓住程序的重点,加快破解的速度。因此,可通过控制流混淆的方式将代码结果改变,使得程序的逻辑复杂度不易被分析。具体地,控制流混淆的实现方式可以为:
确定所述语法树中的语法块的运行流程;将所述语法块转化为代码段,并基于所述运行流程,为所述代码段配置执行逻辑。具体可以示例为:
参见图2,假设函数的控制流包括:
function a(x){
if(x<10){
for(var t=0;t<5;t++){
x=x+t;
}
else{
for(var t=0;t<10;t++){
x=x+t;
}
}
}
return x;
}
经过上述混淆步骤之后,可得到图3所示的结构。
步骤106、将所述加固后的语法树转换为加固网页代码。
其中,加固网页代码是指加固处理后的网页代码。
不难理解的是,语法树和网页代码之间的转换均可有语法解析器完成,为较为成熟的技术,此处不做限定。
可见,本实施例通过从语法树的维度,对原始网页代码对应的语法树中的语法块进行加固处理,以得到加固后的语法树,并转换为加固网页代码;而且,同时加入了大量的随机化参数,使得对于不同常量有不同的解密方式,以及,通过将函数进行合并,去参数,使得分析者无法对代码进行分解;与现有技术相比,能够有效加固网页代码,提高网页代码的安全性。
另外,对于上述方法实施方式,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施方式并不受所描述的动作顺序的限制,因为依据本发明实施方式,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施方式均属于优选实施方式,所涉及的动作并不一定是本发明实施方式所必须的。
图4为本说明书一实施例提供的一种网页代码加固装置的结构示意图,参见图4,该装置具体可以包括:确定模块401、加固模块402和转换模块403,其中:
确定模块401,用于确定原始网页代码对应的语法树,所述语法树用于表征所述原始网页代码的语法结构;
加固模块402,用于对所述语法树中的语法块进行加固处理,得到加固后的语法树;
转换模块403,用于将所述加固后的语法树转换为加固网页代码。
其中,所述原始网页代码包括:Javascript代码。
可选的,加固模块402,具体用于:
确定所述语法树中包含的至少一种语法块;确定所述至少一种语法块中每种语法块对应的加固规则,并基于对应的加固规则对所述至少一种语法块进行加固处理;
其中,不同种类的语法块对应的加固规则不同。
可选的,所述至少一种语法块包括:有限循环次数的循环语句;
其中,加固模块402,具体用于:
将所述循环语句转换为多个代码块,所述多个代码块的数量与所述循环语句的循环次数相对应,且均包括与所述循环语句的循环次数变量对应的代码变量;将所述多个代码块中的循环次数变量分别转换为常量,所述常量的取值与所述循环次数变量的取值范围相对应。
可选的,所述至少一种语法块包括:字符串;
其中,加固模块402,具体用于:
使用随机生成的密钥对所述字符串的每个字节进行异或加密处理,得到加密后的字符串;将所述加密后的字符串替换为异或解密的代码段,所述异或解密的代码段用于解密所述加密后的字符串。
可选的,所述至少一种语法块包括:仅包括数字和小写字符的目标字符串;
其中,加固模块402,具体用于:
将所述目标字符串转换为预设位数的数字;使用随机生成的密钥对所述预设位数的数字进行位运算处理,得到加密后的数字;将所述加密后的数字替换为解密的代码段,所述解密的代码段用于解密所述加密后的数字。
可选的,所述至少一种语法块包括:长度超限的长字符串;
其中,加固模块402,具体用于:
将所述长字符串拆分为多个短字符串,所述短字符串的字符长度小于所述长字符串的字符长度;将所述短字符串中的字符进行位置调整处理,得到加密后的短字符串;将所述加密后的短字符串替换为位置恢复代码段,所述位置恢复代码段用于恢复所述短字符串中的字符的位置。
可选的,所述至少一种语法块包括:多项式语句;
其中,加固模块402,具体用于:
将所述多项式语句拆分为多个单项式语句;调整所述多个单项式语句之间的语句顺序,并在所述多个单项式语句中加入干扰语句;
其中,所述干扰语句对所述多个单项式语句的执行结果无影响。
可选的,所述至少一种语法块包括:简单函数,所述简单函数中的返回语句的数量少于预设阈值;
其中,加固模块402,具体用于:
确定所述简单函数的至少一个调用函数;将所述简单函数转换为代码片段,并将所述代码片段合并到所述至少一个调用函数中。
可选的,还包括:
第一辅助加固模块,用于确定所述语法树中的形式参数;将所述形式参数转化为预设的全局变量,并基于所述形式参数的取值为所述全局变量赋值。
可选的,还包括:
第二辅助加固模块,用于确定所述语法树中的语法块的运行流程;将所述语法块转化为代码段,并基于所述运行流程,为所述代码段配置执行逻辑。
可选的,所述确定模块401,具体用于:
对所述原始网页代码进行语法解析处理,得到所述原始网页代码对应的语法树。
可见,本实施例通过从语法树的维度,对原始网页代码对应的语法树中的语法块进行加固处理,以得到加固后的语法树,并转换为加固网页代码;而且,同时加入了大量的随机化参数,使得对于不同常量有不同的解密方式,以及,通过将函数进行合并,去参数,使得分析者无法对代码进行分解;与现有技术相比,能够有效加固网页代码,提高网页代码的安全性。
另外,对于上述装置实施方式而言,由于其与方法实施方式基本相似,所以描述的比较简单,相关之处参见方法实施方式的部分说明即可。应当注意的是,在本发明的装置的各个部件中,根据其要实现的功能而对其中的部件进行了逻辑划分,但是,本发明不受限于此,可以根据需要对各个部件进行重新划分或者组合。
图5为本说明书一实施例提供的一种电子设备的结构示意图,参见图5,该电子设备包括处理器、内部总线、网络接口、内存以及非易失性存储器,当然还可能包括其他业务所需要的硬件。处理器从非易失性存储器中读取对应的计算机程序到内存中然后运行,在逻辑层面上形成网页代码加固装置。当然,除了软件实现方式之外,本申请并不排除其他实现方式,比如逻辑器件抑或软硬件结合的方式等等,也就是说以下处理流程的执行主体并不限定于各个逻辑单元,也可以是硬件或逻辑器件。
网络接口、处理器和存储器可以通过总线系统相互连接。总线可以是ISA(Industry Standard Architecture,工业标准体系结构)总线、PCI(PeripheralComponent Interconnect,外设部件互连标准)总线或EISA(Extended Industry StandardArchitecture,扩展工业标准结构)总线等。所述总线可以分为地址总线、数据总线、控制总线等。为便于表示,图5中仅用一个双向箭头表示,但并不表示仅有一根总线或一种类型的总线。
存储器用于存放程序。具体地,程序可以包括程序代码,所述程序代码包括计算机操作指令。存储器可以包括只读存储器和随机存取存储器,并向处理器提供指令和数据。存储器可能包含高速随机存取存储器(Random-Access Memory,RAM),也可能还包括非易失性存储器(non-volatile memory),例如至少1个磁盘存储器。
处理器,用于执行所述存储器存放的程序,并具体执行:
确定原始网页代码对应的语法树,所述语法树用于表征所述原始网页代码的语法结构;
对所述语法树中的语法块进行加固处理,得到加固后的语法树;
将所述加固后的语法树转换为加固网页代码。
上述如本申请图4所示实施例揭示的网页代码加固装置或管理者(Master)节点执行的方法可以应用于处理器中,或者由处理器实现。处理器可能是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)等;还可以是数字信号处理器(Digital Signal Processor,DSP)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、现场可编程门阵列(Field-Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。可以实现或者执行本申请实施例中的公开的各方法、步骤及逻辑框图。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。结合本申请实施例所公开的方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器,处理器读取存储器中的信息,结合其硬件完成上述方法的步骤。
网页代码加固装置还可执行图1的方法,并实现管理者节点执行的方法。
基于相同的发明创造,本申请实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质存储一个或多个程序,所述一个或多个程序当被包括多个应用程序的电子设备执行时,使得所述电子设备执行图1对应的实施例提供的网页代码加固方法。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。