某哪儿机票JS解密(5)-通过AST(抽象语法树)反混淆JS

这几天看了一篇大佬写的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太长了,我起作用的代码扣出来。


生产Alina的方法

4个大数组 然后o方法是反混淆函数,其他的就是和生成Alina有关的函数。

我先保存到本地 命名index.js

反混淆的思路就是先把4个数组的值还原到函数里面,再执行o方法反混淆。

跟着大佬的思路,先引入js文件,4个数组,反混淆方法

我们先让数组赋值,去AST解析网站分析一下

开始写代码







调用本地的数组,赋予实参。

将计算出来的结果生成一个对应的节点,并替换掉当前的节点。

替换结束后,将处理后的AST再转换成源代码,并保持到新的文件中去。

然后用类似的方法即可用o方法还原混淆的字符。

对比下还原前后


还原后


还原前

简直天差地别!

感谢大佬发表的文章,今天又是学到新知识的一天。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容