羊了个羊之前只要抓包拿到 token ,然后向他的服务器发一个 get 请求,就算通关了
所以好多人刷了 99999+次
如何在设计层面去防止这样的情况
1
Xyg12133617 2022-09-23 09:55:03 +08:00 17
你该不会是作者吧[手动狗头]
|
2
tool2d 2022-09-23 09:58:58 +08:00 2
学 COC 服务器,把玩家通关操作的所有手机点击指令都记录下来,通关后只把操作发给服务器。然后服务器根据玩家操作,独立演算一次,算二次验证。
如果卡片完全消除,就算通关。 不过也没啥用,到最后还是有人会用 AI 来玩游戏刷分。 |
3
Mithril 2022-09-23 09:59:43 +08:00 38
那又怎样呢?无所谓啊。
你要搞清楚自己的目标是什么。 做这个就是为了卖广告的,会发请求的人,就算不让他们发了,他们会不停刷关看广告吗? 既然不会,那为什么要花成本去管?要说影响其他用户积极性,后台隔段时间清一下数据不就完了。 工程这个事吧,就是够用的情况下,成本越低越好。手段都是为了目的服务的。 |
4
GeruzoniAnsasu 2022-09-23 09:59:44 +08:00
不知道从哪说起好,要不你先百度百度帧同步吧
还有一个更前提的问题是,你的设计目标图的是什么?有人能发请求跳通关,是会影响付费率? |
5
registerrr 2022-09-23 10:00:38 +08:00
后台存储每一场游戏的地图数据,前端每操作一步或几步都去和后台进行同步,在后台验证是否通关。
你可能会问,这服务器压力不就大了么?对,这就是代价 |
6
ICB 2022-09-23 10:00:38 +08:00
现在还能刷吗?之前刷的都清零了。
|
7
letitbesqzr 2022-09-23 10:01:25 +08:00
如果是微信小程序,最简单的改造:用云函数 来发送通关请求
云函数 经过微信的 mmtls 协议传输。 mmtls : 微信现有的安全通信协议是基于用户登录的时候派发的 SessionKey 对应用数据进行加密的 只能说门槛会更高,现在的 微信协议、各种 hook 已经能够支持 模拟请求云函数了。 |
8
letitbesqzr 2022-09-23 10:04:41 +08:00 2
或使用,小程序提供的接口:“小程序加密网络通道” 也能提高伪造的门槛,需要去解密微信的加密 或者 hook 微信的程序。
为了避免小程序与开发者后台通信时数据被截取和篡改,微信侧维护了一个用户维度的可靠 key ,用于小程序和后台通信时进行加密和签名。 开发者可以分别通过小程序前端和微信后台提供的接口,获取用户的加密 key 。 https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/user-encryptkey.html |
10
FstarKing OP @letitbesqzr 这个看起来不错
|
11
InDom 2022-09-23 10:10:55 +08:00 2
赞同 #3 楼说法,不过也补充一个最简单做法:
一局游戏不可能在 5 分钟内通关。 开局一个请求,记录游戏开始时间,结束一个请求,记录结束时间, 通过这种方案降低刷分频率,然后搞一搞防沉迷,一天不能玩太多次,或者通过其他的游戏设计让作弊无法被其他普通玩家识别。 比如:每天只能通关一次,后面再通关只更新用时。 这样,作弊也只能:大家都是 一天一次,用了 5 分钟。 |
12
FstarKing OP |
14
villivateur 2022-09-23 10:14:58 +08:00
我觉得单纯加 https ,然后客户端拒绝信任用户自定义证书就行了
|
15
registerrr 2022-09-23 10:20:08 +08:00
@InDom #11 你搞了防沉迷,还怎么让用户看广告赚钱😏
|
16
watzds 2022-09-23 10:23:01 +08:00
看到旁边有人通过了,玩得更起劲了
|
17
registerrr 2022-09-23 10:23:19 +08:00
@registerrr #15 听说赚了两套 200 平的大平层,这防沉迷一开,怕是连个 80 平的小户型也买不到了
|
18
Mithril 2022-09-23 10:24:30 +08:00 1
@FstarKing 我这个就是从技术角度考虑的啊。
在这个场景下,从技术角度考虑,这根本不是需要解决的问题。 另外反作弊和反破解,网站的安全防护等等是一样的,都是成本问题,而不是单纯的技术问题。 你要反作弊,防护等级越高,本质上就是要把越多的计算移到服务端来做。但你就算只扔个瘦客户端给客户,也防不住输入模拟+图像识别。除非强制开启摄像头。 最简单的,每局游戏保存生成地图的随机数种子。然后用它作为请求参数后台验证。这个可以防止你直接构造请求,用微信的加密更好一些。 同时也可以用它在后台做个模拟器,让用户发过来每步的点击操作,直接重放判断是否通关。这个性能消耗也不算太高。 但要我是开发肯定哪个都不做,就定期登上去清理一下看不顺眼的数据。反正热度过去了服务器都不用续费的东西,还不如想想这么多钱要干嘛。现在这个状态,多写一行代码就算我输。 |
19
oldshensheep 2022-09-23 10:29:06 +08:00
2 楼 5 楼的方法是正解,游戏防作弊,主要要求就是记录玩家操作,然后服务器端运算验证。
但是我看了一下游戏说明好像是 3 消类游戏?那用算法解就很快了。那就只能检测客户端输入的有效性,基本上无解 |
20
xmumiffy 2022-09-23 10:34:32 +08:00 via Android
@oldshensheep 没事 这游戏大部分实例都是无解的,就算拿算法也只能快速地刷到确认无解
|
21
qsnow6 2022-09-23 10:34:32 +08:00
没必要!
|
23
qsnow6 2022-09-23 10:35:51 +08:00
但是如果非要加强防护的话,这个场景下,帧重放确实是拦截异常数据比较高的方案。
|
24
GLee9507 2022-09-23 10:37:59 +08:00
@villivateur 这是防抓包吧,root 后直接添加系统证书
|
25
knva 2022-09-23 10:40:21 +08:00
没啥用.
|
26
doomzc 2022-09-23 10:56:01 +08:00
我想问 不是这两天不能刷了么??
|
27
qbuer 2022-09-23 10:58:19 +08:00
我的想法:通关的消除顺序是某个方程的解,服务器带入计算就知道是否完成了游戏。类似挖矿,用户需要耗费脑力求解,服务器只需少量计算即可验证。至于实现方法。。。不知道
|
28
avenger 2022-09-23 11:01:31 +08:00
类似 CSRF 的方案可行吗?
|
29
Jooooooooo 2022-09-23 11:03:56 +08:00
2l 看起来是个解法.
|
30
eycode 2022-09-23 11:04:15 +08:00
源码加密,防止泄露加密方式,请求提交带安全码,可行???
|
31
yyf1234 2022-09-23 11:19:30 +08:00 via iPhone
不使用明文传输,就可以拦住 99%的脚本小子了
|
32
fank99 2022-09-23 11:24:15 +08:00
逆向老哥的眼里,什么加 token 、源码加密都没用
有用的是 提高逆向的成本,杜绝一部分人。不过正如 3L 所说,这个问题是无所谓的 |
33
janus77 2022-09-23 11:30:32 +08:00 1
换成提交的请求呗,结果有通关成功和通关失败。服务端自己拉取分数进行判断是否是通关。
|
34
HugoChao 2022-09-23 11:31:37 +08:00
#3 说的太好了
|
35
marcong95 2022-09-23 11:33:02 +08:00
考虑到这个游戏是为了让人看广告的,那么可以有一种更加粗暴的反作弊、反 AI 的方法:如果这个玩家在本局游戏内看的广告少于一定阈值,就不计成绩😂
如果考虑到运气或者技术因素,那可以把这名玩家所有游戏记录做个平均数 |
36
Reficul 2022-09-23 12:01:25 +08:00
POW ,用户一边玩一边挖矿。 (逃
|
37
des 2022-09-23 12:08:25 +08:00 via iPhone
所以你就是作者?
|
38
cjpjxjx 2022-09-23 12:36:49 +08:00 via iPhone
检测通关时间太快的玩家不出现在好友列表里,仅自己可见,自娱自乐去吧
|
39
zapper 2022-09-23 12:40:04 +08:00
设计成通关不了,就不会有这种烦恼
|
40
darkengine 2022-09-23 12:52:18 +08:00
"这个问题优先级放到最低"
|
41
xuanbg 2022-09-23 13:28:51 +08:00
牌的花色根本就是随机的,不说每种花色的数量不是 3 的整数倍,连牌的总数都不是 3 的整数倍好不好。。。这个不是游戏,玩的是人心,赚的是广告。so……你爱刷就刷呗,有什么打紧?反正也不耽误我赚钱。说不得我赚的更多了呢。。。又何必和自己过不去,和钱过不去呢。
|
42
jifengg 2022-09-23 14:40:08 +08:00
开脑洞:
开局前,请求后台,返回 {"can_pass":true , "pass_token":"xxx"},如果 can_pass=false ,前端生成无法通关的牌,反之生成能通关的(但是玩家不一定能通关)。 通关用 pass_token 提交数据,后台根据这个唯一且一次性的 token ,判断是否作弊。 这样玩游戏变成可有可无的手段,能不能通关完全就是你服务器控制的,所有防作弊手段在服务端判断。 |
43
bk201 2022-09-23 14:51:34 +08:00
参考其他游戏的防作弊措施,只能说很难,只能起一个监控线程去监视。即使是重放判断也不能解决防作弊吧,只要有现成的请求模版就 pass 了。
|
44
zxfeng 2022-09-23 15:13:14 +08:00
@GeruzoniAnsasu 啥就帧同步了啊,真就是听说个名词就到处用。人家问的如何设计或者从技术角度避免玩家对游戏结果作弊。
|
45
muchengxue 2022-09-23 15:28:42 +08:00
@marcong95 666 ,这个好,不看两次广告成绩不作数
|
46
sugars 2022-09-23 15:33:51 +08:00
这是之前的刷法吧,现在没用了
|
47
dtgxx 2022-09-23 15:50:56 +08:00
@Xyg12133617 #1 你太逗了,哈哈哈哈哈
|
48
zjuster 2022-09-23 16:12:59 +08:00
没有必要。在玩这个游戏的人群里,100 个人里面也没有 1 个人有这样的能力来实现,且不放弃其他 99 个人按照预期玩游戏。
技术上的解决方案,不如游玩流程上来屏蔽(减少奖励等方式)。 换句话说就是优先级最低,毕竟赚的不是内购道具通关的钱。 所以 2L 给的是就上的答案,3L 给的就是实际上的解决方案。 学习了。 |
49
mxT52CRuqR6o5 2022-09-23 16:20:01 +08:00
@FstarKing #2 的方案代价也不大啊,就好像你做斗地主游戏得验证玩家的出牌是否合法一样,虽然没法防止 AI 解题(这个属于策略游戏自身性质的问题,是无解的),但至少『只要发请求就可以通关』这种情况可以避免了
|
50
cedoo22 2022-09-23 16:31:40 +08:00
不从工程角度,单从技术角度来说。
打点, 不停打点。。。然后做用户操作路径扫描, 最明显的操作频率、事件先后、时间这几个点一查,直接废弃掉记录。 |
51
hhjswf 2022-09-23 17:13:53 +08:00
有没有办法让人抓不到包,我看有些 app 包很难抓
|
52
zenyangfeng 2022-09-23 17:18:05 +08:00
微信小程序有一个 wx.login 函数,可以获取用户 jscode 。服务器用 jscode 和 appid 、appsecret 换取用户 openid ,jscode 只能使用一次,可以上传数据的时候校验 jscode 判断是不是小程序发送的请求
https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/login.html |
53
zenyangfeng 2022-09-23 17:18:58 +08:00
@hhjswf ios 抓包很简单
|
54
dongtingyue 2022-09-23 17:40:51 +08:00
通一关传后台记录下
加强版:每个操作都传后端验证,通一关的时候检测下操作是否异常。但是这样服务器压力会变大 |
55
brust 2022-09-23 18:45:55 +08:00
@ICB #6
可以我刷了几百次 原理很简单 1.抓包找到 https://cat-match.easygame2021.com/sheep/v1/game/map_info_ex?matchType=3 返回的参数 用抓包工具修改下 把第二关的地图改成和第一关一样 2.然后通关 可以找到这个通关接口 复制这个接口 可以批量刷多次 更新过后好像验证了时间戳 但是没有幂等 |
56
GeruzoniAnsasu 2022-09-23 19:04:54 +08:00
@zxfeng 很难理解吗? 解决方案是把操作运算放到服务端,那是不是还是帧同步 /状态同步?
OP 这个问题本来就问的很空泛,没人知道他想问的是 微信小程序有没有内置方案 还是游戏如何反作弊 还是接口如何鉴权 还是不清楚服务器运算的基础设计 那能怎么办呢,不如先多看看概念让他自己想想有什么方法做到 |
57
20150517 2022-09-23 19:11:16 +08:00
我就想问为啥 SSL 加密的 api 通讯会被破解了?程序被用中间人证书了?
|
58
20150517 2022-09-23 19:12:21 +08:00
@zenyangfeng 如果抓包简单,为什么还有手机 farm 的存在,不就是因为分析不了包,只能靠模拟吗
|
59
ZzFoo 2022-09-23 19:38:47 +08:00
客户端和服务端约定好加密方式和 token ,客户端把 userId + 时间戳 + 一个随机数 加密算出一个 signature ,服务端校验就行了
|
60
0o0O0o0O0o 2022-09-23 19:44:42 +08:00 via iPhone
不需要管,异常数据清空封号,邀请五个人可以解封,用户造假门槛通过微信平台大幅度提高,你不需要操心,榨取开挂者的剩余价值。
|
62
Ashore 2022-09-23 21:18:25 +08:00
微信小程序能实现楼上说的这些操作吗?
|
63
icyalala 2022-09-23 21:53:23 +08:00
|
64
zxfeng 2022-09-25 11:52:25 +08:00
@GeruzoniAnsasu
首先 OP 问的已经很具体了,你对 op 问的 向的服务器发送 get 请求就通关了估计都没去查查是真么回事,如果这个描述还是空泛,那只能说你脑补太多了。 其实,你上来让人去百度帧同,但帧同步解决的问题根本不是 op 想问的游戏结果验证问题,如果你想说服务端重算操作验证 那和同步方案采用帧同步还是状态同步没有关系。 就羊这个游戏,明显类似棋牌这种回合或者低频操作的游戏你推荐帧同步我眼怀疑你根本没有做过帧同步的游戏。 |
65
letitbesqzr 2022-09-26 08:44:49 +08:00 1
|