一、首先我们要准备一行代码。
将下面链接里的参数复制到js格式的文本中,通过jsTool插件美化一下代码,这里我编写为demo.js。
https://static.geetest.com/static/js/fullpage.8.9.5.js
经过美化后的代码大致是这个样子:
随便看看也知道啥也看不懂,这个时候我们就需要分析一下这些代码的作用了。
观察代码发现里有很多地方调用了AJgjJ.DAi,搜索出515个匹配结果,如下图:
在匹配结果中有两类调用,如上图红框标示的
第一个:带括号的AJgjJ.DAi(79); 暂时不知道是在干啥;第二个,不带括号的AJgjJ.DAi,可以理解为
mZtVWz = ['qhicV'].concat(AJgjJ.DAi)
在这里concat()是合并数组的作用,而之后的几行代码调用的方式也都表示这里跟数组有关,通过索引就能取出值来,返回值都是字符串类型。
那么问题来了:如何将代码里的AJgjJ.DAi()还原成对应的字符串?
很快就能想到,在JS代码里将字符串"AJgjJ.DAi()“逐个匹配出来,拿到括号里的索引数字,然后将数字值传入函数AJgjJ.DAi()计算得到字符串结果,然后将结果替换代码里的字符串"AJgjJ.DAi()”,就实现了还原的目的了。
其实AST操作的话也差不多是这个思路,我们把代码复制到在线AST解析网站,看看在AST里是什么样子的。如下是ast的解析网站:https://astexplorer.net/
这里我们先借助浏览器观察一些代码中的内容,通过打断点的方式——
首先,编写demo.html将demo.js引入到浏览器中,编码如下:
<script src="./demo.js"></script>
<scr