微信小游戏抓包分析


(最近刚来到简书平台,以前在CSDN上写的一些东西,也在逐渐的移到这儿来,有些篇幅是很早的时候写下的,因此可能会看到一些内容杂乱的文章,对此深感抱歉,以下为正文)


引子

新的一年又开始了,因为才恢复正常工作不久,手上的活儿也不是很多,因此就有了一些时间供本人挥霍。期间为了帮一个同学的忙,玩了一段时间Arduino,结果当实现的差不多的时候,又告诉我不需要了,当时真的是欲哭无泪,好吧扯远了,原谅笔者说了一波闲话。

故事的起因是在一次出差中,因为出差的地方只能做大巴去,所以路上消耗的时间还是比较久的,期间我的Leader向我分享了一个微信小游戏-消灭病毒,然后我两就沉浸在了冲关的道路上,越走越远。

这个游戏跟早些年的飞机大战很像,但玩法比飞机大战丰富多了,并且依托于小游戏的平台,所以还是火了一把。值得注意的是,这个游戏并没有充值的通道,只能靠一些分享或者看广告来获取额外的奖励。因为还有排行榜功能,所以也算是激起了玩家的战斗欲,总之我和我Leader之间就默默地形成了看谁冲关冲的远的这种现象,正值这周接了个保障的活,空闲时间比较多,所有才有了这篇文章。

正文

Fiddler抓包

微信小游戏在我的理解其实就是H5游戏,只不过是依托在了微信这个大平台上,玩家打开某个小程序后,便会从微信的服务器上下载对应的应用包下来(wxapkg,小程序的一种包结构,类似于以前的apk包),然后再在本地的V8环境下运行着。

因为笔者以前也做过手游,也接触过飞行射击类的游戏,因此猜测,消灭病毒这种弱联网游戏一般都只有在关卡结算或者退出时,才会向服务器上写入玩家数据,所以便想着有没有机会了解一下这个数据交互的过程,因此决定抓包查看。

这里笔者使用了Fiddler工具进行抓包,下面就先简单地介绍一下抓包的流程。

PC软件安装

Fiddler是一个http协议调试代理工具,它能够记录并检查所有你的电脑和互联网之间的http通讯,设置断点,查看所有的“进出”Fiddler的数据(指cookie,html,js,css等文件)。Fiddler 要比其他的网络调试器要更加简单,因为它不仅仅暴露http通讯还提供了一个用户友好的格式。(以上内容摘自百度百科)

对这个工具有了一个初步的了解后,我们便可以开始进行安装了,笔者是前往的Fiddler官网进行的下载。
进入官网,点击右上角的TRY NOW按钮,来获取Fiddler。


Fiddler官网

根据提示,填充相关信息后下载Fiddler的安装包。


Fiddler安装包下载

下载后成功获得安装包,然后一路傻瓜式的安装即可。


Fiddler安装程序

安装成功后,点解Fiddler.exe图标,启动Fiddler。


Fiddler启动程序

Fiddler运行界面

Fiddler运行界面

这里我们需要进行一下简单的配置,详细步骤可以参考Fiddler手机抓包
点击Tools按钮,出现下拉选项,继续选中Options按钮进入设置界面。

Fiddler设置界面

进入Options界面,点击General选项卡,勾选如下选项(该选项基本是默认的好像)


General选项

进入Options界面,点击HTTPS选项卡,勾选如下选项。

HTTPS选项设置

进入Options界面,点击Collections选项卡,勾选如下选项,这里主要注意的是监听端口的填写,不能与本地的应用端口冲突,该端口号之后需要使用到。

Collections选项设置

配置完成后点击OK,然后重启Fiddler工具,使配置生效。

移动端代理配置

Fiddler抓包前提是使用的移动端(泛指手机)与安装了Fiddler工具的PC机处于同一个无线网络内。然后手机通过设置代理来实现由Fiddler转发的功能。这里笔者使用的手机是小米8。

打开无线设置,然后选中对应的无线网进行进一步的管理,在代理设置处改选为Manual,然后HostName填写为安装了Fiddler工具的主机IP,端口号为之前安装Fiddler设置的端口号。


手机端代理设置

修改成功后(手机跟pc在一个无线网),用手机浏览器访问Hostname:Port下载证书(抓取Https时需要的),下载完成后安装即可。


证书下载

大部分手机可以直接安装证书,笔者的小米8在安装过程中需要一点儿小弯路,无法直接安装,需要在无线设置-增强型设置里手动安装。
无线管理-增强型设置。


小米机型特殊设置

安装证书

证书安装

选择对应的证书进行安装。


证书安装

完成上述操作后,就可以在Fiddler中抓取到手机的包了。

抓包尝试

保持需要抓包的手机跟安装Fiddler软件的PC机处在同一个可以上互联网的无线网络中,根据上一条的配置逐步操作。
成功启动FIddler后,可以在如下图标红的位置查看本机的IP,然后手机端配置相应的代理,Fiddler即可实现抓包功能。


状态查看

配置正常,运行正常时,可以在左侧发现大量的请求。


运行界面

此时,用手机登录小游戏,在左侧的请求列表中,就会看到一些有意思的请求了。


运行界面

从请求名字中,也许就能发现些什么,upload,开发小哥的接口做的还是很见名思意的,默默地点进去瞅一瞅,通过Fiddler工具,我们可以看到请求和回应的详细信息。


