冬晨夕阳 发表于 2021-8-17 10:41:57

抖音web直播数据采集


本案例是基于RPC的抖音web直播数据采集。还原protobuf协议的可以参考《抖音web-protobuf》。




文章内容仅供参考学习,如有侵权请联系作者进行删除
可采集内容和页面呈现内容相同,包括用户评论、关注、谁来了、送礼物等数据。



http://bbs.nightteam.cn/upload/attach/202108/2827_PWMMWV3RGYEX4T8.png




RPC(Remote Procedure Call)是远程调用的意思。

在Js逆向时,我们本地可以和浏览器以服务端和客户端的形式通过websocket协议进行RPC通信,这样可以直接调用浏览器中的一些函数方法,不必去在意函数具体的执行逻辑,可以省去大量的逆向调试时间。

像抖音直播间的数据传输采用的是protobuf,如果完全解析的话实在是浪费时间,不适合做案例教程。

还有重要的一点是,通过RPC的方法可以不用搞加密参数signature,开一个页面就可以了。



接口分析
首先通过控制台进行抓包,普通的get请求。有加密参数signature,不过我们不需要搞。

https://img-blog.csdnimg.cn/52dc29235d31418790735218cccaa158.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70




返回的是经过 protobuf 序列化数据。




https://img-blog.csdnimg.cn/153e40a6ec044ffe834e3ad7e1495e7c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70




response里面有关键字 WebxxxxMessage 。




https://img-blog.csdnimg.cn/b2c9c30fb4f0414ca94a736ae296a965.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70




其实全局直接搜message就行




https://img-blog.csdnimg.cn/d1dd8693883140c78d31b703d34e8cd3.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70

进来接着搜,这里response.decode看起来像,所以断点调试。

其实最拼的就是每个像的地方都断点。

https://img-blog.csdnimg.cn/060094d70a97489584173f7d0c84d68d.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70




然后调试发现在 var r = s.im.decode(n) ,这里返回的解码后的数据。




https://img-blog.csdnimg.cn/f2db79cd004b4c2499e5420514135841.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70



所以说在这里进行RPC就行。



文件覆盖
首先需要修改和替换它的Js文件,为了方便操作和讲解,我选择通过控制台的Overriders来进行Js文件替换。当然也可以选择通过Fiddler、Mitmproxy等抓包工具替换,或者通过Google的GRPC协议来进行Js内容替换。




在Source中选择Overrides,然后创建一个本地目录。 Enable Local Overrides 需要勾选。




https://img-blog.csdnimg.cn/a0439e10d6e84abc92d7ab38bedb7d2a.png




然后在没有格式化的Js文件上右键点击Save for overrides。

https://img-blog.csdnimg.cn/fa2bf2df48b043a4a880aaca9b95875b.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70



接下来就可以进行修改了,将格式化后的代码复制到我们save的文件中,然后ctrl+s进行保存。



RPC调用
接着我们要做的是在一个位置创建一个websocket连接来供我们进行RPC调用。

首先要确定注入位置,我们需要添加的websocket客户端JS代码位置在这个 var r = s.im.decode(n) 下面。





代码如下:

https://img-blog.csdnimg.cn/2c499076047c4cc5bbb2933088c7685c.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70



不能单纯的在该函数中写入创建客户端,这样会导致死循环,无限创建客户端。所以需要进行代码上的判断,如果已经创建过就不再进行创建客户端。



接下来定义自己的服务端代码就可以进行测试了。 python代码在博客原文中。



运行示例
我没有更进一步的去解析,你可以根据方法名提取对应数据。

https://img-blog.csdnimg.cn/13ba3877aec44d05abbb4d560912e140.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzU4MjEwMQ==,size_16,color_FFFFFF,t_70




为了做一些推广,回复可见的内容是专栏地址,有很多案例,以及该文章的源码。




upload/attach/202108/2827_6UF7DXBV2RCACE4.jpg










https://blog.csdn.net/weixin_43582101/category_9291501.html





Chris_Nesson 发表于 2021-8-17 10:47:14

111111

dada0623 发表于 2021-8-17 11:02:13

牛哇牛哇

nanxun 发表于 2021-8-17 11:09:20

111

smart 发表于 2021-8-17 11:28:30

111

dong 发表于 2021-8-17 12:07:33

ok

17630224152 发表于 2021-8-17 14:22:40

111

xxr 发表于 2021-8-17 14:37:31

牛蛙牛蛙

pancake666 发表于 2021-8-17 17:03:34

666

Lw 发表于 2021-8-19 14:17:17

66
页: [1] 2 3 4 5 6 7 8
查看完整版本: 抖音web直播数据采集