当前位置: 首页 > 专利查询>胡云锋专利>正文

一种基于语法树AST编辑实现的JavaScript混淆方法技术

技术编号:32855532 阅读:7 留言:0更新日期:2022-03-30 19:25
一种基于语法树AST编辑实现的JavaScript混淆方法,包括如下步骤:将JavaScript源代码压缩去除冗余代码,分析生成AST语法树;遍历AST语法树,将其中语法进行编辑转换;创建数组arrayA,并且提取AST语法树的字符串,通过特定算法转换成二维数组的数据字典;创建解码方法,将解码方法及随机冗余方法随机插入上一步数组arrayA中;创建自执行方法functionF,将二维数组arrayA当作arguments参数传入自执行方法functionF中,并将解码方法与自执行方法functionF组合生成新AST语法树;将原AST语法树中所有的字符串节点转换为解码方法functionH;将原AST语法树插入到新AST语法树,替换所有数字和变量,得到全新结构的新AST语法树;还原JavaScript代码来输出:将新AST语法树还原为JavaScript代码,去除空格换行压缩后输出得到混淆代码。输出得到混淆代码。输出得到混淆代码。

【技术实现步骤摘要】
一种基于语法树AST编辑实现的JavaScript混淆方法


[0001]本专利技术涉及计算机与通信
,具体是一种基于语法树AST编辑实现的JavaScript混淆方法。

技术介绍

[0002]JavaScript是在网站浏览器上运行的编程语言,主要是向使用HTML(超文本标记语言,Hyper Text Markup Language)和CSS(层叠样式表,Cascading Style Sheets)构建的网站添加,并起到实现各种页面动态效果的作用。例如,在网页上展示的轮播图样式和在咨询平台上输入的内容错误后显示的提示信息等这样的效果。另外针对商城网站里面购买商品时,使用购物车和费用估算也需要用到JavaScript。所以即使它不怎么明显,但依然是编码人员经常会用到的一种语言,JavaScript也是web前端开发中最重要的编程语言。
[0003]在web(World Wide Web,全球广域网,也称为万维网)系统发展早期,JavaScript在web系统中承担的职责并不多,只是简单的提交表单,JavaScript文件非常简单,也不需要任何的保护。
[0004]而在web应用越来越丰富的今天,伴随着浏览器性能和网速的提高,JavaScript承载了更多的工作,不少后端逻辑都在向前端转移,与此同时也让更多的不法分子有机可乘。在web模型中,JavaScript往往是不法分子的第一个突破口。知晓了前端逻辑,不法分子可以模拟成一个正常的用户来实施自己的恶意行为。所以,在很多登录、注册、支付、交易等等页面中,关键业务和风控系统依赖的JavaScript都不希望被人轻易的破解。
[0005]显而易见,我们需要保护我们的前端JavaScript代码安全。但由于JavaScript必须要下载代码在浏览器中解释执行的特性,要想绝对的保密是不可能的,我们要做的就是尽可能的增大破解的难度,让攻击者知难而退。
[0006]目前业内通常采用eval加密、代码压缩、代码混淆是三种方式保护代码安全;而其中“代码混淆”相对于其他两个更安全、更灵活。
[0007]代码混淆:JavaScript混淆器大致有两种正则(Regular Expression,常简写为regex、regexp或RE)替换和语法树(Abstract Syntax Tree,简写为AST)替换实现,正则替换实现成本低,但是效果也一般,适合对混淆要求不高的场景;AST语法树替换实现成本较高,但是更灵活,而且更安全。基于AST语法树层面的混淆器其实类似于编译器,基本原理和编译器类似,通过重命名局部变量、移除代码空白在相同语义的情况下压缩代码,变量替换。
[0008]虽然“代码混淆”相对于其他两个更安全、更灵活,但还有较大的缺点。常见的代码混淆通过重命名局部变量、常量替换和简单的string转码等方法混淆,但代码中还是会出现属性值及对象方法名/属性名等字符串出现,对于有经验的攻击者很容易猜出代码及涉及的功能,从而进行破解。
[0009]基于此,本专利技术提供了一种基于语法树AST编辑实现的JavaScript混淆方法,以解决上述问题。

技术实现思路

