2021.12.9
前言:可知从5月份开始,抖音正式开放了web的接口,然后进行了一次又一次的风控升级,从最初的_signature 到增加滑块,然后再到现在的jsvm套一层混淆加上mstoken&x-bougs等参数。通过分析发现国内部分接口只需要cookie,而不需要验签,当然这里的cookie就有多种办法可以获得,其中最简单的就是opencv识别过滑块的cookie。这里要分析的是tiktok,无需cookie,但对签名的校验就比较全面。
1.1 目标链接:https://www.tiktok.com/@closer_food?lang=zh-Hant-TW
1.2 接口分析:
(这里备注一下,m接口与pc接口只是一个参数不同,其他完全相同)
这里对应的就是用户的详情信息,接口中含有加密参数X-bougs和_signature,通过重放攻击确定了我们需要攻克的就是这两个参数。
2.1 逻辑分析
总所周知,jsvm加密的逻辑是没办法从大搜索法出发了,虽然可以搜索出X-bougs关键字,但怎奈我js没到炉火纯青的地步,看不出个所以然来,所以还是从堆栈出发。
逐步看了下里面的逻辑,可以看出通过jsvm逻辑之后的发送请求,jsvm流程前也存在异步操作,这里我们在发送请求的地方下个断点,重放一下往回看。
这里细一点可以发现,一开始是没有加密的,放行一次后加密就加上了,可以看到arguments中已经存在加密。这里不选择进入jsvm逻辑,往上追可以看到是在一个异步中完成的发送请求。
在这个异步中可以发现一些有趣的逻辑,是一个Promise, 还有一些比较敏感的关键词
这里懂事的小伙伴已经清楚了,不就是重写了XMLHttpRequest的send和open嘛;
到此为止,就是需要验证我们的猜想了;在进入jsvm逻辑之前和之后分别整个断点;
进入jsvm逻辑前的断点,此时还没有加上相关加密参数;
进入jsvm之后,加密参数已经带上;
2.2 结论
到现在就逻辑非常清楚了,在有趣的逻辑里我们可以发现,XMLHttpRequest被作为参数一整个传进了jsvm逻辑,这里就可以用到手段就多了。
第一种手段就是rpc,这里推荐一下渣总的rpc调用框架,个人觉得这是未来的趋势,原理就是hook。感兴趣的可以去看一下。
https://github.com/virjar/sekiro
第二种手段就是老手段了,硬刚,扣代码补环境,这里提示下,主要补环境有三个地方,第一个是整个的jsvm逻辑, 其次就是初始化jsvm时的逻辑,也就是完成这个初始化,我们自己代码中XMLHttpRequest的open与send才会被重写,最后就是加密时的环境检测。
个人秉承着授人以鱼不如授人以渔的思想。
3.1 主要实现
我们主要的手段就是跟网站的加密一般,自己构造一个XMLHttpRequest,重写我们需要的接口需要的数据,然后也通过初始化jsvm逻辑,把我们构造的对象传入加密逻辑,然后返回加密好的数据。
3.2 实现步骤,首先是扣出jsvm逻辑,这里需要补上少量环境,给我们的window对象附上一个byted_acrawler对象,里面就存在着我们第二步初始化需要的init函数;
(这里调试是用的v8引擎,因为自己有写了一个环境检测自吐框架,实现加密逻辑后再修改成的node环境;)
这里可以看到已经再window上绑定了对象,下一步就是进行初始化,把XMLHttpRequest的send和open改写,既然要改写,那么我们就需要先定义XMLHttpRequest对象,这一步具体就是扣;扣未被改写前的send和open;这里就直接掠过扣代码这种无聊的事情;
第三步就是根据对应的接口,伪造异步操作中的对象操作,这里面也会检测较多的环境;
就打个断点慢慢扣的事呗;主要是环境的检测都要过掉或补齐,不然会直接返回空值;
结果:
经测试用户接口 搜索接口等都是跑得通的;
最后说一下,能看到这篇文章的,都是对爬虫感兴趣,又有兴趣去做采集的,相对来说,本文所说到的加密解密还是比较适合新手的,之所以这么说,等到你安安静静去分析时你就会恍然大悟,原来只是这样;跑通后就可以去还原自己喜欢的语言的源码,这样可以让自己更上一层楼,后面我也会去还原成python版本,这可能就是干爬虫的一个分水岭吧。源码放在下面的链接,之所以设置这个价格是希望各位看官能自己下手去提升,避免伸手党。
当然 要下载也乐意至极,里面有我一些debug的点没有删除但注释了,都是一些检测,可以借鉴学习学习。资源里还有一个彩蛋,关于ck的。
下载链接可搜索公众号: jqiu爬虫分析日记,如有问题可私聊或留言;
版权所有:Copyright © 2002-2017 欧陆平台-欧陆娱乐-注册登录中心 版权所有 粤IP**********