掌桥专利:专业的专利平台
掌桥专利
首页

一种动态非对称加解密的JavaScript代码混淆方法与系统

文献发布时间:2023-06-19 11:32:36


一种动态非对称加解密的JavaScript代码混淆方法与系统

技术领域

本发明涉及计算机与通信领域,具体涉及一种动态非对称加解密的JavaScript代码混淆方法与系统。

背景技术

随着互联网客户端技术的迅速发展,客户端的各种技术越来越丰富,功能也越来越复杂,但由于客户端代码是运行在用户终端上的,攻击者很容易阅读、分析和破解,给系统带来各种风险。目前各种客户端如浏览器、Hybrid AP、小程序等,主要通过解释JavaScript代码来运行,所以需要对JavaScript代码进行保护,避免暴露业务逻辑,防止作品被复制篡改等。

目前的混淆手段主要是静态混淆,混淆后上传文件到服务器,不同用户从服务器下载到的文件是同样的静态文件。静态混淆技术主要可以分为混淆控制流和混淆数据结构两大类,静态混淆在JAVA、NET等虚拟机语言上起到很好的效果,由于这类代码并不是被编译成二进制机器码,而是以中间代码的形式在运行时被解释执行,二这种中间代码非常容易被逆向,所以不得不进行混淆。类似的还有对JavaScript等脚本语言的混淆保护,这类保护方案都是在源码的基础上进行的。

静态混淆后的文件,只要攻击者花费一定时间和成本,都可以进行逆向。一旦文件被逆向,业务逻辑就已经暴露,即使后续定期更新混淆后的文件,只要业务逻辑没有发生变化,风险依旧存在。

发明内容

针对现有技术存在的问题,本发明的目的在于解决现有技术中混淆后的文件容易被逆向的技术问题,提供一种动态混淆技术,使得浏览器端无法获知原始文件内容,每次访问返回的混淆文件内容都在变化,保障了混淆的解密流程无法被伪造绕过,防止文件被分析逆向。

根据本发明的一种动态非对称加解密的JavaScript代码混淆方法,包括以下步骤:

步骤A,用户访问业务系统,浏览器端混淆SDK向业务系统请求JavaScript文件;

步骤B,业务系统将源文件发送至混淆服务器,混淆服务器使用非对称加密的方式对代码进行动态混淆,生成混淆后的文件和token,并返回给浏览器端混淆SDK,使得每次访问返回的文件内容都不同;

步骤C,浏览器端混淆SDK动态解密混淆后的文件并执行。

进一步,步骤A中,在接收到用户对JavaScript源文件进行访问的请求信息后,业务服务器根据该请求信息获取发出该请求信息的发出端的特征值,根据获取到的特征值,判断该请求信息是否合法,如果合法,则允许该请求信息的发出端对JavaScript源文件进行访问,如果不合法则拒绝该请求信息的发出端对JavaScript源文件进行访问。

进一步,步骤B中包括:

步骤B1,混淆服务器使用非对称加密算法,生成公钥和私钥,传入私钥对源文件进行混淆,并返回混淆后的文件和token至业务服务器;

其中混淆程序的混淆方式是解析源代码生成AST,对代码中的基础数据类型进行加密,替换为加密后的内容,同时在AST中插入解密代码,解密代码需要公钥作为参数才能正常返回原始数据,否则可以在浏览器中执行但无法得到正常结果。然后将混淆后的AST转换为新的JavaScript代码返回;

token可以用来向混淆服务器请求公钥信息;

步骤B2,业务服务器返回混淆后的文件和token至浏览器。

进一步,步骤C中包括:

步骤C1,浏览器端混淆SDK携带token向混淆服务器请求公钥;

步骤C2,混淆服务器验证token返回公钥至浏览器;

步骤C3,浏览器执行混淆后的文件,并将公钥传入作为参数,代码在运行过程中动态解密运行。

进一步,在步骤C2,验证token过程中,如果通过验证,则混淆服务器将公钥返回至浏览器端,用户可使用公钥动态解密混淆后的文件并执行;若token验证失败,则向浏览器抛出异常,发送验证失败的反馈。

