本
文
摘
要
本案例是基于RPC的抖音web直播数据采集。还原protobuf协议的可以参考《抖音web-protobuf》。
RPC(Remote Procedure Call)是远程调用的意思。
在Js逆向时,我们本地可以和浏览器以服务端和客户端的形式通过websocket协议进行RPC通信,这样可以直接调用浏览器中的一些函数方法,不必去在意函数具体的执行逻辑,可以省去大量的逆向调试时间。
像抖音直播间的数据传输采用的是protobuf,如果完全解析的话实在是浪费时间,不适合做案例教程。
还有重要的一点是,通过RPC的方法可以不用搞加密参数signature,开一个页面就可以了。
接口分析
首先通过控制台进行抓包,普通的get请求。有加密参数signature,不过我们不需要搞。
返回的是经过 protobuf 序列化数据。
response里面有关键字 WebxxxxMessage 。
其实全局直接搜message就行
进来接着搜,这里response.decode看起来像,所以断点调试。
其实最拼的就是每个像的地方都断点。
然后调试发现在 var r = http://s.im[o].decode(n) ,这里返回的解码后的数据。
所以说在这里进行RPC就行。
文件覆盖
首先需要修改和替换它的Js文件,为了方便操作和讲解,我选择通过控制台的Overriders来进行Js文件替换。当然也可以选择通过Fiddler、Mitmproxy等抓包工具替换,或者通过Google的GRPC协议来进行Js内容替换。
在Source中选择Overrides,然后创建一个本地目录。 Enable Local Overrides 需要勾选。
然后在没有格式化的Js文件上右键点击Save for overrides。
接下来就可以进行修改了,将格式化后的代码复制到我们save的文件中,然后ctrl+s进行保存。
RPC调用
接着我们要做的是在一个位置创建一个websocket连接来供我们进行RPC调用。首先要确定注入位置,我们需要添加的websocket客户端JS代码位置在这个 var r = http://s.im[o].decode(n) 下面。
代码如下:
不能单纯的在该函数中写入创建客户端,这样会导致死循环,无限创建客户端。所以需要进行代码上的判断,如果已经创建过就不再进行创建客户端。
接下来定义自己的服务端代码就可以进行测试了。 python代码在博客原文中。
运行示例
我没有更进一步的去解析,你可以根据方法名提取对应数据。
送IP啦~注册免费送您一万IP,还在等什么
点击下方链接注册吧
电脑点:
代理云 - 可视化用户控制台console.v4.dailiyun.com/user/?channel=wym手机点:
代理云 - 可视化用户控制台console.v4.dailiyun.com/user/mobile/?channel=wymM