什么是RPC
RPC,英文RangPaCong,中文让爬虫,旨在为爬虫开路,秒杀一切,让爬虫畅通无阻!
开个玩笑,实际上RPC为远程过程调用,全称RemoteProcedureCall,是一种技术思想而非一种规范或协议。RPC的诞生事实上离不开分布式的发展,RPC主要解决了两个问题:
解决了分布式系统中,服务之间的互相调用问题;
RPC使得在远程调用时,像本地调用一样方便,让调用者感知不到远程调用的逻辑。
RPC的存在让构建分布式系统更加容易,相比于HTTP协议,RPC采用二进制字节码传输,因此也更加高效、安全。在一个典型RPC的使用场景中,包含了服务发现、负载、容错、网络传输、序列化等组件,完整RPC架构图如下图所示:
JSRPC
RPC技术是非常复杂的,对于我们搞爬虫、逆向的来说,不需要完全了解,只需要知道这项技术如何在逆向中应用就行了。
RPC在逆向中,简单来说就是将本地和浏览器,看做是服务端和客户端,二者之间通过WebSocket协议进行RPC通信,在浏览器中将加密函数暴露出来,在本地直接调用浏览器中对应的加密函数,从而得到加密结果,不必去在意函数具体的执行逻辑,也省去了扣代码、补环境等操作,可以省去大量的逆向调试时间。我们以某团网页端的登录为例来演示RPC在逆向中的具体使用方法。(假设你已经有一定逆向基础,了解WebSocket协议,纯小白可以先看看K哥以前的文章)
主页(base64):aHR0cHM6Ly9wYXNzcG9ydC5tZWl0dWFuLmNvbS9hY2NvdW50L3VuaXRpdmVsb2dpbg==
参数:h5Fingerprint
首先抓一下包,登录接口有一个超级长的参数h5Fingerprint,如下图所示:
直接搜一下就能找到加密函数:
其中utility.getH5fingerprint()传入的参数window.location.origin+url格式化后,参数如下:
url="