AST反混淆实战|手把手教你彻底还原PX3混淆代码(二)

关注它,不迷路。       

本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!

1.混淆分析

之前写了第一步操作,还原了部分类atob函数的调用表达式,具体可以看看这篇文章:

AST反混淆实战|手把手教你彻底还原PX3混淆代码(一)

经过这一步操作后,发现还是有非常多的函数调用表达式没有进行处理,

并且大部分实参都是字面量。由于代码太多,可以写个插件,看看实参都有哪些类型:

const ShowCallExpression = {
    CallExpression(path) {
        let {callee,arguments} = path.node;
        if (!types.isIdentifier(callee) || arguments.length != 2)
        {
            return;
        }
        console.log(path.toString());


    },
}


traverse(ast, ShowCallExpression);

打印实参后发现,有类似这样的代码:

60a139dfa8465069d977acc8df57a5a2.png

实参里面包含了逗号表达式,逗号表达式包含了赋值语句。而在AST进行遍历的时候,无法拿到 v  和 t 具体的值,因此没办法处理  lf(v - 697, t) 这个节点。因此可以先将赋值语句进行还原,再做后续处理

2.还原处理

为了考虑周全一点,可以将变量声明节点和赋值语句都进行还原处理,用到星球里的 这两个插件:

1.变量定义语句初始化为常量(整个作用域不改变)时的还原

https://t.zsxq.com/19zgyjPmP

2.简单赋值语句的还原。

https://t.zsxq.com/19CiT3A2O

经过这两个插件的处理后,上面的表达式变成了这样:

4b2c766641520d8060766cb59b6ea3be.png

这个时候,又可以使用常量折叠插件进行表达式的合并:

https://t.zsxq.com/19omUnibN

再次处理后就清爽多了:

a7b5253d83c96068e7258cad19b5cd14.png

3.反混淆源码

本人的demo及代码,放在星球里,需要的请自取。

https://t.zsxq.com/xmHCH

今天的分享就到这里,感谢阅读。

欢迎加入知识星球,学习更多AST和爬虫技巧。

0771e771f1ebaf58929fe58e1da51fac.jpeg

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值