0

    抓包爆破“跳一跳”小程序 一秒上分

    2023.05.26 | admin | 145次围观

    二零一八 扬帆远航

    在微信灰度推送新版本的当天晚上到现在,小程序“跳一跳”热度很高微信小程序url传值,网上甚至出现了“代上分”的商家。可惜无奈手残,我就能跳到一二百。

    2017年一直混迹知乎,恰好有一章关于游戏作弊,其中有内存修改器作弊和协议作弊,当时就收藏起来了。于是忽,翻出收藏,准备了两天的工具和测试,“恶向胆边生”,决定拆解微信第一个游戏小程序——“跳一跳”。

    打开抓包工具,抓微信小程序的包,一番折腾之后有下面的发现。

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

    第一个包的内容,可以看到小程序的id和版本,这个截图的截取时间是2018.1.4,版本已更新到5。

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

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

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

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

    (此处略过无数失败……)

    后来继续抓包,发现破纪录的游戏结束后会有向wxagame/wxagame_settlement的请求,随后的wxagame/wxagame_getfriendsscore 返回的myuserinfo已经包含更新后的记录。这里确定了新的目标是wxagame_settlement。

    它长这样:

    所以目标就在action_data里。

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

    模拟了一个小时多的环境,终于找出算法,开始解包。找到了game.js,经过代码压缩和混淆,为了防止逆向,同时也为了压缩小程序的体积,格式化一下展开了两万多行代码。

    可以看到“跳一跳”用的是Three.js游戏引擎。

    现在目标就是找到发请求的地方微信小程序url传值,搜索一下。

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

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

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

    game_data 里面包括 action list 和 music list。

    版权声明

    本文仅代表作者观点。
    本文系作者授权发表,未经许可,不得转载。

    发表评论