AST还原实战|使用AST还原猿人学第16题js混淆代码

本文介绍了如何解析和还原混淆的JavaScript代码,通过分析AST插件的编写,逐步揭示了混淆代码的解密过程,包括删除重复定义的变量、函数调用的字面量还原、for循环到while循环的转换,最终成功还原了混淆的btoa函数和相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上周直播讲解了第16题混淆js的还原,本文再做个补充,方便星友们学习AST插件的编写技巧。

一.实战网址

https://match.yuanrenxue.com/match/16

二.加密参数分析

抓包,分析接口数据:

562ffe279e427b90395a47e23a265c6a.png

点击去,即可发现加密参数 m 及 t 赋值的地方:

d8526e9123ec8aeb0d417966146d0c67.png

在 r.m = n[e(528)](btoa, p_s) 这行代码打上断点,再次请求,断住后,控制台输入 btoa并回车,双击下面的代码,来到这里:

dc32dc2132d6e7cf0eaf6ba3434f98c4.png

代码往上翻,把整个 732 相关的代码抠下来,并保存到js文件中。

三.解混淆分析

代码扣下来格式化,看着有点像 ob 混淆,但与常规的还是有点区别,用我那个一键还原无法还原,不过没关系,见招拆招就好。

分析混淆文件,看到了这些函数调用:

439e6ac8d0e3fcd944fd49a04a9b2f1e.png

之前的文章也讲过,像这种 函数调用,其实参为字面量,大概率是可以进行还原的,因此我们先进行还原?

不慌,我们看看它的函数定义在哪里:

47e759156526e71a737c971436143bd6.png

可以看到,函数定义 l ,然后 l 又赋值给了e,看到这种情况,我们可以先将e替换成l,即还原重复定义的变量。

AST源代码如下:

//删除重复定义且未被改变初始值的变量
const deleteRepeatDefine = {
  "VariableDeclarator|FunctionDeclaration"(path)
  {
    let {node,scope,paren
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值