倚天荣耀传奇版本刷元宝漏洞原理复现修复与检测全流程剖析

来源: 作者: 点击:
倚天荣耀版本的经济系统漏洞主要集中在NPC交互逻辑与脚本变量校验两个层面。以下按照漏洞类型逐一拆解触发条件、复现路径与对应修复方案。

## 双登挖矿活动元宝返还漏洞

该漏洞出现在版本内置的挖矿活动NPC处,利用的是双账号登录状态下NPC状态同步的时间差。触发条件为两个角色均携带超过500元宝进入土城安全区左下方的挖矿活动区域。具体复现流程如下:真号与假号同时进入活动地图,真号点击NPC进入挖矿场景,假号停留在外部NPC对话界面不进入。真号在内场完成挖矿任务后携带矿石出图,此时假号在外部NPC处执行“拿回元宝”操作。由于引擎在处理NPC状态切换时未对双账号登录场景做互斥校验,真号领取矿石奖励的同时假号也成功取回了预存元宝,造成元宝数量翻倍。

修复思路是在挖矿NPC的进入与退出脚本段中加入角色状态标记。在QFunction-0.txt中找到挖矿活动对应的[@StdModeFunc]触发段,在进入时写入角色唯一标识变量,退出时清除标记并校验。若检测到同一IP或同一账号下存在两个角色同时处于活动状态,则拒绝元宝返还操作。同时将挖矿活动NPC的元宝预存数值上限调低,避免单次漏洞可刷取金额过大。

## GM权限绕过与短信元宝领取漏洞

该漏洞的触发点在于元宝使者NPC的领取逻辑与充值文本之间存在校验缺失。复现路径为:在比奇仓库内点击保管员并关闭对话窗口,前往盟重戒指店老板处选择“关于神秘升级材料的线索”选项,再点击封魔谷布衣老板,此时部分版本会弹出账号输入框。若未弹出可反复点击多次。在输入框中写入目标账号后,元宝使者NPC的领取逻辑会将该操作判定为一次充值记录,从而允许目标账号领取元宝。

该漏洞的根因是充值验证文本与NPC领取脚本共用同一变量。充值平台写入的文本文件被元宝使者脚本直接读取,脚本中未对写入来源做合法性判断。修复方式是在元宝使者NPC的领取脚本中加入充值订单号校验。打开QFunction-0.txt搜索元宝使者对应的[@StdModeFunc]段,在#IF条件中增加CHECKVAR或CHECKACCOUNT命令,验证该账号是否真实存在充值订单。另一种修复方案是直接删除封魔谷布衣老板NPC的账号输入功能,该NPC在倚天荣耀版本中通常仅作装饰用途,删除后不影响主线流程。

## 行会招募公告写入元宝代码漏洞

这是多数传奇版本通用的高危漏洞,在倚天荣耀版本中同样存在。攻击者在行会招募NPC的公告编辑框中写入特定调用代码,代码格式为尖括号包裹的调用指令,配合封包工具向服务端发送构造好的数据包,即可触发QF文本中的元宝生成命令。仅写入代码而不配合封包工具发送指令时,服务端不会产生任何反应,因此该漏洞的利用门槛在于封包工具的配合使用。

检测方法是打开服务端Mir200\Envir\UserCmds.txt文件,搜索是否存在InPutString或CallInPutString相关命令段。这两个命令是行会公告和二级密码输入框的底层触发指令,若其权限设置为0则所有玩家均可调用。修复时先在M2Server控制台中依次打开选项、列表信息、其他设置、用户过滤字符列表,加入@招募队员、@招募、@@、InPutString、CallInPutString等敏感字符并保存。然后在FilterStr.txt文件中补充同样的过滤条目,重启服务端后生效。同时将行会招募NPC的公告编辑权限取消,仅保留招募人数与竞价功能,禁止玩家修改公告内容。

## 双击物品触发编号重复漏洞

倚天荣耀版本的物品数据库中,双击触发型物品通过Anicout编号与QFunction-0.txt中的[@StdModeFunc]段关联。正常设计下每个触发编号对应唯一的物品名称,但漏洞版本中可能存在两个不同物品共用同一Anicout编号的情况。例如数据库中编号32的物品名为“5元宝”,双击后执行GAMEGOLD+5。若另一常见物品也被设置为双击触发型且Anicout编号同为32,则双击该物品同样可以触发元宝增加命令。

