在前面的文章中,我们一起制作了一个天眼查小程序,其中涉及到了微信小程序的抓取过程,应众多读者的要求,今天我们一起来看看微信小程序的抓包流程。
本来是想以天眼查小@ r |程序作为抓包主体的,但是这两天羊了个羊实在是太火了,没办法,咱们也来追一追热点T 6 = , h , 6 x I,今天我们的目标程序就是羊了个羊了!
而且从9月20号的某个时刻开始,羊了个羊的接口正式进入到V2时代,也就是相关的通关接口进行了加密处理,\ e ~请求时需要携带参数MatchPlayInfo,而^ { v / w H t该参数又是通过JavaScript的混淆代N u [ ; & l码来处理的,所以导致一键通过程序都失效了,那么咱们只能另寻出路了,修改 response 响应消息的方法也就应运而生!
Mitm! ] q 7 3 | [Proxy 的使用
我们这里使用的抓包程序是 MitmZ O \ } ^ / HProxy,这是一个用 Python 编写的工具,其安装使用简单,而且通过与0 : v i ~ I ^ M自定义的 Pytb A =hon 脚本相结b ! u合,可以非常方便地篡改 requA $ 7 Yest 和 response 内容
安装配置 MitmProxy
安装非常简单,直接 pip 即可
复制pip install mitmproxy1.
完成安装之后,我们就可以通过命t u g j ] 7令 mitmdump 来启动了
可以看到,以上面的命令启动之后,会在本地启动一个监听了8080端口的程序,这个就是我们的T \ D E H s & +抓包代理进程了
设置手机代理
这里我们需要保证手机与电脑| q A处于同一个 WiFi 网络之中,我们通过命令 ipconfig 获取电脑的 IP 地P + 4 g 5 9址
然后我们进入手机的无线局域网设置当中,选择当前连接的 WiFi,进行 HTTP 代码设置

在代理设置中,服务器填写电脑的 IP 地址,端口填写 8080。

这样代理就设置好了。
安装证书
为了让手机信任我们的代理,还需要安装证书,通~ n c t F O g k过手机浏览器访问地址:htt2 D j \ E xp://mitm.it/。

我们选择对应的设备证书下载,比如 Apple 证书。
下载完成后,通过设P v G – e置,“已下载描述文件”进入安装即可。

至此,MitmProxy 以及手机侧的配置都已经完成,我们可以进行抓包操作了。
抓包操作
我R V H } D 5们通过手机打开《羊了个羊》小程[ k 5序,如果我们运行 mitmdump 命令的界面有数4 X H据包打印,那么就说明我们的配置是成功的

下面我们来编写 Pytho4 o o ` c ` Rn 脚本,来修改 response 内容。
修改 response
通过* – R t !抓包信息分析,我们知道返回地图的接口是 map_info_ex 接口,其响应消息体的内容为:
复制{"err_code":0,"err_msg":"","data":
{"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"],
"map_seed":[3622853803,3053757364,32667028,3621470055]}}1.2.3.
我们只需要把 map_md5 中的第二个值改为与第一个值一致就可以达到第二关的难度与第一关一样的效果,下面就开始干吧~
对于 MitmProxy 工具而言,我们有如下事件可以截s 4 1 J Z { 1 c取。
针对 HTTP 生命周期的事件:
- 请求:def request(self, flow: mitmproxyP v T k } b L J.http.HTTP& o H = zFlow)D K : I C m ,:
- 响应:def response(self, flow: mitmproxy.http.HTTPFlow):
- 其它:
- def http_connect(self, flow: mitmproxy.http.HTTPFlow):
- def requestheaders(self, flow: mitmprN c S k Q n i Yoxy.http.HTTPFlow):
- def responseheaders(self, flow: mitmproxy.htty n lp.HTTPFlow):
- def error(self, flow: mitmproxy.http.HTTPFlow)U I U u \ B G k 4:
这里我们主要用到了响应事件,代码如下
复制def response(flow):
tmp_txt = {"err_code":0,"err_msg":"","data":
{"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"],
"map_seed":[3622853803,3053757364,32667028,3621470055]}}
if "map_info_ex" in flow.request.url:
info(str(response.text))
print(type(tmp_txt))
print(type(json.dumps(tmp_txt)))
response.set_text(json.dumps(tmp_txt))
info(str(response.text))1.2.3.4.5.6.7.8.9.10.
我们判断请求 url 中是否包含 map_info\ _ r T f . B q_ex,如果包含,则篡改 response 信息。
下面我们以如下命令重新启动代理程序。

这样,当我通过第一关之后,进入第二关时,其难度还是与第一关一样的,怎么样,开心吧!
当然我们还可以篡改其他接口,比如 rank 接口,话题接口等等,都可以轻o W H _ :松达到我们想要的目的,就不再一一赘述了
好了,这就是今天分^ x v O f A , j享的全部内容。
企业/工厂/门店销量暴增方案加微获取
- 微信号
7665991
添加微信 - 拨打电话电话号
15555562300