首页> 中国专利> 一种可自定义规则的JavaScript代码混淆方法和系统

一种可自定义规则的JavaScript代码混淆方法和系统

摘要

本发明公开了一种自定义规则的JavaScript代码混淆方法和系统,包括以下步骤:S1、将源代码通过语法分析工具生成AST;S2、将AST经过混淆引擎处理,生成混淆后的AST,所述混淆引擎可进行自定义混淆规则;S3、将混淆后的AST还原为JavaScript代码;S4、对混淆后的JavaScript代码进行压缩,得到最终生成的代码。本发明的代码混淆方法和系统使得每次混淆的结果有随机性,大幅度降低混淆后的结果的可读性和可调试性,保障代码安全。

著录项

  • 公开/公告号CN113010857A

    专利类型发明专利

  • 公开/公告日2021-06-22

    原文格式PDF

  • 申请/专利权人 北京顶象技术有限公司;

    申请/专利号CN202110230043.9

  • 发明设计人 肖东爽;肖铮;陈树华;

    申请日2021-03-02

  • 分类号G06F21/14(20130101);

  • 代理机构11483 北京云科知识产权代理事务所(特殊普通合伙);

  • 代理人张飙

  • 地址 100085 北京市海淀区上地信息路26号3层0308/0310室

  • 入库时间 2023-06-19 11:32:36

说明书

技术领域

本发明涉及计算机与通信领域,具体涉及一种可自定义规则的JavaScript代码混淆方法和系统。

背景技术

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

目前的主要保护手段有以下几种:

1、使用UglifyJS等代码压缩工具进行压缩。

2、将代码进行可逆编码,再通过eval等方式逆向回来执行。

3、其他基于正则或AST的混淆工具,通过在源代码中插入无意义的废代码,改变代码显示字符等方式来修改源代码。

以上的几种保护手段各有缺点:

1、UglifyJS等代码压缩工具设计目的是为了减小代码体积,混淆强度不高,混淆后的代码跟源代码的主要流程基本一致

2、eval等方式很容易在关键代码点被hook,从而直接截取到源代码

3、目前基于AST的混淆工具规则一般比较简单,同时生成规则比较固定,多次混淆结果不变。

发明内容

针对现有技术存在的问题,本发明的目的在于解决现有技术中混淆后的文件容易被逆向的技术问题,提供一种可自定义混淆规则的混淆技术,使得浏览器端无法获知原始文件内容,每次混淆的结果有随机性,大幅度降低混淆后的结果的可读性和可调试性,保障代码安全。

本发明提供一种自定义规则的JavaScript代码混淆方法,包括以下步骤:

S1、将源代码通过语法分析工具生成AST;

S2、将AST经过混淆引擎处理,生成混淆后的AST,所述混淆引擎可进行自定义混淆规则;

S3、将混淆后的AST还原为JavaScript代码;

S4、对混淆后的JavaScript代码进行压缩,得到最终生成的代码。

进一步,所述混淆引擎内具有默认的混淆流程,包括依次进行的五条混淆规则,分别为:

源码转换,用于将代码中的数字、正则表达式等转换为字符串的表示;

字符串加密,用于将代码中的字符串用内置的多个加密函数随机加密,同时在源代码中插入解密代码,在运行时动态解密;

字符串拆分,用于将代码中的字符串进行拆分,将拆分后的字符串分散到多个作用域中;

函数打乱,用于将代码中的函数随机进行洗牌,打乱原有函数的声明顺序;

常量提取,将代码中的常量,随机提取到多个数组中,在实际引用的时候,改为数组下标的引用。

进一步,在步骤S2中,自定义混淆规则时,可以编写自己的混淆规则,编写的流程如下:

A,在混淆之前可以插入规则,提供输入为前一条规则处理后的AST;

B,使用方对AST进行自定义的处理;

C,返回处理后的AST交由下一条规则使用。

进一步,所述自定义规则包括如下类型:

自由组合默认规则、指定混淆强度、插入自定义的新规则,以上各类型可同时或选择性组合使用。

