AST还原实战|datadome滑块混淆代码还原分析

关注它,不迷路。       

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

1.目标地址

https://geo.captcha-delivery.com/captcha/?initialCid=AHrlqAAAAAMAzx3-LhwRKbYAZ6uxxw%3D%3D&hash=2211F522B61E269B869FA6EAFFB5E1&cid=bJX2d~6zjY8F3kAO0DZXJeU3ETJxm3f4DU27MP23fyN5n6VeBCW_Jhu09FR1EMmWzrNRtjhBz0WalYdEi233e_Sf~HvD_EhQ3TDx0nlD~r_kDGS5r94JaSnNsJ467Myx&t=fe&referer=https%3A%2F%2Fwww.hermes.com%2Ffr%2Ffr%2Fproduct%2Fles-mains-hermes-vernis-email-rose-coquille-V60301VV003%2F&s=13461&e=0718edd85846c6f29436e8918f4d3522ff0c9c794672a9c30491540145b29745

2.代码分析

由于本人的ip地址被这个网站给ban了,显示如下:

8c0383574a37f239ef404bfb00b89268.png

只能拿之前备份的js来进行分析了,链接地址:

https://t.zsxq.com/15de54zT4

下载后打开,发现代码被压缩了,先用 基于babel库的js反混淆通用模板_预处理版 这个工具处理一下,然后查找可还原的地方:

0dc795c6c52d0fad8236534d983ee6e1.png

如上图所示,看到了很多 函数调用,其实参都是字面量,再看其函数定义,都是纯函数:

f6fd7d35cc5f3e66ea832cc96746c6bd.png

考虑到这是一个 webpack,而函数名又这么简单,看看是否有同名函数:

936b7c96f8fd29867d30fe8b68fcf9e7.png

可以看到有6个这样的函数名,连形参都一样。因此,手动抠函数进行还原,可能会导致还原出问题。这就需要写代码自动把函数抠取出来,然后使用 binding 来定位其 reference,进行计算和替换。

3.插件编写

  1. 遍历函数表达式,并收集scope内的函数定义,然后进行eval,并通过  reference 定位父节点的 Callexpression ,计算出该表达式的值,并进行替换。

    31abb4fd51f000fd7dbe535b606f3569.png

2.经过第一步的还原后,部分代码长这样:

7e501856ce75870ee5a76a5db416128c.png

这就需要用到 常量折叠 插件进行处理了。

处理后,发现有个 ln 函数没有被还原:

a169c127545de84f636bc994070559fb.png

看其定义:

563959faa3009d2e4ae822725a749103.png

原来是 耦合了 wn 这个变量。通过查找,发现有两处这样的函数定义,得,还是得写代码进行处理.

3.还原上面的 ln 函数后,发现 函数调用已经还原的差不多了。因此,可以删除未被调用的函数,这样可以清理不少垃圾代码。

4.删除未调用的函数以后,又发现了一些可以还原的常量,比如:

e001170ceb3e848d7adc04e26d507fd0.png

直接使用星球里的插件进行还原。

5.常量还原后,看上面的代码,需要再进行一次 常量折叠:

c5c1b48a902e38182c5588112ada2637.png

6.继续计算 Math["round"] 函数表达式,编写专用插件就可以了。

bf0a4d47c80bb4a003e370cd7253d1f3.png

7.上一步操作后,再就是删除垃圾代码了。

7904e6dd36b0ee5aad6ee160c2b4c2f8.png

还原到这里,基本就结束了。完整代码我放在星球里,供大家学习:

https://t.zsxq.com/157euqHdp

通过上面的例子可以看到,大部分还原插件都在星球里面,基本不需要改。

即使要修改,代码也不多,AST是很香的。

今天的文章就分享到这里,后续分享更多的技巧,敬请期待。

d63b3938c5ce0c5a1b3eada8eb5753dc.jpeg

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

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
AST混淆还原是指通过对JavaScript代码的抽象语法树(AST)进行还原,来反混淆经过混淆处理的代码AST混淆还原入门可以通过以下几个步骤实现: 1. 了解抽象语法树(AST):抽象语法树是用于表示代码结构的一种数据结构。它将代码转换为树状结构,每个节点代表代码的不同部分。了解AST的基本概念和节点类型对于进行混淆还原非常重要。 2. 学习JavaScript语法:要进行AST混淆还原,需要对JavaScript的语法有一定的了解。熟悉JavaScript的语法规则和常见的代码结构将有助于理解和还原混淆代码。 3. 使用AST还原工具:在进行AST混淆还原时,可以使用一些开源的AST还原工具,如丁仔大佬的AST还原工具。这些工具可以将混淆后的代码转换为AST,然后通过对AST进行分析还原,最终得到可读性较高的代码。 4. 学习AST还原技术:了解AST还原的原理和技术对于深入理解和应用AST还原工具非常重要。可以学习一些AST还原的基本技术,如遍历AST、修改AST节点等,以及一些高级的AST还原技术,如模式匹配、符号执行等。 5. 实践与练习:通过实践与练习,逐渐提升对AST混淆还原的理解和技巧。可以选择一些混淆代码进行还原,尝试使用AST还原工具进行还原,并对还原结果进行分析和验证。 需要注意的是,AST混淆还原是一个复杂的过程,对于不同的混淆代码可能会有不同的还原策略和技术。因此,除了入门的基础知识外,还需要不断学习和积累经验,才能在实际应用中取得更好的效果。<span class="em">1</span> #### 引用[.reference_title] - *1* [AST混淆js还原工具2.2(20230203)](https://download.csdn.net/download/jia666666/87413335)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值