996引擎漏洞
2018年夏天,引擎漏洞一个ID叫“过河卒”的引擎漏洞玩家,在某个复古版本里,引擎漏洞用一把木剑捅穿了沙巴克城墙。引擎漏洞系统提示他攻击力为0,引擎漏洞但城门的引擎漏洞血条在掉。这不是引擎漏洞外挂,是引擎漏洞引擎的底层逻辑漏洞——伤害计算在客户端信任了服务端传来的坐标数据,而坐标数据可以被伪装成“玩家周围8格”的引擎漏洞任意值。那晚,引擎漏洞整个服务器的引擎漏洞人看着“过河卒”一个人拆了守城方的全部箭塔,然后大摇大摆走进皇宫,引擎漏洞把沙巴克城主砍翻在地。引擎漏洞事后官方封号,引擎漏洞但漏洞报告在玩家论坛里传疯了。引擎漏洞
996引擎,国内私服圈流传最广的传奇类游戏引擎,它的漏洞不像那些大厂游戏需要什么高深的内存逆向或封包解密。很多bug就摆在明面上,甚至写在文档里。最典型的,是“物品复制”漏洞。引擎的交易逻辑里,当两个玩家同时点击“确认”按钮,服务端会先扣除一方物品,再给另一方添加。但如果你用按键精灵在极短时间内触发两次确认,服务端就会因为线程竞争,同时执行两次“扣除”和两次“添加”——结果就是,物品从A身上消失了,但B获得了双份。这个bug在2019年被广泛利用,当时市面上流通的“屠龙刀”有一半是这么复制出来的。
更隐蔽的是“NPC对话穿透”漏洞。引擎的脚本系统允许NPC在对话中调用“GiveItem”函数,但没做频率限制。有经验的私服GM会写个简单的循环,让NPC每0.1秒给玩家发一次金币——正常玩家手动点对话根本触发不了几次,但如果你用封包工具直接伪造对话请求,就能让NPC变成无限提款机。我认识一个开服的朋友,他服务器里有个玩家靠着这个漏洞,一晚上刷了相当于三个月充值量的元宝。最讽刺的是,那个玩家后来还找他投诉,说“你们服务器有bug,我刷的钱怎么被清零了”——他以为这是官方给的福利。
还有一类漏洞纯粹是逻辑疏忽。“穿墙”和“飞天”在996引擎里几乎是常态。因为引擎的地图碰撞检测只对“玩家角色”生效,对“宠物”和“召唤物”不生效。于是有人召唤一只变异骷髅,让骷髅卡在墙里,然后自己通过“跟随宠物”的指令瞬移进去。更简单的办法是,引擎有个“随机传送”命令,坐标参数写的是“地图内随机”,但如果你把参数改成负数或者超大地图边界,服务端不会报错,而是直接把玩家传送到地图的(0,0)点——那个点在很多地图里恰好是墙外或者虚空。
这些漏洞为什么一直修不干净?因为996引擎的底层代码是十几年前从韩国传奇源码改来的,核心逻辑里充斥着“信任客户端”的老毛病。比如移动速度,服务端只校验“两次移动请求之间的时间间隔是否大于100毫秒”,但如果你用加速器把请求间隔改成50毫秒,服务端会直接接受——它不校验实际移动距离,只校验请求频率。这意味着,哪怕你在客户端把角色坐标从(100,100)改成(1000,1000),只要间隔够长,服务端就认为你是正常走过去的。这种“坐标信任”漏洞,让所有外挂都能轻松实现瞬移和穿墙。
说实话,玩996引擎私服的人,十有八九都试过这些漏洞。不是因为他们多坏,而是引擎本身的设计就带着一种“半成品”的粗糙感——很多功能写着“支持”,但实际跑起来全是坑。我见过最离谱的一次,是某个私服为了防复制,把物品数据从内存存储改成数据库存储,结果引擎的缓存机制没改,导致玩家捡起物品后,数据库里已经添加了记录,但内存里还保留着旧数据——于是玩家把物品扔地上再捡,就能凭空多出一份。那次漏洞持续了整整一周,服务器里的极品装备价格跌了十倍。
写这些不是教你去薅羊毛。私服圈子小,开服的人往往也兼职做GM,你刷了东西,他后台数据一查就全明白。只是觉得,一个引擎的漏洞,其实映射出整个行业的生态——代码老旧、维护滞后、玩家和GM之间像猫鼠游戏。有时候你甚至分不清,是漏洞在玩玩家,还是玩家在玩漏洞。反正那个“过河卒”,后来成了那组服务器的知名人物——不是因为他的木剑,而是因为他被封号后,写了一篇3000字的漏洞分析贴,把引擎的坐标校验逻辑从头到尾骂了一遍。那帖子现在还在某个传奇技术论坛里挂着,底下跟帖的人都在喊“大佬牛X”,但真正照着去试的,多半都栽在服务端新加的“异常检测”上了。