进一步,所述指定混淆强度,将各个可调节强度的规则分别设定混淆强度分为强、中、弱三级可选,或者设置为无级自由调节形式进行选择。

另一方面,本发明提供一种自定义规则的JavaScript代码混淆系统,其特征在于,包括以下单元:

语法分析单元,用于将源代码通过语法分析工具生成AST;

混淆引擎,用于将AST经过本工具的混淆引擎处理,生成混淆后的AST具有多条内置复杂混淆规则,支持自定义混淆规则,使得每次混淆的结果有随机性;

语法还原单元,用于将混淆后的AST还原为JavaScript代码;

代码压缩单元,用于对混淆后的JavaScript代码进行压缩,得到最终生成的代码。

进一步,所述混淆引擎内具有默认的混淆流程,包括依次进行的五条混淆规则,分别为:

源码转换,用于将代码中的数字、正则表达式等转换为字符串的表示;

字符串加密,用于将代码中的字符串用内置的多个加密函数随机加密,同时在源代码中插入解密代码,在运行时动态解密;

字符串拆分,用于将代码中的字符串进行拆分,将拆分后的字符串分散到多个作用域中;

函数打乱,用于将代码中的函数随机进行洗牌,打乱原有函数的声明顺序;

常量提取,将代码中的常量,随机提取到多个数组中,在实际引用的时候,改为数组下标的引用。

进一步,混淆引擎的自定义混淆规则中,可以编写自己的混淆规则,编写的流程如下:

A,在混淆之前可以插入规则,提供输入为前一条规则处理后的AST;

B,使用方对AST进行自定义的处理;

C,返回处理后的AST交由下一条规则使用。

进一步,所述自定义规则包括如下类型:

自由组合默认规则、指定混淆强度、插入自定义的新规则,以上各类型可同时或选择性组合使用。

进一步,所述指定混淆强度,将各个可调节强度的规则分别设定混淆强度分为强、中、弱三级可选,或者设置为无级自由调节形式进行选择。

本发明通过内置了多条复杂混淆规则,支持自定义添加其他混淆规则,可以自由组合规则,可指定混淆强度,保证每次混淆都可以得到不同的结果。混淆后的结果可读性和可调试性均大幅度降低,同时可以和其他压缩工具配合使用,进一步增强混淆强度。

附图说明

图1示出了根据本发明的自定义规则的JavaScript代码混淆方法与系统的结构和流程示意图。

图2示出了根据本发明的自定义规则的JavaScript代码混淆方法与系统的混淆引擎默认流程图。

具体实施方式

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

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

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

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

根据本发明的自定义规则的JavaScript代码混淆方法与系统,其具体结构和流程如图1和2所示。

JavaScript代码是通过直译式脚本语言JavaScript编码的代码程序,将多个JavaScript代码集合到一起,形成JavaScript源文件。JavaScript源文件通过浏览器上的源文件查看功能可以直接进行查看。但由于客户端代码是运行在用户终端上的,攻击者很容易阅读、分析和破解,给系统带来各种风险。目前各种客户端如浏览器、Hybrid AP、小程序等,主要通过解释JavaScript代码来运行,所以需要对JavaScript代码进行保护,避免暴露业务逻辑,防止作品被复制篡改等。

本发明实现了一种可自定义规则的JavaScript代码混淆方法和系统,其中内置了多条复杂的混淆规则,使用方也可以基于本工具自定义属于自己的混淆规则,在使用时可以自由选取组合各种规则,同时部分规则带有一定的强度选择和随机性,每次混淆后结果都会变化,同时可以结合其他压缩工具,从而更好地达到保护代码的目的。

图1展示了根据本发明的自定义规则的JavaScript代码混淆方法的主要执行流程,主要包括以下步骤:

1、将源代码通过语法分析工具生成AST;

2、将AST经过本工具的混淆引擎处理,生成混淆后的AST;

3、将混淆后的AST还原为JavaScript代码;

