关注它,不迷路。
本文章中所有内容仅供学习交流,不可用于任何商业用途和非法用途,否则后果自负,如有侵权,请联系作者立即删除!
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了,显示如下:
只能拿之前备份的js来进行分析了,链接地址:
https://t.zsxq.com/15de54zT4
下载后打开,发现代码被压缩了,先用 基于babel库的js反混淆通用模板_预处理版 这个工具处理一下,然后查找可还原的地方:
如上图所示,看到了很多 函数调用,其实参都是字面量,再看其函数定义,都是纯函数:
考虑到这是一个 webpack,而函数名又这么简单,看看是否有同名函数:
可以看到有6个这样的函数名,连形参都一样。因此,手动抠函数进行还原,可能会导致还原出问题。这就需要写代码自动把函数抠取出来,然后使用 binding 来定位其 reference,进行计算和替换。
3.插件编写
遍历函数表达式,并收集scope内的函数定义,然后进行eval,并通过 reference 定位父节点的 Callexpression ,计算出该表达式的值,并进行替换。
2.经过第一步的还原后,部分代码长这样:
这就需要用到 常量折叠 插件进行处理了。
处理后,发现有个 ln 函数没有被还原:
看其定义:
原来是 耦合了 wn 这个变量。通过查找,发现有两处这样的函数定义,得,还是得写代码进行处理.
3.还原上面的 ln 函数后,发现 函数调用已经还原的差不多了。因此,可以删除未被调用的函数,这样可以清理不少垃圾代码。
4.删除未调用的函数以后,又发现了一些可以还原的常量,比如:
直接使用星球里的插件进行还原。
5.常量还原后,看上面的代码,需要再进行一次 常量折叠:
6.继续计算 Math["round"] 函数表达式,编写专用插件就可以了。
7.上一步操作后,再就是删除垃圾代码了。
还原到这里,基本就结束了。完整代码我放在星球里,供大家学习:
https://t.zsxq.com/157euqHdp
通过上面的例子可以看到,大部分还原插件都在星球里面,基本不需要改。
即使要修改,代码也不多,AST是很香的。
今天的文章就分享到这里,后续分享更多的技巧,敬请期待。
欢迎加入知识星球,学习更多AST和爬虫技巧。