大神带你用前端打造别样的“微信跳一跳”

微信跳一跳

1.二维码是用外部工具生成的还是微信官方API可以生成,平常看见有些二维码里面还放置了图片

2.二维码中是否是自带了UID,客户端扫描的时候会将这个UID跟服务器对接,然后授权,解析将要展示的页面

把二维码显示出来,最多再加个客户端的判断,跳转。

可以尝试一下再看看代码,这里大概说下流程。

前端 getuuid 请求,服务器返回 uuid

前端用 uuid 生成二维码,与服务器建立多次长链接,服务器在微信扫码,微信确认时返回确认信息。

前端收到登录确认信息后,继续完成登陆。

如果不需要微信登陆的话,看微信扫码访问的页面是否需要用户状态信息,需要的话二维码中就包含上自己的 uid,服务器判断 uid 来分辨用户。

依赖:requests,pycrypto,python3

食用方法:

赶完1 / N 的DDL,更新游戏(version 3/5)的分析。内容和下面的文章的差不多

在微信(灰度)推送新版本的当天晚上,楼主宿舍4人齐齐耍起跳一跳。

耍了一阵室友们都跳过了100分,唯独楼主还在100以下挣扎。

这学期学的一门课程,恰好有一章关于游戏作弊,其中有内存修改器作弊和协议作弊,于是楼主“恶向胆边生”,决定作弊,弄个“大新闻”。

轻车熟路操起抓包工具,抓微信小程序的包,一番折腾之后有下面的发现。

这三个是跳一跳游戏启动时发的包,包的作用在url上已经自解释了。

第一个包的内容,可以看到小程序的id和版本。

保持抓包,去游戏里面跳几下,然后抓到下面这个包:

(...写到这里这里编辑器莫名其妙把我写的一大段整没了)

请求这个API 会上传手机的型号和一个report_list,report list内容不固定,上面那个包含了应该是一次游戏的信息,下面那个包括了scene(好像是分享按钮),观战信息(这个是在2018.1.1截取的,抓包的时候分享了游戏,顺便分析一下观战系统)。

要作弊必须知道成绩是如何上传的,到目前为止只发现了这个跟成绩有关的包。最简单的report list 只有best_score, score, break_record...这几个字段,所以楼主用抓包工具的重发功能,在重发之前拦截请求,把上面字段的值篡改掉,再发送请求。

经过几次尝试,虽然服务器返回了看似正常的值,游戏排行榜始终没有变化。

此处略过无数失败,包括用内存修改器改分数的尝试。

它长这样:

所以目标就在action_data里。

这个action_data比较长,并且应该经过了加密。现在目标又变成了找到加密的算法。凭空找是不存在的,找算法大概有两个途径,在二进制可执行文件里面找;在源代码里面找。

通过搜索引擎找到一些相关资源:

从微信小程序看前端代码安全

微信小程序包解析

照着找到的方法解包,找到了game.js,经过代码压缩和混淆(为了防止逆向,同时也为了压缩小程序的体积),格式化一下展开了两万多行代码。

可以看到确实如资料所说用了Three.js游戏引擎。

现在目标就是找到发请求的地方,搜索一下

找到了。

然后就顺藤摸瓜吧,继续搜索。

最后就找到了加密算法,然后构造数据包发给服务器。

关于action_data,这里展示version3 解密后数据:

game_data 里面包括 action list 和 music list。

在js代码里面的来源:

关于观战系统:

分享观战卡片后会有这样的的请求。

js 内的一点相关代码:

观战的有关数据是通过 WebSocket发送的,楼主猜测action data里面的game_data在观战的时候被发送到观战的客户端。这里需要抓WebSocket的包,楼主没有这个条件没有进行下去。

全文完结。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180113A0J32E00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券