AST 使用技巧:如何快速分析混淆代码结构

大家好,今天分享一下如何快速分析混淆后的代码结构。

结构分析

JS 混淆代码在使用 AST 进行反混淆之前,要先看看代码结构是什么样的,方便根据具体的情况来分析应该从哪里下手。

一般代码结构分析我会使用两个方案,先说比较简单的方案:

pycharm 分析

第一个方案就是使用 pycharm 进行分析,pycharm 有一个很好用的功能就是对代码进行折叠,应该好多编辑器都有这种功能,pycharm 有快捷键不用一个一个的手动点击,比较方便。

image-20250518212139236

看一下猿人学第 21 题,打开后会发现这样的结构,很难一眼看出来是什么混淆以及整体的结构是什么样的,这个时候可以使用 pycharm 将其全部折叠。

image-20250518212316311

可以全部折叠也可以全部展开,还可以部分折叠和展开,大家可以按需使用。

image-20250518212352059

全部折叠后可以看到整体的代码就是一个自执行的函数,并且传入了一个超长的数组,这个数组参数无法折叠,占据了大部分空间,其余的代码都被折叠了。而且自执行函数中是一个 for 循环,这个 for 循环看着有点像 jsvmp 哈哈哈。像是 webpack 这种打包方式在折叠后特征会非常明显,大家可以自己试一试。

通过折叠代码的方式可以快速浏览代码的结构,方便进行后续的分析。

AST 分析

对于可以折叠的代码,使用 pycharm 进行分析很方便,但是有些不能折叠的代码,例如复杂的逻辑表达式,这种代码一般会在一行中实现相当多的逻辑,无法折叠并且分析起来很复杂,这个时候就可以使用 AST 的方式进行分析了。

image-20250518212825036

image-20250518212849235

来看这样的代码,使用逻辑表达式将逻辑全都合并到了一起,完全没法看,也无法折叠后按需展开。

还记得 AST 解析网站吗,将代码复制进去,网站会自动进行语法树分析。

image-20250518213837013

AST 会将代码变成树形结构,逐级展开代码,左侧会自动高亮显示对应的代码,可以一层一层的展开,然后查看左侧的高亮部分,就能知道整体代码是怎么样的结构。

AST 对于特别复杂的逻辑表达式很有用,例如上面图片中的逻辑表达式,光是凭肉眼很难看出来逻辑表达式的结构,但是如果是树形的结构,那么就能很方便的看出来它的结构了。树形结构中每个树节点都可能会有子节点,子节点可能会有属性,就这样一层一层嵌套形成了 AST 的树形结构。

如下图:

image-20250518221135613

而且还可以使用 AST 的方式给逻辑表达式添加小括号,这样在使用 pycharm 查看的时候可以根据小括号的高亮和颜色对比,知道当前的小括号的结尾在哪里。

image-20250518221245735

image-20250518221310194

彩色的小括号来自于 Rainbow Brackets 这个插件,感兴趣的小伙伴可以自行下载。

本文章首发于个人博客 LLLibra146’s blog

本文作者:LLLibra146

更多文章请关注公众号 (LLLibra146):LLLibra146

版权声明:本博客所有文章除特别声明外,均采用 © BY-NC-ND 许可协议。非商用转载请注明出处!严禁商业转载!

本文链接
https://blog.d77.xyz/archives/c4aecfbf.html