微信小游戏抓包分析

文章目录

  • 故事起因
  • 微信小游戏
  • 冲关之路
    • Fiddler抓包
      • PC软件安装
      • 移动端代理配置
      • 抓包尝试
      • 模拟请求
      • 反编译小程序
      • 总结

故事起因

       新的一年又开始了,因为才恢复正常工作不久,手上的活儿也不是很多,因此就有了一些时间供本人挥霍。期间为了帮一个同学的忙,玩了一段时间Arduino,结果当实现的差不多的时候,又告诉我不需要了,当时真的是欲哭无泪,好吧扯远了,原谅笔者凑了一波字数。
       故事的起因是在一次出差中,因为出差的地方只能做大巴去,所以路上消耗的时间还是比较久的,期间我的leader向我分享了一个微信小游戏-消灭病毒,然后我两就沉浸在了冲关的道路上,越走越远。
       这个游戏跟早些年的飞机大战很像,但玩法比飞机大战丰富多了,并且依托于小游戏的平台,所以还是火了一把。值得注意的是,这个游戏并没有充值的通道,只能靠一些分享或者看广告来获取额外的奖励。因为还有排行榜功能,所以也算是激起了玩家的战斗欲,总之我和我leader之间就默默地形成了看谁冲关冲的远的这种现象,正值这周接了个保障的活,空闲时间比较多,所有才有了这篇博客。

微信小游戏

       消灭病毒这款游戏最开始好像是有自己的应用的(具体是不是就不知道了,只知道有apk版的),然后可能玩家比较多,然后依托于微信小游戏平台,做了移植,笔者也是玩的微信小游戏版本的。
       由于消灭病毒随着关卡的增长,难度越来越高,再加上笔者的游戏水平实在是不咋滴,当然最重要的一点是跟我比排行的leader的水平比我要高,所以整的我心慌意乱(这里使用了夸张的修辞手法),因此升起了一些小心思,是不是可以通过一些其它的手段能提升我的能力呢,有着宽裕的时间再加上以前有着一点儿android,手游,小程序的基础,便开始了我的"上分之路"。

冲关之路

Fiddler抓包

       微信小游戏在我的理解其实就是H5游戏,只不过是依托在了微信这个大平台上,玩家打开某个小程序后,便会从微信的服务器上下载对应的应用包下来(wxapkg,小程序的一种包结构,类似于以前的apk包),然后再在本地的V8环境下运行着。
       因为笔者以前也做过手游,也接触过飞行射击类的游戏,因此猜测,消灭病毒这种弱联网游戏一般都只有在关卡结算或者退出时,才会向服务器上写入玩家数据,所以便想着有没有机会了解一下这个数据交互的过程,因此决定抓包查看。
       这里笔者使用了Fiddler工具进行抓包,下面就先简单地介绍一下抓包的流程。

PC软件安装

       Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。(以上内容摘自百度百科,详细资料可以通过右侧的传送门前往-Fiddler传送门)
       对这个工具有了一个初步的了解后,我们便可以开始进行安装了,笔者是前往的Fiddler官网进行的下载。
       进入官网,点击右上角的TRY NOW按钮,来获取Fiddler。
微信小游戏抓包分析_第1张图片
       根据提示,填充相关信息后下载Fiddler的安装包。
微信小游戏抓包分析_第2张图片
       下载后成功获得安装包,然后一路傻瓜式的安装即可。
微信小游戏抓包分析_第3张图片
       安装成功后,点解Fiddler.exe图标,启动Fiddler。
微信小游戏抓包分析_第4张图片
       Fiddler运行界面。
微信小游戏抓包分析_第5张图片
       这里我们需要进行一下简单的配置,详细步骤可以参考Fiddler手机抓包。
       点击Tools按钮,出现下拉选项,继续选中Options按钮进入设置界面。
微信小游戏抓包分析_第6张图片
       进入Options界面,点击General选项卡,勾选如下选项(该选项基本是默认的好像)
微信小游戏抓包分析_第7张图片
       进入Options界面,点击HTTPS选项卡,勾选如下选项。
微信小游戏抓包分析_第8张图片
       进入Options界面,点击Collections选项卡,勾选如下选项,这里主要注意的是监听端口的填写,不能与本地的应用端口冲突,该端口号之后需要使用到。
微信小游戏抓包分析_第9张图片
       配置完成后点击OK,然后重启Fiddler工具,使配置生效。

移动端代理配置

       Fiddler抓包前提是使用的移动端(泛指手机)与安装了Fiddler工具的PC机处于同一个无线网络内。然后手机通过设置代理来实现由Fiddler转发的功能。这里笔者使用的手机是小米8。
       打开无线设置,然后选中对应的无线网进行进一步的管理,在代理设置处改选为Manual,然后HostName填写为安装了Fiddler工具的主机IP,端口号为之前安装Fiddler设置的端口号。
微信小游戏抓包分析_第10张图片
       修改成功后(手机跟pc在一个无线网),用手机浏览器访问Hostname:Port下载证书(抓取Https时需要的),下载完成后安装即可。
微信小游戏抓包分析_第11张图片
       大部分手机可以直接安装证书,笔者的小米8在安装过程中需要一点儿小弯路,无法直接安装,需要在无线设置-增强型设置里手动安装。
       无线管理-增强型设置。
微信小游戏抓包分析_第12张图片
       安装证书。
微信小游戏抓包分析_第13张图片
       选择对应的证书进行安装。
