什么是游戏漏洞
游戏漏洞主要是设计后台不严谨所导致的!
最常见的游戏漏洞是玩家领取游戏礼包时候因为网络问题多次点击”领取”按钮,造成多个封包发送给服务器,{“玩家ID”:”1”,要领取礼包ID}(这边只是举例,封包的内容依每款游戏的不同而不同具体看协议设计者如何编辑,以后下不再累述)
服务器后台如果没判断改玩家领取的次数只在flash&Silverlight&html 把按钮灰掉之类的处理,那么必将有懂行的不懂行的 刻意多次发送封包来达到刷道具的目的,
如果灰掉就不能继续刷了么? 答案当然是否定的,这里还要重复介绍这款烂大街的封包工具Winsock Packet Editor 俗称WPE,把封包截获下来 重复不停的问服务器”讨”礼包就是了
介绍WPE的帖子文章太多了.我就不重复了
这种情况大部分页游公司也是严格把关,这种简单的刷道具我们能想到,游戏公司的程序员当然也能,第二种情况就比较少见了!
笔者玩过一些战争策略游戏最常见就是一对军团攻打某某玩家,一般游戏都对对加速攻击这种策略有冷却,如果没有冷却..1秒内发送多次急行军命令给服务器,会造成什么.第一次急行军已经打到,因为间隔太短服务器没有修改,第二次急行军的命令又来了…就会造成该玩家被1个军团多次攻击.,,
以上案例分析只要超出后台程序员的理想范围就会出现未知状况,造成这种情况也是后台设计的不严谨这条攻击ID 是否已经攻击到没有判断.如果判断攻击ID 是否已经造成了玩家伤亡,就解决这个BUG了
没有做不到只有想不到,当年号称最完美的平台XP刚发布就爆出N多个漏洞,这么多过去了还没补完,业界一句”修复已知BUG”后面有个潜意思”添加未知BUG”
言归正传,接下来说改包漏洞很多游戏都会若干天不上线后产生补偿礼包.每个礼包都是一个ID,一个号不上N天之后就会给你N个ID的补偿礼包,封包就是{我要领取补偿礼包ID:XXX};那么我啊这段封包改掉ID从1~1W 不断的尝试,呢如果服务器没绑定包是某个ID的只是领就可以了这种漏洞 只要拿WPE不断的改ID就能不断的拿礼包把别人不上N天的礼包全部拿光,一个区死号不少吧…..又能欢快的刷道具了.
这个例子是修改封包的参数欺骗服务器达到目的的,案例介绍完毕,所有的刷道具或怎样都是产生于服务器自身的问题,如果你技术牛破解服务器远程入侵,直接窃取数据库那就另算,这些涉及服务器的攻击与入侵
本地游戏内存修改
天朝也算外挂横行内存随便改的国都,内存的修改是游戏的重中之重,天朝游戏后台服务器对玩家本地内存的数据是非常非常的不信任,只有棒子的游戏才会把什么重要的数据都随意放在玩家那,不是保护在服务器内,打怪的时候又不验证,谁都能都能拿易语言问个内存基址随便修改游戏攻击倍数打死怪后提交给服务器{某某怪死亡}{服务器说很好这个是它爆的XXX东西},比杏兼桃犹百倍,想要几倍就几倍
以上吐槽是端游不再本文范围内,很多页游也内置了很多小游戏笔者玩过的一款游戏就有很多小游戏,前段时间比较流行打鱼很多页游都内置了,服务器只管放鱼出来 不管中间怎么打的最后玩家通过封包提交打了多少分,,那么…漏洞又来了..利用最流行的cheat engine工具简称CE不管你中间打没打 打了多少分直接把内存里的分数该理论满值OK提交上去服务器傻傻的根据满值给你最高经验值或者奖励啥的……如果你提交个几百服务器都不出问题,按分数给经验值或者别的..那么我只能说自己发挥吧只要这种超常数据不被官方程序员截获来封杀你就想多少就多少
很多东西只要后台服务器不管控就有空子钻,如果页游也把玩家的本地的某个属性当作参考来打怪来计算扣血量,那页游也能想吐槽的 比杏兼桃犹百倍,想要几倍就几倍了 ,页游这种事情比较少,笔者玩的游戏少不清楚有没有这么奇葩的页游,大部分页游参考值当然是服务器上的又安全又不容易出问题.
封包数据的解析
一下直接介绍笔者抓到的数据包和解析的方法内容详解
发送:00 00 00 16 00 0A 0B 01 0D 75 73 65 72 49 64 04 49 07 63 6D 64 04 82 A1 09 01
返回: 00 00 00 AD 00 0A 73 01 07 63 6D 64 0D 75 73 65 72 49 64 0F 65 72 72 43 6F 64 65 0B 76 61 6C 75 65 15 67 65 74 46 72 65 65 4E 75 6D 09 67 6F 64 73 15 70 75 74 46 72 65 65 4E 75 6D 04 82 A1 09 04 49 04 00 04 00 04 00 09 07 01 09 01 11 75 73 65 72 4E 61 6D 65 06 19 E5 A4 8F E4 B8 B6 E9 9B AA E5 AE 9C 0B 67 6F 64 49 64 04 82 DB F3 7B 15 65 78 70 69 72 65 44 74 74 6D 05 41 D5 14 0C 54 40 00 00 02 05 40 52 40 00 00 00 00 00 01 09 01 0E 06 10 12 04 82 DB F3 7E 14 05 41 D5 14 0C 54 80 00 00 02 05 40 52 40 00 00 00 00 00 01 01 04 00
这两段是什么意思?没研究过当然一抹黑.拿反编译逆向flash 找到数据包解法和加密就能知
道用什么方式解包(烂大街的逆向工程” Sothink_SWF_硕思闪客Flash反编译工具”)
以上是逆向的协议算法
按照某款游戏的规则 前4位是数据包的长度也就是(标记1)
(标记2)是长度与数据包的隔开
最后是数据包长度-1
数据包是AMF格式加密
发送:{"userId":73,"cmd":37001}
返回: {"cmd":37001,"userId":73,"errCode":0,"value":0,"getFreeNum":0,"gods":[{"userName":"玩家名","godId":11400059,"expireDttm":1414541649,"userId":73},{"userName":"玩家名","godId":11400062,"expireDttm":1414541650,"userId":73},null],"putFreeNum":0}
发送给服务器命令是37001 查询参数是”userId(用户ID)” 73....的玩家
返回73号ID玩家信息 JSON格式的
游戏的数据包往往都是英文与数字,好处就是数据包小,这些代号都是”字典”的,这种”字典” 就是游戏的配置文件,里面包含了游戏所有配置,大到顶级装备的属性介绍,小到NPC自言自语的喊话内容