4、对混淆后的JavaScript代码进行压缩,得到最终生成的代码。

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

如果使用时没有指定混淆规则,默认的混淆规则如图2所示。默认的混淆流程包括依次进行的五条混淆规则,分别为源码转换、字符串加密、字符串拆分、函数打乱和常量提取。

在上面所述的混淆引擎中,内置的五条混淆规则具体如下:

源码转换:如下所示,将代码中的数字、正则表达式等转换为字符串的表示。作用是降低代码可读性,以及得到更多的字符串。

字符串加密:如下所示,将代码中的字符串用内置的多个加密函数随机加密,同时在源代码中插入解密代码,在运行时动态解密。本条规则支持强度控制,可以控制加密字符串的比例。作用是降低代码可读性和提升调试难度。

字符串拆分:如下所示,将代码中的字符串进行拆分,将拆分后的字符串分散到多个作用域中。本条规则支持强度控制,可以控制拆分字符串的比例。

作用是降低代码可读性和提升调试难度。

函数打乱:如下所示,将代码中的函数随机进行洗牌,打乱原有函数的声明顺序。作用是降低代码可读性和提升调试难度。

常量提取:如下所示,将代码中的常量,随机提取到多个数组中,在实际引用的时候,改为数组下标的引用。作用是降低代码可读性和提升调试难度。

当使用方有自己的特殊需求需要自定义规则时,可以编写自己的混淆规则,编写的流程如下:

A,本工具在混淆之前可以插入规则,提供输入为前一条规则处理后的AST;

B,使用方对AST进行自定义的处理;

C,返回处理后的AST交由下一条规则使用。

本发明通过内置了多条复杂混淆规则,支持自定义添加其他混淆规则,可以自由组合规则,可指定混淆强度,保证每次混淆都可以得到不同的结果。混淆后的结果可读性和可调试性均大幅度降低,同时可以和其他压缩工具配合使用,进一步增强混淆强度。

在自定义混淆规则方面,可以选择在默认设定的五个规则中自定义混淆顺序,比如,可以按照字符串拆分、字符串加密、源码转换、函数打乱和常量提取的自定义顺序进行混淆操作。

还可以在默认设定的五个规则中选择任意数量的规则进行任意排序,比如,仅选择其中三个规则,按照源码转换、函数打乱、字符串加密的顺序进行混淆操作。

还可以制定各个规则的混淆强度,所述混淆强度分为强、中、弱三级可选,或者可以设置为无级自由调节形式进行选择。可以仅选择其中两项进行强度自定义混淆,如字符串加密(强)、字符串拆分(中)。

还可以自定义新的混淆规则,并插入需要的位置进行混淆处理,比如在默认的五个规则中插入新规则,新规则定义为规则X:源码转换、规则X、字符串加密、字符串拆分、函数打乱和常量提取。

另一方面,本发明还提供一种可自定义规则的JavaScript代码混淆系统,包括语法分析单元、混淆引擎、语法还原单元和代码压缩单元。

其中,语法分析单元用于将源代码通过语法分析工具生成AST,其包括语法分析器,用于进行语法分析;语法分析器是编译器或解释器的组件,作用是进行语法检查、并构建由输入的单词组成的数据结构,一般是语法分析树、抽象语法树等层次化的数据结构,通常使用一个独立的此法分析器从输入字符流中分离出一个个的单词,并将单词作为其输入。

混淆引擎用于将AST经过本工具的混淆引擎处理,生成混淆后的AST具有多条内置复杂混淆规则,支持自定义混淆规则,使用时可以自由选取组合各种混淆规则,可以自定义强度,每次混淆的结果有随机性。

语法还原单元用于将混淆后的AST还原为JavaScript代码。

代码压缩单元用于对混淆后的JavaScript代码进行压缩,得到最终生成的代码。

此外,本发明实施例的可自定义规则的JavaScript代码混淆系统,还包括混淆服务器,混淆服务器具有混淆器、解释器和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),如调制的数据信号和载波。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号