AST反混淆|如何写一个通用的逗号表达式还原插件

关注它,不迷路。       

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

一.需求分析

如题,如何写一个通用的逗号表达式还原插件?

在所有的非jsvmp混淆代码中,最常见的就是逗号表达式,因为它可以穿插到各种表达式语句中,非常的烦人。之前写了通用的逗号表达式还原插件:

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

代码非常的臃肿,其实就是穷举了逗号表达式在各表达式的情况,但是它有它的局限性,对于复杂一点的嵌套,它就无法进行处理了。

二.前置插件

因为需要将代码插入到当前的表达式语句中,这就存在一个代码先后执行的问题,所以,它需要先处理一些代码,再进行逗号表达式的还原才行。

1.规范循环表达式,给不规范的代码块加上{}:

https://t.zsxq.com/UXP4

2.分离变量定义,单个变量定义更好处理:

https://t.zsxq.com/EoDsq

三.需要过滤的情况

将一段代码中的逗号表达式给提到代码前面来,除了要考虑先后执行的情况,还需要考虑代码是否会执行的问题。

经过询问GPT,js语言中逗号表达式可能不会执行的代码,有两种节点,LogicalExpression 和 ConditionalExpression,举个例子:

var dd = a || aa && (b = 2,c = 3,d = 4) || d;

因为不知道 a的具体值,所以无法确定后面的逗号表达式是否会被执行,需要需要用代码过滤一下:

let canVisitFlag = true;


statementPath.traverse({
    "LogicalExpression|ConditionalExpression"(_path) {
        if (!_path.isAncestor(path)) {


            return;
        }


        let key = _path.isLogicalExpression() ? "left" : "test";


        let execPath = _path.get(key);


        if (execPath != path && !execPath.isAncestor(path)) {
            canVisitFlag = false;
            _path.stop();
        }
    },
})


if (!canVisitFlag) return;

四.插件源码

完整源代码:

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

目前还没有发现bug,并且还原效果非常好。

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

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

9d0b6c89b54f811ac569d5022f40291f.jpeg

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: ast混淆JS还原工具是一种强大的工具,可以帮助程序员和安全研究人员解决混淆的JavaScript问题。该工具的原理是通过解析抽象语法树(AST)来还原混淆的JavaScript代码,从而让代码恢复其原有的结构和逻辑。 AST混淆JS还原工具的优点是可以解决常见的混淆技术,如变量名替换、函数名替换、控制流混淆等。同时,该工具还支持多种JavaScript框架和库,可以有效避免由于第三方库混淆而导致的代码不可读性问题。 但是,需要注意的是,AST混淆JS还原工具并不能完全解决所有的混淆问题。在某些情况下,可能需要手动修改代码或使用其他工具进行修复。此外,该工具也可能会导致一些性能问题,特别是在处理大型JavaScript代码时。 总的来说,AST混淆JS还原工具是一种非常有用的工具,可以帮助开发人员和安全研究人员节省大量时间和精力。但是,使用该工具还需要仔细考虑其适用性和局限性。 ### 回答2: AST混淆JS还原工具是一种专门用于还原JavaScript代码的工具。AST是抽象语法树的缩,它是一种能够把代码转换成树形结构的工具。在JavaScript中,所有的代码都是由AST表示的。因此,混淆代码实际上是对AST进行混淆,而混淆工具就是通过分析混淆后的AST还原出原始代码。 AST混淆JS还原工具有很多种,它们主要使用了一些静态和动态分析技术。静态分析就是直接分析混淆的代码,从中找到解密算法和加密密钥等关键信息,并使用这些信息来解密代码。动态分析则是通过模拟代码的运行环境来解密代码,在代码运行时注入一些代码片段,以便找到解密算法和密钥。 无论是静态分析还是动态分析,AST混淆JS还原工具都需要在很多方面投入时间和精力。首先,它们需要分析混淆代码的结构,找出其中的规律,并将其还原AST中。其次,它们需要处理各种类型的混淆,包括命名混淆、结构混淆、代码段混淆等。最后,它们需要使用一些优化技巧来提高还原的效率和准确性。 总之,AST混淆JS还原工具是一种强大的混淆技术,它可以用于提高代码的安全性和保护知识产权。但需要注意的是,还原工具不应该被用于不道德的行为,如盗版或攻击等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值