以一只羊为例,说说小程序抓包和响应报文篡改没有办法,我们赶上热点吧,我们今天的目标程序是一只羊!而且,从9月20日的某个时刻开始,羊羊接口正式进入V2时代,即相关通关接口已经加密,请求时需要携带参数MatchPlayInfo,参数为通过JavaScript传递。混淆代码就是用来处理的,所以一键通关程序是无效的,只能另辟蹊径,修改response响应消息的方法应运而生!MitmProxy的使用我们这里使用的抓包程序是MitmProxy,它是一个用Python编写的工具。它易于安装和使用,并结合自定义Python脚本,可以非常方便地篡改请求和响应内容。安装配置MitmProxy安装非常简单,直接pippipinstallmitmproxy安装完成后,我们就可以通过命令mitmdump来启动它了。可以看到用上面的命令启动后,本地会启动一个监听8080端口的程序。这是我们的抓包代理进程设置。这里需要保证手机和电脑在同一个WiFi网络中。我们通过命令ipconfig获取电脑的IP地址,然后我们进入手机的无线局域网设置,选择当前连接的WiFi,继续。HTTP代码在代理设置中设置,服务器填写电脑的IP地址,端口填写8080,这样代理就设置好了。安装证书为了让手机信任我们的代理,您还需要安装证书,通过手机浏览器访问地址:http://mitm.it/。我们选择对应的设备证书进行下载,比如苹果证书。下载完成后,通过设置,进入“下载的描述文件”进行安装。至此,MitmProxy和手机端的配置已经完成,我们可以进行抓包操作了。对于抓包操作,我们打开手机端的《羊了个羊》小程序。如果mitmdump命令的界面有数据包打印出来,就说明我们的配置成功了。让我们编写一个Python脚本来修改响应内容。修改响应通过抓包信息分析,我们知道返回map的接口是map_info_ex接口,响应消息体内容为:{"err_code":0,"err_msg":"","data":{"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"],"map_seed":[3622853803,3053757364,32667028,3621470055]}我们只需要修改第二个mddmddifficulty的值与map一致即可和第一关一样,现在开始吧~对于MitmProxy工具,我们有以下几个可以拦截的事件。HTTP生命周期的事件:请求:defrequest(self,flow:mitmproxy.http.HTTPFlow):response:defresponse(self,flow:mitmproxy.http.HTTPFlow):other:defhttp_connect(self,flow:mitmproxy.http.HTTPFlow):defrequestheaders(self,flow:mitmproxy.http.HTTPFlow):defresponseheaders(self,flow:mitmproxy.http.HTTPFlow):deferror(self,flow:mitmproxy.http.HTTPFlow):这里我们主要使用response事件,代码如下defresponse(flow):tmp_txt={"err_code":0,"err_msg":"","data":{"map_md5":["046ef1bab26e5b9bfe2473ded237b572","046ef1bab26e5b9bfe2473ded237b572"],"map":[3622853803,3053757364,32667028,3621470055]}}如果flow.request.url中的"map_info_ex":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,如果包含则篡改响应信息。接下来,我们使用以下命令重新启动代理。这样当我过了第一关进入第二关的时候,难度还是和第一关一样。怎么样,玩得开心吧!当然我们也可以篡改其他的界面,比如排名界面,话题界面等等,都可以轻松达到我们想要的目的,就不一一赘述了。这就是今天分享的所有内容。