进一步,所述基础数据类型为字符串或数字。

进一步,所述非对称加密算法为RSA、Elgamal、背包算法、Rabin、D-H、ECC中的任一种。

进一步,所述非对称加密算法采用RSA。

另一方面,本发明还提供一种动态非对称加解密的JavaScript代码混淆系统,包括浏览器、业务服务器和混淆服务器,其中浏览器具有浏览器端混淆SDK,混淆服务器具有混淆器、解释器和token生成器,系统还具有存储器,存储在存储器上并可在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现根据本发明的动态非对称加解密的JavaScript代码混淆方法。

进一步,所述混淆器对代码文件中的基础数据类型通过一定规则进行替换,混淆器使用规定的置换矩阵对每一条指令进行置换,经过置换后的指令保留原指令的所有操作数,但是用于识别数据的操作码已经改变。

本发明中混淆服务器使用非对称加密的方式对代码进行混淆,采用动态混淆,每次访问返回的文件内容都不一样,并且运行时动态解密,依赖返回的公钥。通过动态对JavaScript进行混淆的方法,浏览器端无法获知原始文件内容,每次访问返回的混淆文件内容都在变化,token机制保障了混淆的解密流程无法被伪造绕过,解决客户端JavaScript代码容易被分析逆向的问题。

附图说明

图1示出了根据本发明的动态非对称加解密的JavaScript代码混淆方法与系统的结构和流程示意图。

具体实施方式

下面将结合附图,对本发明的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

在本发明的描述中,需要说明的是,术语“中心”、“上”、“下”、“左”、“右”、“竖直”、“水平”、“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。此外,术语“第一”、“第二”、“第三”仅用于描述目的,而不能理解为指示或暗示相对重要性。

在本发明的描述中,需要说明的是,除非另有明确的规定和限定,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是固定连接,也可以是可拆卸连接,或一体地连接;可以是机械连接,也可以是电连接;可以是直接相连,也可以通过中间媒介间接相连,可以是两个元件内部的连通。对于本领域的普通技术人员而言,可以根据具体情况理解上述术语在本发明中的具体含义。

以下结合附图对本发明的具体实施方式进行详细说明。应当理解的是,此处所描述的具体实施方式仅用于说明和解释本发明,并不用于限制本发明。

根据本发明的动态非对称加解密的JavaScript代码混淆方法与系统,其具体结构和流程如图1所示。

所述动态非对称加解密的JavaScript代码混淆方法包括以下步骤:

步骤A,用户访问业务系统,浏览器端混淆SDK向业务系统请求JavaScript文件;

步骤B,业务系统将源文件发送至混淆服务器,混淆服务器使用非对称加密的方式对代码进行动态混淆,生成混淆后的文件和token,并返回给浏览器端混淆SDK,使得每次访问返回的文件内容都不同;

步骤C,浏览器端混淆SDK动态解密混淆后的文件并执行。

步骤A中,在接收到用户对JavaScript源文件进行访问的请求信息后,业务服务器根据该请求信息获取发出该请求信息的发出端的特征值,根据获取到的特征值,判断该请求信息是否合法,如果合法,则允许该请求信息的发出端对JavaScript源文件进行访问,如果不合法则拒绝该请求信息的发出端对JavaScript源文件进行访问。

步骤B中包括:

步骤B1,混淆服务器使用非对称加密算法,生成公钥和私钥,传入私钥对源文件进行混淆,并返回混淆后的文件和token至业务服务器;

其中混淆程序的混淆方式是解析源代码生成AST,对代码中的基础数据类型进行加密,替换为加密后的内容,同时在AST中插入解密代码,解密代码需要公钥作为参数才能正常返回原始数据,否则可以在浏览器中执行但无法得到正常结果。然后将混淆后的AST转换为新的JavaScript代码返回;

token可以用来向混淆服务器请求公钥信息;

步骤B2,业务服务器返回混淆后的文件和token至浏览器。

步骤C中包括:

步骤C1,浏览器端混淆SDK携带token向混淆服务器请求公钥;

步骤C2,混淆服务器验证token返回公钥至浏览器;