[0010]本专利技术所要解决的技术问题是提供一种基于语法树AST编辑实现的JavaScript混淆方法,可以有效解决上述
技术介绍
中提出的问题。
[0011]为解决上述问题,本专利技术所采取的技术方案是:一种基于语法树AST编辑实现的JavaScript混淆方法,包括如下步骤:
[0012]S1、分析生成AST语法树:将JavaScript源代码压缩去除冗余代码,分析生成AST语法树;
[0013]S2、将语法编辑转换:遍历AST语法树,将其中语法进行编辑转换;
[0014]S3、创建数组arrayA,并且提取AST语法树的字符串,通过特定算法转换成二维数组的数据字典;
[0015]S4、创建解码方法,将解码方法及随机冗余方法随机插入上一步数组arrayA中;
[0016]S5、创建自执行方法functionF,将二维数组arrayA当作arguments参数传入自执行方法functionF中,并将解码方法与自执行方法functionF组合生成新AST语法树;
[0017]S6、转换字符串节点:将原AST语法树中所有的字符串节点转换为解码方法functionH;
[0018]S7、将原AST语法树插入到新AST语法树,替换所有数字和变量,得到全新结构的新AST语法树;
[0019]S8、还原JavaScript代码进行输出:将新AST语法树还原为JavaScript代码,去除空格换行压缩后输出。
[0020]作为本专利技术的进一步优选方案,所述步骤S2中编辑转换所涉及到的语法包括:Object对象定义、window全局对象以及属性和方法名为obj.attr的语法。
[0021]作为本专利技术的进一步优选方案,所述各语法的编辑转换方式为:
[0022]所述定义Object对象语法转换成自执行方法,生成(function(obj){return obj[“attr”]=0,obj;}({})语法;
[0023]定义局部变量通过this指向window对象,将代码块中所有window全局对象全部转换为window[“attr”]语法;
[0024]所述所有属性和方法名obj.attr的语法转换成obj[“attr”]语法。
[0025]作为本专利技术的进一步优选方案,所述步骤S3中提取字符串的方式为:
[0026]遍历AST语法树,将AST语法树中所有字符串存入数组arrayA中,如果该字符串存在于arrayA则记录字符串在arrayA的位置,不存在则将字符串追加到arrayA再记录位置;
[0027]所述步骤S3中通过特定算法转换成二维数组的详细方式如下:
[0028]将数组arrayA中所有字符串通过split(
‘’
)方法转换为打散成二维数组;
[0029]将数组arrayA每个字符通过charCodeAt方法转换为数字,将原字符长度与数字进行位运算;
[0030]使用Array.prototype.concat.apply方法将二维数组arrayA降维并记录原字符串在数组中的起始位置,生成一个随机数randomB再次将数组中所有数字与随机数randomB进行位运算。
[0031]作为本专利技术的进一步优选方案,所述步骤S4中所创建的解码方法包括:
[0032]数组提取方法functionC、数组降维方法functionD、位运算方法functionE。
[0033]作为本专利技术的进一步优选方案,所述数组提取方法functionC作用是遍历数组arrayA,通过typeof==“function”将其中的非数组对象过滤掉并返回全部数字数组;
[0034]所述数组降维方法functionD将方法functionC返回的二本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种基于语法树AST编辑实现的JavaScript混淆方法,包括如下步骤:S1、分析生成AST语法树:将JavaScript源代码压缩去除冗余代码,分析生成AST语法树;S2、将语法编辑转换:遍历AST语法树,将其中语法进行编辑转换;S3、创建数组arrayA,并且提取AST语法树的字符串,通过特定算法转换成二维数组的数据字典;S4、创建解码方法,将解码方法及随机冗余方法随机插入上一步数组arrayA中;S5、创建自执行方法functionF,将二维数组arrayA当作arguments参数传入自执行方法functionF中,并将解码方法与自执行方法functionF组合生成新AST语法树;S6、转换字符串节点:将原AST语法树中所有的字符串节点转换为解码方法functionH;S7、将原AST语法树插入到新AST语法树,替换所有数字和变量,得到全新结构的新AST语法树;S8、还原JavaScript代码进行输出:将新AST语法树还原为JavaScript代码,去除空格换行压缩后输出。2.根据权利要求1所述的一种基于语法树AST编辑实现的JavaScript混淆方法,其特征在于,所述步骤S2中编辑转换所涉及到的语法包括:Object对象定义、window全局对象以及属性和方法名为obj.attr的语法。3.根据权利要求2所述的一种基于语法树AST编辑实现的JavaScript混淆方法,其特征在于,所述各语法的编辑转换方式为:所述定义Object对象语法转换成自执行方法,生成(function(obj){return obj[“attr”]=0,obj;}({})语法;定义局部变量通过this指向window对象,将代码块中所有window全局对象全部转换为window[“attr”]语法;所述所有属性和方法名obj.attr的语法转换成obj[“attr”]语法...

【专利技术属性】
技术研发人员:胡云锋
申请(专利权)人:胡云锋
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1