这几天看了一篇大佬写的AST文章的文章,深有感触,今天正好拿去哪儿的JS开刀
贴上大佬链接:https://mp.weixin.qq.com/s/rgXdtccJrccVes-muapB1Q
去哪儿的重要加密JS都是经过混淆的,当初反混淆去哪儿的JS,真的是搞死我了
我把js方法还原成python,再用正则匹配搞了半天,结果反混淆后的JS各种报错(里面编码、转码啥的不一致太多)很是苦恼。一气之下直接不反混淆了,硬怼怼出来,但是耗时太长了,每次要看反混淆后的代码都要在Console里面执行一遍,再手动记录真的很麻烦。
直到我碰到了这个方法,今天试了下,真的太好用了,谢谢大佬写的文章。这是一种靠谱不用写正则的方式来替换加密的字符!!
在计算机科学中,抽象语法树(AbstractSyntax Tree,AST),或简称语法树(Syntax tree),是源代码语法结构的一种抽象表示。它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构。之所以说语法是“抽象”的,是因为这里的语法并不会表示出真实语法中出现的每个细节
简单来讲,就是 源代码语法结构的一种抽象表示。可以把它理解为一棵树,树上有很多的节点。我们通过操作这些节点,对其进行增,删,替换等操作,让源代码更容易阅读和理解。
在线解析JavaScript的源码,并生成一颗树的网站:
https://astexplorer.net/
首先需要安装依赖:npm install @babel/core
参考大佬的代码,导入依赖
这次我选的JS是生成Alina Cookie的JS。通过在Initiator 里面找到生成Alina的JS
原JS太长了,我起作用的代码扣出来。
4个大数组 然后o方法是反混淆函数,其他的就是和生成Alina有关的函数。
我先保存到本地 命名index.js
反混淆的思路就是先把4个数组的值还原到函数里面,再执行o方法反混淆。
跟着大佬的思路,先引入js文件,4个数组,反混淆方法
我们先让数组赋值,去AST解析网站分析一下
开始写代码
调用本地的数组,赋予实参。
将计算出来的结果生成一个对应的节点,并替换掉当前的节点。
替换结束后,将处理后的AST再转换成源代码,并保持到新的文件中去。
然后用类似的方法即可用o方法还原混淆的字符。
对比下还原前后
简直天差地别!
感谢大佬发表的文章,今天又是学到新知识的一天。