![]() | 1 murmur 2022-01-06 08:42:16 +08:00 这不就是反外挂技术么,肯定得是边玩边追踪的,大概就是给开发人员一个更宽松的条件,让他在上帝模式下打出一个分数,然后以这个分数为基准,超过这个分数离谱的就得人工去核算了 现在还没看到一个完全自动化反外挂的方案 |
![]() | 2 murmur 2022-01-06 08:43:44 +08:00 当然这种方式也比不上玩家的脑洞,原神不就是各种叠 buff 搞伤害竞赛,最高都叠到 700w 了,所以官方干脆锁了伤害上限 |
![]() | 3 stormer 2022-01-06 08:44:50 +08:00 纯前端提交的,你只能用 js 写个校验算法,然后要对 js 进行层层加密,这个只能防菜鸟,高手没用 没其他方式了...所有校验前端提交的方式只能说增加伪造门槛, 不过你可以后端自己伪造分数, 让自己人排 1/2/3 名,哈哈哈 |
![]() | 4 mineralsalt 2022-01-06 08:46:21 +08:00 ![]() 先考虑这个游戏有没有人玩吧 |
![]() | 6 jsdi OP @mineralsalt 哈哈哈应该还是有人玩的 |
![]() | 8 tomczhen 2022-01-06 08:53:41 +08:00 via Android 领奖条件加一条:要求获奖用户直播打一次,得分至少要到获奖分数的 75%。 :doge: |
![]() | 9 Rheinmetal 2022-01-06 09:10:50 +08:00 ![]() 上传操作和随机种子 看看人能否 fuxian 排行榜延迟显示 人工审核 |
10 boringcc 2022-01-06 09:19:21 +08:00 要求游玩的人一边录屏摄手打 |
![]() | 11 oppoic 2022-01-06 09:24:13 +08:00 微信授权登录之后才可以玩,刷榜的碰到这种的基本就折腾了 |
12 loading 2022-01-06 09:43:52 +08:00 ![]() 微信绑定登陆,必须点一个广告再说。 |
![]() | 13 Celebi 2022-01-06 09:59:50 +08:00 交 5 元查看排行 |
![]() | 14 wu67 2022-01-06 10:19:11 +08:00 没必要. 这种通常情况下是把游戏难度搞难一点, 然后开发的时候页面仔直接就能给你玩出极限分数了. 超出这个的基本上都难, 要么开挂, 要么是赌脸那种寿命玩法. 榜爱怎么排就怎么排, 反正统计是需要服务器资源和时间的, 你觉得不对, 那就按前面测出的极限分数, 让后台把超过这个分数太多的给 ban 了... by 一个曾经切过几个活动页面游戏的前端仔. |
![]() | 15 yancy0l 2022-01-06 10:20:01 +08:00 既然是导师的实现方案,那可能不是商业化的东西,只是产品功能需要。看了描述应该是担心 通信报文有明文数据被修改,那用加密算法挺合适的,非对称加密,完美解决问题,而且也不是特别麻烦,一般网上有 Demo 。 这样实现,更合理一些,别为了解决安全问题,去绕弯子。 |
16 leafre 2022-01-06 10:23:16 +08:00 除非把逻辑放在服务端实现,否则只能增加破解难度 |
17 jackzhengjbs 2022-01-06 10:32:58 +08:00 via Android 啥游戏啊?我的八门神器已经饥渴难耐了 |
![]() | 18 Mutoo 2022-01-06 10:38:36 +08:00 游戏可以实现录制功能,将客户端版本、玩家每帧操作和随机数种子记录下来,高分玩家分数与记录一并提交,后端可以用一个 headless 模拟器快速重放游戏过程,看看分数是否一致即可。 |
![]() | 19 libook 2022-01-06 10:47:09 +08:00 referer 没用,可以伪造。 计分机制、加密秘钥、加密算法都放到 wasm 里,有了最终分数后用对称加密发送到服务端,服务端解密记录排序返回排行榜。 为了避免重放请求攻击,需要在加密的时候加个时间戳,这样即便分数相同加密后的密文也会不一样,服务端解密后判断时间戳是不是在过去一定时间范围内。 以上这么处理之后,再想刷榜就只能逆向 wasm 代码,或者从游戏玩法上面做一些外挂。 |
![]() | 20 jsdi OP 说得很好,下次别说了[:doge] |
![]() | 21 maplerecall 2022-01-06 11:09:54 +08:00 via Android 没用的,referer 一样可以十分简单的伪造。除非游戏主要逻辑在服务端,基本没有什么好方法能够限制客户端作弊行为,无论 web 还是原生客户端。 |
![]() | 22 ch2 2022-01-06 12:11:15 +08:00 无法避免 |
23 mxT52CRuqR6o5 2022-01-06 12:18:14 +08:00 倒是确实直接把逻辑扔 wasm 里相比在 js 层搞各种东西破解难度要大得多 |
![]() | 25 Privileges 2022-01-06 15:14:23 +08:00 Referer 伪造成本太低了。。。 |
![]() | 26 itechify PRO 把菜鸟用户拦截就行了,前端代码混淆,前端上传分数接口数据非对称加密 |
27 final7genesis 2022-01-06 17:03:14 +08:00 @libook 感觉这个方案最靠谱些 |
![]() | 28 chashao 2022-01-06 19:00:35 +08:00 实时上传玩家操作,在服务端进行玩法逻辑计算以及计算分数 |
29 t6attack 2022-01-06 19:05:22 +08:00 终极解决方法只有一个:服务端运算。 |
30 t6attack 2022-01-06 19:34:34 +08:00 打个形象的比方:打完游戏,分数由客户机一次提交,这就好比考完试,让学生自己判卷,然后把分数报上来。也不检查卷纸。那么这个分数排行榜?只能用作参考。不能认真。 省时点的逻辑,就是优化排行榜:加个简单判断,把排行榜里离谱的分数过滤掉。再把短时间取得不可能分数的过滤掉。这样,排行榜看起来就能正常一点。 为什么 PC 上外挂很多,游戏机上相对较少?因为 PC 是全功能生产工具,傻瓜式的内存修改器就 N 多种。 不管你提交过程怎么加密,怎么防伪造。这个游戏分数是一定存在某段内存里的。我用 CE 修改器定位到分数的内存地址,做一次乘方。然后游戏结束,这个离谱的分数,经过你那复杂的加密逻辑,顺利的通过服务端,登上排行榜。你辛苦编写的加密逻辑,全都变成了无用功。 你的程序运行在我的地盘,我对它有上帝视角。你让我自己判卷,我想判多少分就判多少分。就是这么个逻辑。 |
31 bellx 2022-01-06 20:25:32 +08:00 via iPhone 楼上也说到了,最终解就是服务端计算,前端做加密只是破解难易的区别而已 |
![]() | 32 jsdi OP @oneisall8955 非对称加密有用吗?公钥放在客户端,用户通过翻 js 文件就可以看到加密逻辑,然后他也可以把加完密的离谱分数提交到后端,后端是没法判断的 |
34 lawler 2022-01-07 08:07:23 +08:00 就冲 ”后来导师让我用 referer 请求头实现“ 这句话。 游戏内容都用不着抓包这么嗦的手法。 请问真的可以使用 referer 实现吗? 答:可以,但只能避免试图刷榜中的很小一部分。 有没有其他实现方式呢? 答:很多并不能完全阻断这种行为。所以归纳下来无非是三种方向,加密(数据、协议等方式方法尽量复杂)、记录(操作日志、录像录屏、实时数据流等尽可能详尽可追溯)和加密结合记录。 |