步骤C3,浏览器执行混淆后的文件,并将公钥传入作为参数,代码在运行过程中动态解密运行。

所述方法的具体执行过程如下:

首先,步骤1,用户访问业务系统,浏览器端混淆SDK向业务系统请求JavaScript文件。

JavaScript代码是通过直译式脚本语言JavaScript编码的代码程序,将多个JavaScript代码集合到一起,形成JavaScript源文件。JavaScript源文件通过浏览器上的源文件查看功能可以直接进行查看。

为了保护JavaScript源文件,可以增加设置请求信息的验证环节。在接收到用户对JavaScript源文件进行访问的请求信息后,业务服务器根据该请求信息获取发出该请求信息的发出端的特征值,根据获取到的特征值,判断该请求信息是否合法,如果合法,则允许该请求信息的发出端对JavaScript源文件进行访问,如果不合法则拒绝该请求信息的发出端对JavaScript源文件进行访问,通过这种访问信息校验的方式对访问JavaScript源文件的请求进行过滤,保证合法的请求得到正常的执行,而非法的请求则不能得到执行,避免了非法用户对JavaScript源文件的篡改,从而提高了JavaScript源文件的安全性。

具体地,在获取到请求信息发出端的特征值后,首先将特征值中的IP地址与JavaScript源文件的校验信息库中的IP地址进行比对,判断请求信息发出端的IP地址是否与校验信息库中的其中一个IP地址相同,如果校验信息库中存在一个IP地址与请求信息发出端的IP地址相同,说明请求信息发出端具有访问JavaScript源文件的权限,进一步判断特征值中的用户名是否与校验信息库中的其中一个用户名相同,如果校验信息库中存在一个用户名与在请求信息发出端登录的用户名相同,说明该用户名具有对JavaScript源文件进行访问的权限,允许该请求信息发出端对JavaScript源文件的访问请求,如果校验信息库中任何一个IP地址都与请求信息发出端的IP地址不同,或请求信息发出端的IP地址与校验信息库中的一个IP地址相同,但在请求信息发出端登录的用户名与校验信息库中的任何一个用户名都不相同,说明请求信息发出端没有访问JavaScript源文件的权限或在有权限访问JavaScript源文件的请求信息发出端登录的用户名没有权限访问JavaScript源文件,拒绝请求信息发出端的访问请求,通过双重判断,分别判断请求信息发出端的访问权限和在请求信息发出端登录的用户名的访问权限,保证非法用户无法对JavaScript源文件进行访问,以此提高JavaScript源文件的安全性。

然后,步骤2,业务系统将源文件发送至混淆服务器。

通过验证之后,业务服务器将JavaScript源文件发送到混淆服务器中。混淆服务器中包括:随机数生成模块,用于根据接收的应用信息生成随机数,并将随机数设定为密钥参数;算法重构模块,用于根据密钥参数改变预设算法的运算顺序得到混淆加密/解密算法,和/或根据密钥参数改变预设算法的分组数据块的结构及对应分组数据块的运算顺序得到混淆加密/解密算法,和/或根据密钥参数改变预设算法的固定参数得到混淆加密/解密算法;插件编译模块,用于将应用信息和混淆加密/解密算法编译成安全插件。

步骤3,混淆服务器使用非对称加密算法(如RSA)生成公钥和私钥,传入私钥对源文件进行混淆(并非对文件本身加密),并返回混淆后的文件和token至业务服务器。

步骤3中包括(a),其中混淆程序的混淆方式是解析源代码生成AST,对代码中的基础数据类型(如字符串、数字等)进行加密,替换为加密后的内容,同时在AST中插入解密代码,解密代码需要公钥作为参数才能正常返回原始数据,否则可以在浏览器中执行但无法得到正常结果。然后将混淆后的AST转换为新的JavaScript代码返回。

和(b),token可以用来向混淆服务器请求公钥信息。

