1
Bryan0Z 2016-01-07 13:14:10 +08:00 via Android
把接口藏好点,发现异常直接封?
刚刚想了半天没想到好方法 |
2
des 2016-01-07 13:20:36 +08:00
记录用户操作和点击, 后台分析. 顺带加个密,虽然没什么用
|
3
ferock 2016-01-07 13:36:35 +08:00 1
为什么运算逻辑是在客户端的?这个结你解不开,永远没辙
就算不是 h5 的那些传统游戏,逻辑也不会放在客户端。 |
4
nigelvon 2016-01-07 13:40:11 +08:00
每到一个阶段提交的时候会有个额外的数据,后台做验证,如果他没玩到对应的分数是没法知道这个额外的数据的。
思路这样,然后可以增加复杂度,比如这个额外数据是服务器下发的 key 做的特定算法 hash 。 |
5
falcon05 OP |
6
ferock 2016-01-07 14:58:21 +08:00
@falcon05 这个产品是谁设计的?如果改成服务器计数,那就是 DDOS 攻击服务器,客户端计数就是扯淡。
所以,这个思路。。。。 udp 包丢给服务端,让服务端处理,也可以。但是服务器要足够强劲,或者均衡要做好。反正这不是一个简单的事 |
7
yeyeye 2016-01-07 15:09:14 +08:00
行为判定吧 以前玩游戏 发现唯独是行为判定是很难躲过的
|
8
wate 2016-01-07 15:11:07 +08:00
永远不相信客户端的数据
|
9
Cloudee 2016-01-07 15:25:48 +08:00 1
每次点击的时间戳和位置坐标记录下来,发总成绩的时候打包一起发给服务器。
然后每多少次点击发给服务器一次请求。服务器汇总上面的数据判断有没有作弊 配合严格的封号体系,以及封号绝对不说明理由 应该可以撑一段时间不被破解……吧 |
11
sunjourney 2016-01-07 15:37:05 +08:00 2
记录用户操作吧,拿 2048 举例,网页前后和服务器后台采用一样的随机数生成器与业务逻辑,用户玩的时候后台发个 seed ,前台用这个 seed 迭代或自增产成随机块,记录用户的操作,提交的时候把 seed 和用户操作一起发送给服务器,服务器模拟游戏获得成绩。能 fake scores 但不能 fake operations 。
|
12
falcon05 OP @sunjourney 谢谢,深受启发
|
13
maomaomao001 2016-01-07 16:25:10 +08:00 via Android
@sunjourney 这样也太能增加服务器的负担了~~~
我觉得吧,应该提高人员素质,要么就做成,网站注册需要钱(10~100)内,然后,只要发现有一个游戏作弊,就永久封号~~~ 这样应该可以更好的管理了,你永远都不可能 阻止一些人作弊,~~所以这种方式,我觉得这样可以很大程度上减少他们作弊行为... |
14
sunjourney 2016-01-07 16:30:36 +08:00
@maomaomao001 看游戏多复杂,计算是否影响性能了,毕竟后台不需要界面只要跑一遍逻辑,像 2048 ,俄罗斯方块,哪怕水果忍者这种,还是容易实现的。
|
15
Slienc7 2016-01-07 17:05:37 +08:00
复杂化分数提交接口;
然后丑化页面 JS 文件(参考谷歌首页,让人没有分析的兴趣)。 |
16
paradoxs 2016-01-07 17:07:04 +08:00
关键位置插入加密随机数做捆绑检验
|
17
murusu 2016-01-07 17:22:06 +08:00
逻辑在客户端的话基本无解
补救的措施只能是记录操作,后台对高分榜的用户进行延后重演,对不上的再处理 |
18
go2sleep 2016-01-07 17:29:07 +08:00
一个想法,
1. 可以把客户的操作记录发回服务器; 2. 在服务器端,使用 Phantom.js 之类的东西,把你的 Html5 游戏运行一遍,把客户端传来的操作记录作为输入 3. 查看运行完成的结果是否和客户端的一致。 这样做的好处是,服务器端验证方便,直接可以使用客户端的 html5 代码 PS. 如果你是用了 WebGL 的,可能 Phantom.js 不支持。 |
19
go2sleep 2016-01-07 17:29:51 +08:00
不过“按键精灵”类的作弊应该不好避免……
|
20
bdnet 2016-01-07 19:19:07 +08:00
状态机? 必须按特定的组合完成游戏
|
21
klausgao 2016-01-07 22:06:51 +08:00 via iPhone
如果是微信内做的 h5 游戏,开始之前要 oauth 登录,就能限制必须在微信内运行,也就不好破解了
|
22
temberature 2016-01-07 22:52:31 +08:00
严格意义上,除非你的游戏是图灵测试的一种才能杜绝。
|
23
m939594960 2016-01-07 23:03:37 +08:00
我感觉完全可以看看 pc 端的游戏怎么做检测
心跳包每个心跳包返回 key 每次发包的时候根据 key 生成加密(每个包一定要设置 过期时间 而且尽量保持快点 这让做挂的人调试起来特别麻烦) js crc (不知道现实不) 静态 CRC + 每次请求 JS 不同加载不同动态 CRC 点与关键数据检测 (游戏任务 /打斗 点记录 每( 10/20 )个封包时候悄悄地发送一下最近经过点(不发游戏 也不会出现任何故障 但是最后成绩提交不上 或者第二天封号)) 如果 真正想做这个反检测的话 可以看看现在世面上主流的检测比较强的游戏 的检测方法 例如地下城 天天酷跑 你会找到很多灵感的 以上都是我瞎说的。。 我也只是想想 |
24
m939594960 2016-01-07 23:10:52 +08:00 1
我仔细看了下 好像只是那种小游戏 最后要提交积分那种 上面说的话就当没看见吧
又去看了看 43399 的小游戏 造梦西游 http://www.4399.com/flash/78072.htm 也是采用的 post 提交最后的积分 verify:3094ce8651f4f54a6d7319f39885e4ff session:-1 title:孙悟空 token: refer:http://s8.4399.com/4399swf/upload_swf/ftp7/hanbao/20120107/6/tylb1970.htm index:0 uid:******* gameid:100015389 data:eNrtWktv2zgQvu2hvyLw..... 他发送的数据包大概是这样的 你可以看看他是如何加密的。。 其实要完全杜绝是不可能的 像现在的端游 私下 都流通着很多脱机外挂 只能增加分析难度 降低他们外挂的利润 有能力的人不屑于搞你游戏 没能力的人搞不懂就好了 |
25
pepsin 2016-01-07 23:29:12 +08:00
提交的数据必须是个加密过的字符串, 最好通过 https 传, JS 全局做 minify. 拼字符串的时候分数通过位操作去做.
不能说完全防住, 但是防个大多数稍懂的人也是够了. |
26
pubby 2016-01-07 23:55:23 +08:00
@m939594960 嗯,只能通过各种方法增加作弊难度。有利可图,破解是迟早的事情,需要续斗争。
几年前破解过一种 flash 加密,每次 swf 文件的加密部分算法和参数都在变 最后写了个简单的 AS3 ByteCode 模拟器专门跑那部分代码 |