乐趣区

关于程序员:以羊了个羊为例浅谈小程序抓包与响应报文修改

在后面的文章中,咱们一起制作了一个天眼查小程序,其中波及到了微信小程序的抓取过程,应泛滥读者的要求,明天咱们一起来看看微信小程序的抓包流程

原本是想以天眼查小程序作为抓包主体的,然而这两天羊了个羊切实是太火了,没方法,咱们也来追一追热点,明天咱们的目标程序就是羊了个羊了!

而且从 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 多平台公布

退出移动版