非对称加密算法是密钥的保密方法,需要两个密钥:公开密钥(简称公钥)和私有密钥(简称私钥),的特点就是加密密钥和解密密钥不同,密钥分为公钥和私钥,用私钥加密的明文,只能用公钥解密,用公钥加密的明文,只能用私钥解密。非对称加密算法的保密性比较好,它消除了最终用户交换密钥的需要。非对称加密算法的提点:算法强度复杂、安全性依赖于算法与密钥但是由于其算法复杂,安全性高。非对称加密算法可以采用RSA、Elgamal、背包算法、Rabin、D-H、ECC中的任一种。其中,RSA加密算法是最常用的非对称加密算法。

抽象语法树AST(Abstract Syntax Tree)指的是源代码语法所对应的树状结构。一种编程语言的源代码,可以通过构建语法树的形式将源代码中的语句映射到树中的每一个节点上。对于JavaScript的原始代码而言,可以通过JavaScript解析器把原始代码转换成抽象语法树AST。

混淆服务器中设有混淆器,每次访问返回的文件内容都不一样。浏览器端无法获知原始文件内容,因为每次访问返回的混淆文件内容都在变化,token机制保障了混淆的解密流程无法被伪造绕过,客户端JavaScript代码无法被逆向分析,因此具有极高的安全性。

混淆器对代码文件中的基础数据类型通过一定规则进行替换,也可以是指令集置换。混淆器使用规定的置换矩阵(例如,随机挑选)对每一条指令进行置换,经过置换后的指令保留原指令的所有操作数,但是用于识别数据的操作码已经改变。

由于使用动态混淆,使得混淆后的文件中每一条指令的操作码已经和原本的指令不同,要正确的执行每一条指令就需要对这些操作码进行还原,否则混淆过的应用程序并不能被通用的操作系统正常执行。所以当特定的终端需要运行被混淆过的应用程序时,优选先加载对应的解释器。该解释器与混淆所用的置换矩阵一一对应,也就是解释器需要将指令进行还原。Token生成器是使用置换矩阵来生成Token的工具,是服务端生成的一串字符串。在本发明中,Token必须携带解释执行混淆后所需要的解释器,使用不同置换矩阵所生成的Token中携带的解释器也不相同,经过混淆器混淆后的数据只能在由同一个置换矩阵所生成的解释器中才能执行。

步骤4,业务服务器返回混淆后的文件和token至浏览器。

步骤5,浏览器端混淆SDK携带token向混淆服务器请求公钥。

步骤6,混淆服务器验证返回公钥至浏览器

在此验证token的步骤中,如果通过验证,则混淆服务器将公钥返回至浏览器端,用户可使用公钥动态解密混淆后的文件并执行;若token验证失败,则向浏览器抛出异常,发送验证失败的反馈。

步骤7,浏览器执行混淆后的文件,并将公钥传入作为参数,代码在运行过程中动态解密运行。

本发明中混淆服务器使用非对称加密的方式对代码进行混淆,采用动态混淆,每次访问返回的文件内容都不一样,并且运行时动态解密,依赖返回的公钥。

本发明通过动态对JavaScript进行混淆的方法,浏览器端无法获知原始文件内容,每次访问返回的混淆文件内容都在变化,token机制保障了混淆的解密流程无法被伪造绕过,解决客户端JavaScript代码容易被分析逆向的问题。

此外,本发明实施例还提供动态非对称加解密的JavaScript代码混淆系统,包括浏览器、业务服务器和混淆服务器,其中浏览器具有浏览器端混淆SDK,混淆服务器具有混淆器、解释器和token生成器,系统还具有存储器,存储在存储器上并可在所述处理器上运行的计算机程序,该计算机程序被处理器执行时实现上述动态混淆和动态解密的各个过程,且能达到相同的保护源文件防止被逆向的技术效果。

本发明实施例还提供一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述动态混淆方法或基于动态混淆的方法的加密方法实施例的各个过程,且能达到相同的技术效果。其中,所述的计算机可读存储介质,如只读存储器(Read-Only Memory,简称ROM)、随机存取存储器(Random AccessMemory,简称RAM)、磁碟或者光盘等。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

相关技术
  • 一种动态非对称加解密的JavaScript代码混淆方法与系统
  • 一种自定义混淆方案的JavaScript代码混淆方法
技术分类

06120112965594