羊了个羊只要发请求就可以通关,如何在设计层面避免这种情况

2022-09-23 09:48:14 +08:00
 FstarKing

羊了个羊之前只要抓包拿到 token ,然后向他的服务器发一个 get 请求,就算通关了

所以好多人刷了 99999+次

如何在设计层面去防止这样的情况

7971 次点击
所在节点    问与答
65 条回复
Xyg12133617
2022-09-23 09:55:03 +08:00
你该不会是作者吧[手动狗头]
tool2d
2022-09-23 09:58:58 +08:00
学 COC 服务器,把玩家通关操作的所有手机点击指令都记录下来,通关后只把操作发给服务器。然后服务器根据玩家操作,独立演算一次,算二次验证。

如果卡片完全消除,就算通关。

不过也没啥用,到最后还是有人会用 AI 来玩游戏刷分。
Mithril
2022-09-23 09:59:43 +08:00
那又怎样呢?无所谓啊。

你要搞清楚自己的目标是什么。

做这个就是为了卖广告的,会发请求的人,就算不让他们发了,他们会不停刷关看广告吗?

既然不会,那为什么要花成本去管?要说影响其他用户积极性,后台隔段时间清一下数据不就完了。

工程这个事吧,就是够用的情况下,成本越低越好。手段都是为了目的服务的。
GeruzoniAnsasu
2022-09-23 09:59:44 +08:00
不知道从哪说起好,要不你先百度百度帧同步吧



还有一个更前提的问题是,你的设计目标图的是什么?有人能发请求跳通关,是会影响付费率?
registerrr
2022-09-23 10:00:38 +08:00
后台存储每一场游戏的地图数据,前端每操作一步或几步都去和后台进行同步,在后台验证是否通关。
你可能会问,这服务器压力不就大了么?对,这就是代价
ICB
2022-09-23 10:00:38 +08:00
现在还能刷吗?之前刷的都清零了。
letitbesqzr
2022-09-23 10:01:25 +08:00
如果是微信小程序,最简单的改造:用云函数 来发送通关请求

云函数 经过微信的 mmtls 协议传输。

mmtls : 微信现有的安全通信协议是基于用户登录的时候派发的 SessionKey 对应用数据进行加密的

只能说门槛会更高,现在的 微信协议、各种 hook 已经能够支持 模拟请求云函数了。
letitbesqzr
2022-09-23 10:04:41 +08:00
或使用,小程序提供的接口:“小程序加密网络通道” 也能提高伪造的门槛,需要去解密微信的加密 或者 hook 微信的程序。

为了避免小程序与开发者后台通信时数据被截取和篡改,微信侧维护了一个用户维度的可靠 key ,用于小程序和后台通信时进行加密和签名。
开发者可以分别通过小程序前端和微信后台提供的接口,获取用户的加密 key 。
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/user-encryptkey.html
FstarKing
2022-09-23 10:10:26 +08:00
@ICB 实测那个接口可以正常 200 返回,但是已经不算通关次数了
FstarKing
2022-09-23 10:10:37 +08:00
@letitbesqzr 这个看起来不错
InDom
2022-09-23 10:10:55 +08:00
赞同 #3 楼说法,不过也补充一个最简单做法:

一局游戏不可能在 5 分钟内通关。

开局一个请求,记录游戏开始时间,结束一个请求,记录结束时间,

通过这种方案降低刷分频率,然后搞一搞防沉迷,一天不能玩太多次,或者通过其他的游戏设计让作弊无法被其他普通玩家识别。

比如:每天只能通关一次,后面再通关只更新用时。

这样,作弊也只能:大家都是 一天一次,用了 5 分钟。
FstarKing
2022-09-23 10:11:10 +08:00
@tool2d
@registerrr
我也这样考虑过,这个是个很好的办法,但是就是代价有点大
FstarKing
2022-09-23 10:11:38 +08:00
@Mithril 只是单纯的想从技术角度考虑一下,如何解决这个问题
villivateur
2022-09-23 10:14:58 +08:00
我觉得单纯加 https ,然后客户端拒绝信任用户自定义证书就行了
registerrr
2022-09-23 10:20:08 +08:00
@InDom #11 你搞了防沉迷,还怎么让用户看广告赚钱😏
watzds
2022-09-23 10:23:01 +08:00
看到旁边有人通过了,玩得更起劲了
registerrr
2022-09-23 10:23:19 +08:00
@registerrr #15 听说赚了两套 200 平的大平层,这防沉迷一开,怕是连个 80 平的小户型也买不到了
Mithril
2022-09-23 10:24:30 +08:00
@FstarKing 我这个就是从技术角度考虑的啊。
在这个场景下,从技术角度考虑,这根本不是需要解决的问题。

另外反作弊和反破解,网站的安全防护等等是一样的,都是成本问题,而不是单纯的技术问题。
你要反作弊,防护等级越高,本质上就是要把越多的计算移到服务端来做。但你就算只扔个瘦客户端给客户,也防不住输入模拟+图像识别。除非强制开启摄像头。

最简单的,每局游戏保存生成地图的随机数种子。然后用它作为请求参数后台验证。这个可以防止你直接构造请求,用微信的加密更好一些。
同时也可以用它在后台做个模拟器,让用户发过来每步的点击操作,直接重放判断是否通关。这个性能消耗也不算太高。

但要我是开发肯定哪个都不做,就定期登上去清理一下看不顺眼的数据。反正热度过去了服务器都不用续费的东西,还不如想想这么多钱要干嘛。现在这个状态,多写一行代码就算我输。
oldshensheep
2022-09-23 10:29:06 +08:00
2 楼 5 楼的方法是正解,游戏防作弊,主要要求就是记录玩家操作,然后服务器端运算验证。
但是我看了一下游戏说明好像是 3 消类游戏?那用算法解就很快了。那就只能检测客户端输入的有效性,基本上无解
xmumiffy
2022-09-23 10:34:32 +08:00
@oldshensheep 没事 这游戏大部分实例都是无解的,就算拿算法也只能快速地刷到确认无解

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

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

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

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

© 2021 V2EX