检测方法是用DBCommander打开StdItems.DB文件,在Anicout字段上执行排序,查找重复的编号值。同时打开QFunction-0.txt搜索GAMEGOLD+命令,确认每个加元宝的触发段对应的物品名称是否唯一。修复时将重复物品的Anicout编号修改为未占用的新编号,或直接将该物品的双击触发属性取消,改为普通使用类型。

## 回收与合成脚本的Take与Give失配

经济系统类脚本中元宝增减命令必须成对出现。部分倚天荣耀版本的装备回收脚本中存在GAMEGOLD+但未执行Take物品命令的情况,导致同一件装备可以被反复回收兑换元宝。合成脚本中同样存在类似问题,合成消耗的Take命令被误写为GAMEGOLD-,导致合成过程中元宝不减反增。

排查时使用脚本变量编辑器的全局搜索功能,定位所有GAMEGOLD、GAMEPOINT、Give命令。对于每一条GAMEGOLD+命令,确认其上下文是否存在对应的Take物品命令;对于每一条GAMEGOLD-命令,确认其逻辑方向是否为扣除。合成脚本中的加减号错误属于低级失误但排查时容易被忽略,建议逐行核验加减号。

## 引擎命令权限配置错误

倚天荣耀版本使用HERO引擎或GOM引擎作为底层,部分版本在移植过程中将管理命令的权限等级误设为0,导致普通玩家可以在聊天框直接输入命令执行管理操作。高危命令包括CHANGEPERMISSION(修改玩家权限)和CHANGEMODE(设置无敌隐身模式)。检测方法是在M2Server控制台中依次打开选项、游戏命令、管理命令,逐个点击查看每条命令所需的权限等级,若显示为0则立即修改为1至10之间的数值。同时搜索版本中是否存在AddTextListEx .\AdminList.txt这样的代码段,该命令会将任意角色名写入管理员名单文件,属于后门级漏洞,发现后直接删除。

## 假人行会系统与元宝捐献脚本的关联风险

倚天荣耀版本通常内置假人系统以填充服务器活跃度。假人脚本在初始化时会执行元宝捐献操作,若捐献脚本的变量绑定逻辑存在缺陷,假人捐献的元宝可能被转移到真实玩家账号上。排查时打开Mir200\Envir\Robot_def文件夹下的假人相关脚本,搜索GAMEGOLD或GameGold命令,确认捐献操作的源账号与目标账号是否严格分离。假人脚本中的RANDOM控制参数也需检查,确保假人元宝数值的随机范围不会触发变量溢出。

## 变量校验缺失导致的重复领取

倚天荣耀版本的经脉系统使用人物变量存储冲穴进度,部分分支版本在经脉奖励发放脚本中未对变量做互斥校验。若经脉状态变量[101]在领取奖励后未被正确置位,玩家可通过反复触发经脉NPC对话重复领取元宝奖励。检测方法是打开QManage.txt登录脚本,搜索SetRoleMeridian命令,确认每一条经脉打通操作之后是否紧跟变量更新语句。若发现变量更新缺失,在#ACT段末尾补充SETVAR命令将对应经脉变量设置为已领取状态。

## 日志监控与异常元宝增速告警

所有修复操作完成后,需要开启引擎日志系统以持续监控异常。在M2Server控制台中打开查看、列表信息、游戏管理,点击全部添加并保存,确保元宝增减记录写入日志。日志文件位于Mir200\Log目录下,按日期命名。设置告警阈值为单账号每分钟元宝增长超过5000时触发通知。对于倚天荣耀版本中元宝与人民币的兑换比例较高的服务器,该阈值可适当调低。

修复完成后需在测试环境中用双账号和单账号分别验证挖矿活动、元宝使者领取、行会公告写入三个关键入口是否仍存在异常。双登挖矿漏洞的修复需重点验证假号在真号出图后的元宝状态;行会公告漏洞的修复需用封包工具尝试发送带敏感字符的构造数据包,确认被过滤列表拦截;回收脚本的修复需逐件测试可回收装备的元宝变动与物品扣除是否同步。