H5游戏作弊与防作弊——我如何拿到第一名的天猫精灵

一次微信公众号游戏的抓包、修改源码(Fillder)

今天走在上班的路上,突然回忆起去年的一件事。那是2019年9月16日的一个晚上,我打开了微信,进入一个微信群,看到一位群友分享了一个页面,说玩游戏可以领话费。于是我遍点进去试玩。游戏的玩法是一个球向上弹,上面落下一些球,你需要通过粘在这里球上作为跳板往上,一个球一分,最后玩了四十多分。(现在那个网站已经关了)

思考(如何不讲武德)

  1. 首先,他肯定是要和服务端进行通信的,最终分数由前端还是后端计算的需要分析接口和代码。

  2. 然后开始抓包,我之前是用的Windows上的Fillder工具,然后代理到手机,获取手机上的请求数据。

  3. 通过玩一次游戏,可以得知只有游戏结束的时候请求了几个接口,其中一个接口是把分数传给了后台,但是参数使用AES加密了,直接修改分值的手段肯定是行不通了。一般安全意识比较弱的,就不会加密参数,就是通过一些cookie、token之类的判断,这种轻而易举就破解了。

  4. 思路转换一下,既然我破解不了他的加密,那我能不能在他加密前把最终的分数修改掉呢?

加密前修改分值

他的操作逻辑就是拿到多个参数,然后使用秘钥通过AES进行加密,后台鉴权。如果我们在加密前进行修改,我们就可以直接绕过复杂的解密步骤(基本上没希望)。

进行如下操作步骤:通过接口名找相关的逻辑,层层寻找,靠自己了。即使压缩了,也是有机会找到的。最终我是找到这句n.score = e。然后查看他的文件名,然后通过fillder代理找到想要修改的JS名,然后用fillder的response处理语法,例如替换n.score = en.score = 60,那么到时候浏览器上执行的就是我这句话了。

防御方法

  1. 然后在地铁上突然想起script标签有个属性integrity,他能否解决呢?然后又多思考了一段时间,也没用呀。因为这个东西是加在HTML上的,我能修改js,那我也能修改html文件删了他

    提供hash值,来验证浏览器获得的资源(例如从 CDN 获得的)是否被篡改。

  2. 后台计算分数,那就需要不停的请求接口记录用户的操作,感觉也不是很合理。而且我也能通过修改JS,更频繁的提交接口多加一些分数吧。

  3. 这是微信跳一跳的抓包,他每次接口都不一样,估计做了非常多鉴权和校验吧。H5游戏作弊与防作弊——我如何拿到第一名的天猫精灵_第1张图片

你可能感兴趣的:(黑客,fillder,抓包)