微信小游戏抓包分析_第14张图片
       完成上述操作后,就可以在Fiddler中抓取到手机的包了。

抓包尝试

       保持需要抓包的手机跟安装Fiddler软件的PC机处在同一个可以上互联网的无线网络中,根据上一条的配置逐步操作。
       成功启动FIddler后,可以在如下图标红的位置查看本机的IP,然后手机端配置相应的代理,Fiddler即可实现抓包功能。
微信小游戏抓包分析_第15张图片
       配置正常,运行正常时,可以在左侧发现大量的请求。
微信小游戏抓包分析_第16张图片
       此时,用手机登录小游戏,在左侧的请求列表中,就会看到一些有意思的请求了。
微信小游戏抓包分析_第17张图片
       从请求名字中,也许就能发现些什么,upload,开发小哥的接口做的还是很见名思意的,默默地点进去瞅一瞅,通过Fiddler工具,我们可以看到请求和回应的详细信息。
微信小游戏抓包分析_第18张图片
       点开upload请求的请求内容,看到了一堆json类型的数据,并且发现数据并没有加密,居然是明文传输=-=,直接就能看出火力值,金币,钻石,活力等信息。
微信小游戏抓包分析_第19张图片

模拟请求

       因为在上一步发现消灭病毒这款微信小游戏,可以比较轻松地抓取到请求的内容,并且是明文传输的,所以便迫不及待地打开了我的Restlet Client工具(笔者的笔记本因为安装Postman老是报错,所以就装了个类似于Postman的工具Restlet Client来调试了)。
微信小游戏抓包分析_第20张图片
       对照着之前Fiddler抓取的请求内容,创建好HEADER和BODY(第一次尝试,完全拷贝抓取的信息),默默地点了一波发送,然后就发现返回跟Fiddler抓取的Response是一致的,于是。。。嘿嘿嘿。。。
微信小游戏抓包分析_第21张图片
       发现可以直接用工具发送请求并且服务器正常回应后,二话不说,直接把请求内容中的什么金币啊钻石啊之类的往上加了加(我真的只加了一点儿一点儿,诶?加了几个零来着!),然后点击发送,然后发现返回了1000,操作失败,看来并没有想象中的简单。
微信小游戏抓包分析_第22张图片
       第一次尝试失败后,就意识到了在请求体中必然有一些数据是用来验证的,于是仔细地观察一波。没错,被马赛克勇士绑架的一些信息,都是一些无序的字符组合,因此暂时对这些数据进行重点分析。
在这里插入图片描述
      通过进一步的观察后发现,uid,openid其实就是对应着游戏中设置界面的ID,于是一下子排除了两个选项。
微信小游戏抓包分析_第23张图片
      再看剩下来的两个怀疑对象,嗯,名字都叫sign,可疑度增加1000点,经过多条数据抓取,可以发现,短时间内的第一个sign值是相同的,因此直接锁定最后一个sign值,该值每次请求都会发生改变。这里就牵扯到了数据的加密解密了,因此就想着是否能获取小程序源码了,毕竟加密解密不能光靠猜。

反编译小程序

      小程序刚出来的时候,看过一点儿入门基础,小游戏可以看成一种简化的小程序,但又加强了绘制功能。因为以前从没有反编译过小程序,因此就找了把度娘,然后就再次验证了度娘的强大。
      笔者参考了链接如何反编译小程序,使用了夜神模拟器,RE管理器以及Github上qwerty472123大神写的node.js版本的脚本(如果没有nodejs的环境话,可能还要考虑一下nodejs环境的安装,这个直接度娘即可)。在使用脚本前需要安装一系列依赖,根据上面连链接博客中一步一步操作(笔者在尝试的时候,少了不止参考博客中的依赖,总之少啥就装啥),最终成功反编译出了源码。
微信小游戏抓包分析_第24张图片
      使用微信开发工具打开工程,静静地观摩一波源码。导入时当提示需要appid之类时,只需点击小游戏,然后会自动分配一个id给你(这个游戏没有,但点完之后就可以进工程了=-=)。
微信小游戏抓包分析_第25张图片
      仔细浏览一下大概的结构,就会发现主要的逻辑全在code.js中。然后根据之前推断的一些关键字,sign,archive\upload,md5等进行一波全局搜索,就能发现一些有趣的事情了。最终发现了sign的生成原理,并且在生成过程中还删除了一些信息,appid和secret。
微信小游戏抓包分析_第26张图片
      删除的信息,全局搜索了一下,居然还搜到了,很是尴尬。。
微信小游戏抓包分析_第27张图片
     加上之前知道了加密过程,将加密方法截取出来,填入自己的数据,尝试生成sign值。
微信小游戏抓包分析_第28张图片
在这里插入图片描述
     将自己生成的sign值跟之前截取到的消息中的sign值比对了一下,发现一致,就知道了本次探索基本结束了,静静地修改数据,重新生成sign值,然后发送请求,然后就成功修改了数据。

总结

     笔者在本次摸索中也遇到了一些坑,比如数据格式的正确性,运行库的依赖等等,不过总体还是实现了预期效果。
     最后非常感谢一位不认识的朋友,给我提供了非常多的帮助,非常感动。
     下面将附上他的博客的地址,欢迎大家前往观看,TMaize的博客,同时他也制作了修改的小工具供大家使用,在线修改工具

你可能感兴趣的:(小程序)