以羊了个羊为例,浅谈小程序抓包与响应报文修改
在前面的文章中,我们一起制作了一个天眼查小程序,其中涉及到了微信小程序的抓取过程,应众多读者的要求,今天我们一起来看看微信小程序的抓包流程
本来是想以天眼查小程序作为抓包主体的,但是这两天羊了个羊实在是太火了,没办法,咱们也来追一追热点,今天我们的目标程序就是羊了个羊了!
而且从9月20号的某个时刻开始,羊了个羊的接口正式进入到V2时代,也就是相关的通关接口进行了加密处理,请求时需要携带参数 MatchPlayInfo
,而该参数又是通过 JavaScript
的混淆代码来处理的,所以导致一键通过程序都失效了,那么咱们只能另寻出路了,修改 response 响应消息的方法也就应运而生!
MitmProxy 的使用
我们这里使用的抓包程序是 MitmProxy,这是一个用 Python 编写的工具,其安装使用简单,而且通过与自定义的 Python 脚本相结合,可以非常方便的篡改 request 和 response 内容
安装配置 MitmProxy
安装非常简单,直接 pip 即可
pip install mitmproxy
完成安装之后,我们就可以通过命令 mitmdump 来启动了
可以看到,以上面的命令启动之后,会在本地启动一个监听了8080端口的程序,这个就是我们的抓包代理进程了
设置手机代理
这里我们需要保证手机与电脑处于同一个 WiFi 网络之中,我们通过命令 ipconfig 获取电脑的 IP 地址
然后我们进入手机的无线局域网设置当中,选择当前连接的 WiFi,进行 HTTP 代码设置
在代理设置中,服务器填写电脑的 IP 地址,端口填写 8080
这样代理就设置好了
安装证书
为了让手机信任我们的代理,还需要安装证书,通过手机浏览器访问地址:http://mitm.it/
我们选择对应的设备证书下载,比如 Apple 证书
下载完成后,通过设置,“已下载描述文件”进入安装即可
至此,MitmProxy 以及手机侧的配置都已经完成,我们可以进行抓包操作了
抓包操作
我们通过手机打开《羊了个羊》小程序,如果我们运行 mitmdump 命令的界面有数据包打印,那么就说明我们的配置是成功的
下面我们来编写 Python 脚本,来修改 response 内容
修改 response
通过抓包信息分析,我们知道返回地图的接口是 map_info_ex 接口,其响应消息体的内容为
{"err_code":0,"err_msg":"","data": {"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"], "map_seed":[3622853803,3053757364,32667028,3621470055]}}
我们只需要把 map_md5 中的第二个值改为与第一个值一致就可以达到第二关的难度与第一关一样的效果,下面就开始干吧~
对于 MitmProxy 工具而言,我们有如下事件可以截取
针对 HTTP 生命周期的事件:
- 请求:def request(self, flow: mitmproxy.http.HTTPFlow):
- 响应:def response(self, flow: mitmproxy.http.HTTPFlow):
-
其它:
- def http_connect(self, flow: mitmproxy.http.HTTPFlow):
- def requestheaders(self, flow: mitmproxy.http.HTTPFlow):
- def responseheaders(self, flow: mitmproxy.http.HTTPFlow):
- def error(self, flow: mitmproxy.http.HTTPFlow):
这里我们主要用到了响应事件,代码如下
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))
我们判断请求 url 中是否包含 map_info_ex
,如果包含,则篡改 response 信息
下面我们以如下命令重新启动代理程序
这样,当我通过第一关之后,进入第二关时,其难度还是与第一关一样的,怎么样,开心吧!
当然我们还可以篡改其他接口,比如 rank 接口,话题接口等等,都可以轻松达到我们想要的目的,就不再一一赘述了
好了,这就是今天分享的全部内容,喜欢就点个赞吧~
本文由mdnice多平台发布
- 天翼云全场景业务无缝替换至国产原生操作系统CTyunOS!
- 以羊了个羊为例,浅谈小程序抓包与响应报文修改
- 这几种常见的 JVM 调优场景,你知道吗?
- 如此狂妄,自称高性能队列的Disruptor有啥来头?
- 为什么要学习GoF设计模式?
- 827. 最大人工岛 : 简单「并查集 枚举」运用题
- 手把手教你如何使用 Timestream 实现物联网时序数据存储和分析
- 850. 矩形面积 II : 扫描线模板题
- Java 并发编程解析 | 基于JDK源码解析Java领域中的并发锁,我们可以从中学习到什么内容?
- 【手把手】光说不练假把式,这篇全链路压测实践探索
- 大厂钟爱的全链路压测有什么意义?四种压测方案详细对比分析
- 写个续集,填坑来了!关于“Thread.sleep(0)这一行‘看似无用’的代码”里面留下的坑。
- 857. 雇佣 K 名工人的最低成本 : 枚举 优先队列(堆)运用题
- Vue3 实现一个自定义toast(小弹窗)
- 669. 修剪二叉搜索树 : 常规树的遍历与二叉树性质
- 读完 RocketMQ 源码,我学会了如何优雅的创建线程
- 性能调优——小小的log大大的坑
- 1582. 二进制矩阵中的特殊位置 : 简单模拟题
- elementui源码学习之仿写一个el-switch
- 646. 最长数对链 : 常规贪心 DP 运用题