(文章内容仅供研究使用,若涉及到侵权请联系作者删除)
前几天偶然看见以前写的头条的js得出来的参数已经不能通过验证了,看了下新的js,经过一天半的调试终于找到了原因。
1>全局搜索找到_signature生成的函数。
2>进入函数。
这里可以看到传入的参数和以前不一样了,现在传入的是一个url对象。里面的as,cp参数的生成略过,比较简单。
3>进入这个g.sign函数调用
里面是一个匿名函数的一个方法。在这个匿名函数处打上断点,点击页面刷新,进入到这个匿名函数执行的地方,根据调用栈找到这个地方。
这里在调用这个匿名函数的时候传入了一串字符,一顿操作之后给g.sign定义了函数调用方法。观察这串字符串,和之前的比起来应该是变了很多了。
接下来我们构造调用方法,将匿名函数命名,然后传入字符串和一个对象。然后调用这个对象的sign方法传入参数得到_signature,是的,和以前没有什么变化。当我们构建好navigator之后运行,得出来的参数一看,gg了。
很显然里面还有其他的坑。
Snippets调试可以推荐大家和本地调试结合起来使用。
然后我们来看一下代码,接下来就是需要极大的耐心,切记切记。
这个代码经过了混淆,特别是用switch,case方式进行调用,无法根据调用栈找到规律。作者选择硬杠。
关键参数处打印。
是的,就这些玩意,调试了一天。可以看出来,做了canvas的2d绘图,document操作,验证了ua。怎么办。
一个个模拟。
本地测试。。。。还是gg 了。
这时候想到了2种可能:
1.模拟不彻底。
2.网站环境有别的验证参数。
首先考虑第二种,这个验证很简单,拿到Snippets放到网站页面测试一下,对比下参数可知。
然后考虑是对cookies做了操作。用油猴做了测试,冉鸾。
没办法。
继续调试,对比本地和网站调试的结果。
终于在一处找到了原因。
这个tac就是原因。全局搜索tac.
终于在首页源码中找到了答案。带入代码中请求。成功。
最后:
后来发现头条对canvas似乎并没有做验证,但是这不重要,线在反爬越做越恶心越来越难是真的。而且在调试中发现,头条在网站环境对某些函数做了hook,试想如果在这里面挖坑又的坑倒多少人。另外这个switch的调试也比较恶心。
新年快乐,祝大家越来越牛,越来越好。