运行界面

点开upload请求的请求内容,看到了一堆json类型的数据,并且发现数据并没有加密,居然是明文传输=-=,直接就能看出火力值,金币,钻石,活力等信息。


运行界面

模拟请求

因为在上一步发现消灭病毒这款微信小游戏,可以比较轻松地抓取到请求的内容,并且是明文传输的,所以便迫不及待地打开了我的Restlet Client工具(笔者的笔记本因为安装Postman老是报错,所以就装了个类似于Postman的工具Restlet Client来调试了)。


Restlet Client客户端

对照着之前Fiddler抓取的请求内容,创建好HEADER和BODY(第一次尝试,完全拷贝抓取的信息),默默地点了一波发送,然后就发现返回跟Fiddler抓取的Response是一致的,于是。。。嘿嘿嘿。。。


模拟请求尝试

发现可以直接用工具发送请求并且服务器正常回应后,二话不说,直接把请求内容中的什么金币啊钻石啊之类的往上加了加(我真的只加了一点儿一点儿,诶?加了几个零来着!),然后点击发送,然后发现返回了1000,操作失败,看来并没有想象中的简单。


模拟请求尝试

第一次尝试失败后,就意识到了在请求体中必然有一些数据是用来验证的,于是仔细地观察一波。没错,被马赛克勇士绑架的一些信息,都是一些无序的字符组合,因此暂时对这些数据进行重点分析。


数据分析

通过进一步的观察后发现,uid,openid其实就是对应着游戏中设置界面的ID,于是一下子排除了两个选项。


游戏ID

再看剩下来的两个怀疑对象,嗯,名字都叫sign,可疑度增加1000点,经过多条数据抓取,可以发现,短时间内的第一个sign值是相同的,因此直接锁定最后一个sign值,该值每次请求都会发生改变。这里就牵扯到了数据的加密解密了,因此就想着是否能获取小程序源码了,毕竟加密解密不能光靠猜。

反编译小程序

小程序刚出来的时候,看过一点儿入门基础,小游戏可以看成一种简化的小程序,但又加强了绘制功能。因为以前从没有反编译过小程序,因此就找了把度娘,然后就再次验证了度娘的强大。

笔者参考了链接如何反编译小程序,使用了夜神模拟器,RE管理器以及Github上qwerty472123大神写的node.js版本的脚本(如果没有nodejs的环境话,可能还要考虑一下nodejs环境的安装,这个直接度娘即可)。在使用脚本前需要安装一系列依赖,根据上面连链接博客中一步一步操作(笔者在尝试的时候,少了不止参考博客中的依赖,总之少啥就装啥),最终成功反编译出了源码。

小程序源码

使用微信开发工具打开工程,静静地观摩一波源码。导入时当提示需要appid之类时,只需点击小游戏,然后会自动分配一个id给你(这个游戏没有,但点完之后就可以进工程了=-=)。


小程序源码

仔细浏览一下大概的结构,就会发现主要的逻辑全在code.js中。然后根据之前推断的一些关键字,sign,archive\upload,md5等进行一波全局搜索,就能发现一些有趣的事情了。最终发现了sign的生成原理,并且在生成过程中还删除了一些信息,appid和secret。


小程序源码

删除的信息,全局搜索了一下,居然还搜到了,很是尴尬。。


小程序源码

加上之前知道了加密过程,将加密方法截取出来,填入自己的数据,尝试生成sign值。


模拟加密过程

模拟加密获取sign值

将自己生成的sign值跟之前截取到的消息中的sign值比对了一下,发现一致,就知道了本次探索基本结束了,静静地修改数据,重新生成sign值,然后发送请求,然后就成功修改了数据。

总结

笔者在本次摸索中也遇到了一些坑,比如数据格式的正确性,运行库的依赖等等,不过总体还是实现了预期效果。

最后非常感谢一位不认识的朋友,给我提供了非常多的帮助,非常感动。
下面将附上他的博客的地址,欢迎大家前往观看,TMaize的博客
,同时他也制作了修改的小工具供大家使用,在线修改工具

以上为本篇的全部内容。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,470评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,393评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,577评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,176评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,189评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,155评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,041评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,903评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,319评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,539评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,703评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,417评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,013评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,664评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,818评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,711评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,601评论 2 353

推荐阅读更多精彩内容

  • 转载地址 image.png 前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的htt...
    菜菜编程阅读 21,138评论 0 28
  • 原因 在现实项目中,由于开发的经常调试,接口的不稳定,和接口文档的不及时更新,我们选择做接口测试,更多的需要自己抓...
    我为峰2014阅读 3,112评论 1 5
  • 过滤器 前言 fiddler是一个很好的抓包工具,默认是抓http请求的,对于pc上的https请求,会提示网页不...
    jmyang1518阅读 3,090评论 0 13
  • 相信我们的读者中有不少是做手机测试的同学,如果我们的被测APP是有网络交互功能的(比如说一个电商APP或者论坛AP...
    宇文臭臭阅读 4,956评论 1 7
  • 最近过得有点不是寻常,堕落中带着奋进,绝望中透露着希望,我希望明天你不迟到,好好爱自己,早起早睡,明天不迟到。 不...
    那时那些花儿阅读 98评论 0 0