H5 游戏,外部如何修改游戏值提交的?

94 天前
 zero3412
发现有很多刷票的人。
let gameScore = 0;
游戏改变游戏得分 gameScore
ajax(postUrl, {score : gameScore }, true).then( res => {
console.log(res)
}).catch( (error) => {
console.log(error)
}).finally(() => {});

后端增加了 HTTP_REFERER 与 HTTP_ORIGIN 检测、双 cookies 检测、提交时间检测。

感觉是使用了啥模拟器,抓包改游戏数据提交的,所以其它检测都没啥用。
2900 次点击
所在节点    程序员
28 条回复
laommmm
94 天前
都做游戏引那么大的包了,都舍不得引 200K 的加密包?
zero3412
94 天前
@laommmm 使用将用户 token➕时间戳进行 RSA 后提交
Marthemis
94 天前
普通的。浏览器打开 f12 ,找到提交分数的接口,找到在哪个方法调用的,将 score 这个参数固定传一个 9999999 。
zephyru
94 天前
@zero3412 这种写在前端的话,对着源码 debug ,找到加密前提交前即将执行的函数,加个断点,自己想提交什么提交什么区别应该不大
zero3412
94 天前
@zephyru 哪里有教程么?学习一下,另外有什么解法?
zero3412
94 天前
@Marthemis 微信浏览器环境,但我感觉与普通浏览器区别不大。
renmu
94 天前
对用户每一步操作发送信息到接口,最后计算操作是否与分数一致
hezhou920
94 天前
我感觉根本上前端无法解决掉这个问题,只能增加篡改难度。根本上解决还是得将计算逻辑放到后端。
zero3412
94 天前
@renmu 就是 H5 的小程序,得分全靠前端获得的 -_!!
zero3412
94 天前
@hezhou920 所以我感觉使用了模拟器啥的,只修改了游戏得分,其它能验证的数据都是正常的。
LuckyLauncher
94 天前
能说一下是什么类型的游戏么,感觉只能加风控提高破解成本或者将得分放到后端计算
zero3412
94 天前
@LuckyLauncher 可以理解为纯前端得分的 html5 游戏,类似 120 秒倒计时填词,余多少秒即为得分值,
但后台都是 119 秒就完成的 -_!!
imdong
94 天前
贵司这代码好眼熟…端午女朋友公司的 H5 活动,抓了一下代码,连变量名都一样,看着就是一个通用模板然后改一下素材就上线的。

提交接口分数有加密,加密的方法是一个看起来随机的函数名,但所有的代码都没有搜索到相关内容,但好巧不巧不巧看到一段所谓“最强”加密后的代码,好巧不巧不巧鄙人擅长此加密的脱密,好巧不巧又是这个加密里面最容易还原的,两分钟就取出函数内容,好了,现在,先调用函数算出一个分数的密文,然后复制一个请求到 curl 命令,替换加密分数,回车,搞定。‘前后总耗时 30 分钟’

端午前一天,女朋友拎着活动奖品回家了(特意刷的二等奖,因为一等奖不需要)
LuckyLauncher
94 天前
@zero3412 #12 首先从风控角度不可能 1 秒就完成游戏的,这些账户设备可以都 ban 了,其次,可以记录开始时间,每填一个词都记录下时间,时间过于离谱的也按作弊处理
zero3412
94 天前
@imdong 哈哈哈,这边代码中没有这个“最强”加密函数,也没有为得分进行加密,能分享下这个最强加密么,至少给你造成了 30 分钟的难度。
hwf
94 天前
每道题记录一下答题填写的时间, 不合理的就按作弊处理
vace
94 天前
直接提交分数这种,仅在前端无法避免,加密也无法避免,只能不断提高门槛,踢掉一些脚本小子。

简单的互动可以服务端验算,把用户的操作 log 下来,在服务端推导分数验证,但开发成本比较高了。
imdong
94 天前
关于这个加密可以在我资料页进我博客搜索加密,最牛相关关键词找一下,应该会有 3 篇文章讲解,具体细节我也忘记了。

至于怎么反破解,如果只是小游戏,短期的东西,我给你一个实现简单效果好的方案:

首先游戏道具生成之类的不要真随机,要通过下发随机数种子,然后要有带时间的得分纪录,客户端不要只提交分数,把种子和得分纪录都提交。

服务器拿到数据,要确认种子是自己下发的,且只能用一次。然后分数保存到数据库就好了。

什么?你问我得分 log 呢?丢掉,直接丢掉。没用的东西,只是障眼法。

你要在客户端就体现出:我做了很多防御,这个东西搭眼一看就知道是一时半会搞不定的东西,还是别浪费时间了。放弃放弃。
@zero3412 #15
zephyru
94 天前
@zero3412 分数计算上报只要在前端做,就总会被绕过去/破解,无非是成本问题,真的想解决,只能把操作传给后端,让后端去算,(不知道把这个逻辑丢到 worker 里去会不会更安全些?没试过)
Nitsuya
94 天前
这种直接改 js 逻辑,排除掉错误,加大得分触发率,然后正常的玩儿游戏,最后提交老高的分数....曾经无数个 V 号,试探服务器 ban 上限....这种很难搞,因为根本不从报文入手.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1054485

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX