传奇找漏洞的核心思路分两条路。手里有服务端文件时,直接审计脚本代码是最准的方式,能发现九成以上的逻辑问题。手里只有客户端、只能进游戏操作时,靠边界值测试和异常操作来试探触发点。两条路配合使用,效率最高。
##脚本文件审计的重点位置
服务端目录下MirServer\Mir200\Envir是脚本集中的区域,用Notepad++或VSCode打开该文件夹,启用全局搜索功能,重点排查以下几类文件。
**QFunction-0.txt**是双击物品触发脚本,很多版本的刷元宝、刷装备漏洞都藏在这里。搜索GAMEGOLD+、GAMEPOINT+、GIVE等关键词,检查每一处给予资源的命令。如果某个脚本段在给完东西之后,没有对应的TAKE命令扣除触发物品,也没有CHECK条件限制领取次数,就意味着可以反复触发。常见案例是把普通药水的触发编号设置成了元宝券的编号,双击药水就能拿到元宝。
**QManage.txt**是登录触发脚本,检查里面是否有ISADMIN之外的权限判断。有些版本会在这个文件里写入隐藏的CHANGEPERMISSION命令,普通玩家登录时如果触发了某段条件,权限会被自动提升。全盘搜索CHANGEPERMISSION、CHANGEMODE、ISADMIN这几个关键词,任何出现在非管理脚本中的权限修改命令都需要重点确认。
**每日签到、泡点、首充、回收**这类功能脚本也是重灾区。搜索这些脚本文件中的GAMEGOLD+和GIVE,看#IF条件段里有没有写CHECK[变量]来判断今天是否已经领过。缺少这个判断的脚本,小退重登后可以反复点击NPC重复领取。
**AdminList.txt**本身也要看一眼。里面除了你自己的角色名之外,如果出现了陌生的账号或角色名,说明这个版本被人留过后门,或者是从别人手里买来的时候没清理干净。
##物品数据库的异常配置
用DBC2000或数据库查看器打开服务端DB文件夹下的StdItems.DB,这是物品属性库。重点看Anicount字段,这个字段控制物品双击时触发哪一段脚本。如果两个不同物品的Anicount数值相同,比如金疮药和某个礼包券用了同一个编号,双击药水就可能触发礼包的发放逻辑。
再看武器的Luck字段上限。正常传奇引擎的武器幸运上限是9,如果数据库里被改成了99或更高,喝祝福油就没有了上限限制,可以堆出超高幸运值。DuraMax字段如果被设成0,会出现武器持久无限的特殊状态。
怪物爆率文件在MonItems目录下,检查鹿、鸡、稻草人这类低级怪物的爆率配置。正常版本这些怪的爆率文件里不应该出现终极装备或高级材料。如果发现了,通常是架设者删测试数据时漏掉的,或者故意留的“隐藏福利”。
##游戏内黑盒测试的突破口
没有源码或不想翻脚本时,直接在游戏里做极限操作测试。交易和商店是最容易触发数值问题的场景。在交易金额框、商店出售数量框、NPC存入数量框里尝试输入负数,比如-1000或-999999。如果系统扣减负数后反而增加了你的货币或物品,就存在溢出漏洞。这个测试方法从早期的沙巴克城主刷钱漏洞一直沿用至今,当年的经典操作就是在沙城使者那里输入负数来增加自己的金币。
物品复制类漏洞的测试思路是制造网络延迟和状态不同步。把装备扔在地上,立刻小退再上线,观察地上和背包里是否同时存在这件装备。或者两个号交易,放入物品后点击确认的瞬间其中一个号断线重连,检查双方背包状态。法师诱惑宠物的老漏洞也有参考价值:诱惑怪物后让宠物处于休息状态,角色过境再回来,原本的宠物可能变成可攻击的怪物并掉落物品,同时地图上又刷新了一只新宠物。
NPC高频交互是另一个方向。对着同一个奖励NPC疯狂连点,或者在活动结束前的最后一秒提交任务,观察奖励是否被重复发放。任务进度卡点也可以用类似思路:任务要求收集20个物品时,交19个后下线重登,再和NPC对话,看进度是否被锁定或直接完成。
##封包层面的漏洞利用思路
用WPE或类似抓包工具拦截客户端和服务端的通信数据,对比正常操作和异常操作之间的封包差异。重点观察物品生成指令、装备强化指令、任务提交指令的封包结构。早期很多漏洞都是通过封包实现的:跳过任务前置环节直接获取最终奖励、强制发送进入特定地图的指令、修改强化次数限制。
封包测试需要一定的工具使用基础,WPE的过滤规则设置和封包重组功能是核心操作。录制一段正常操作的封包,然后手动修改其中的参数值重新发送,观察服务端的响应。部分引擎对封包有加密校验,遇到加密的情况需要先定位解密函数,这个门槛较高。
##引擎管理命令的权限核查
打开M2Server控制台,进入选项菜单下的游戏命令,查看管理命令列表。每一条GM命令都有对应的“所需权限”数值。检查@make、@GameGold、@level、@ChangeMode这些高危命令的权限要求是否为0。如果显示为0,意味着任何玩家在聊天框输入这条命令都能直接执行,不需要GM身份。
同时确认命令的前缀符号。默认是@,但如果服务端配置文件里改过触发符号,实际生效的就是改过之后的字符。在!Setup.txt或Command.ini里搜索CommandPrefix字段可以确认。
##版本特性带来的高频漏洞点
微变和轻变版本在原版基础上大量增加了转生、合成、赞助、泡点等自定义脚本,这些新增逻辑最容易出校验缺失。转生脚本如果只写了转生条件判断,但没有在#ACT段里写TAKE扣除材料,就可以无消耗反复转生。合成脚本如果缺少材料扣除的验证,可以虚空合成高级装备。
地图传送的边界测试也值得做。输入@map加非常规地图编号,比如999或D5001,看是否能进入未开放区域。或者贴着地图边缘的墙角持续行走,在出现角色抖动时使用随机传送,有概率卡进隐藏地图。
沙巴克铁匠的砸武器漏洞在老引擎中一直存在。武器取出的瞬间成败已经确定,用刺杀剑术攻击固定目标测试最高伤害值,如果比升级前的最高伤害多出1点,说明成功;如果多出2点以上说明跳点。知道武器已经碎了之后,在带芯状态下扔回给铁匠,有些版本可以回收重砸。
##排查顺序与注意事项
先从脚本审计入手,全盘搜索GAMEGOLD、GIVE、CHANGEPERMISSION、CHANGEMODE这几个关键词,把可疑的脚本段标记出来。然后查StdItems.DB的Anicount重复情况和武器Luck上限。有条件的话在单机环境里逐条验证可疑脚本,用测试角色执行对应操作,观察资源变化和日志输出。
测试所有漏洞时使用单独的测试账号和测试角色,不要在主号上操作。部分版本会记录异常行为并在后台标记账号。单机环境下测试相对安全,联网版本中触发的漏洞如果被其他玩家举报,面临的是封号和数据回滚。
漏洞的存在本身反映的是脚本编写时的校验缺失。找到漏洞之后,如果是自己架设的版本,正确的做法是在对应脚本段里补上CHECK条件判断和TAKE扣除命令,而不是利用漏洞获取资源。
##脚本文件审计的重点位置
服务端目录下MirServer\Mir200\Envir是脚本集中的区域,用Notepad++或VSCode打开该文件夹,启用全局搜索功能,重点排查以下几类文件。
**QFunction-0.txt**是双击物品触发脚本,很多版本的刷元宝、刷装备漏洞都藏在这里。搜索GAMEGOLD+、GAMEPOINT+、GIVE等关键词,检查每一处给予资源的命令。如果某个脚本段在给完东西之后,没有对应的TAKE命令扣除触发物品,也没有CHECK条件限制领取次数,就意味着可以反复触发。常见案例是把普通药水的触发编号设置成了元宝券的编号,双击药水就能拿到元宝。
**QManage.txt**是登录触发脚本,检查里面是否有ISADMIN之外的权限判断。有些版本会在这个文件里写入隐藏的CHANGEPERMISSION命令,普通玩家登录时如果触发了某段条件,权限会被自动提升。全盘搜索CHANGEPERMISSION、CHANGEMODE、ISADMIN这几个关键词,任何出现在非管理脚本中的权限修改命令都需要重点确认。
**每日签到、泡点、首充、回收**这类功能脚本也是重灾区。搜索这些脚本文件中的GAMEGOLD+和GIVE,看#IF条件段里有没有写CHECK[变量]来判断今天是否已经领过。缺少这个判断的脚本,小退重登后可以反复点击NPC重复领取。
**AdminList.txt**本身也要看一眼。里面除了你自己的角色名之外,如果出现了陌生的账号或角色名,说明这个版本被人留过后门,或者是从别人手里买来的时候没清理干净。
##物品数据库的异常配置
用DBC2000或数据库查看器打开服务端DB文件夹下的StdItems.DB,这是物品属性库。重点看Anicount字段,这个字段控制物品双击时触发哪一段脚本。如果两个不同物品的Anicount数值相同,比如金疮药和某个礼包券用了同一个编号,双击药水就可能触发礼包的发放逻辑。
再看武器的Luck字段上限。正常传奇引擎的武器幸运上限是9,如果数据库里被改成了99或更高,喝祝福油就没有了上限限制,可以堆出超高幸运值。DuraMax字段如果被设成0,会出现武器持久无限的特殊状态。
怪物爆率文件在MonItems目录下,检查鹿、鸡、稻草人这类低级怪物的爆率配置。正常版本这些怪的爆率文件里不应该出现终极装备或高级材料。如果发现了,通常是架设者删测试数据时漏掉的,或者故意留的“隐藏福利”。
##游戏内黑盒测试的突破口
没有源码或不想翻脚本时,直接在游戏里做极限操作测试。交易和商店是最容易触发数值问题的场景。在交易金额框、商店出售数量框、NPC存入数量框里尝试输入负数,比如-1000或-999999。如果系统扣减负数后反而增加了你的货币或物品,就存在溢出漏洞。这个测试方法从早期的沙巴克城主刷钱漏洞一直沿用至今,当年的经典操作就是在沙城使者那里输入负数来增加自己的金币。
物品复制类漏洞的测试思路是制造网络延迟和状态不同步。把装备扔在地上,立刻小退再上线,观察地上和背包里是否同时存在这件装备。或者两个号交易,放入物品后点击确认的瞬间其中一个号断线重连,检查双方背包状态。法师诱惑宠物的老漏洞也有参考价值:诱惑怪物后让宠物处于休息状态,角色过境再回来,原本的宠物可能变成可攻击的怪物并掉落物品,同时地图上又刷新了一只新宠物。
NPC高频交互是另一个方向。对着同一个奖励NPC疯狂连点,或者在活动结束前的最后一秒提交任务,观察奖励是否被重复发放。任务进度卡点也可以用类似思路:任务要求收集20个物品时,交19个后下线重登,再和NPC对话,看进度是否被锁定或直接完成。
##封包层面的漏洞利用思路
用WPE或类似抓包工具拦截客户端和服务端的通信数据,对比正常操作和异常操作之间的封包差异。重点观察物品生成指令、装备强化指令、任务提交指令的封包结构。早期很多漏洞都是通过封包实现的:跳过任务前置环节直接获取最终奖励、强制发送进入特定地图的指令、修改强化次数限制。
封包测试需要一定的工具使用基础,WPE的过滤规则设置和封包重组功能是核心操作。录制一段正常操作的封包,然后手动修改其中的参数值重新发送,观察服务端的响应。部分引擎对封包有加密校验,遇到加密的情况需要先定位解密函数,这个门槛较高。
##引擎管理命令的权限核查
打开M2Server控制台,进入选项菜单下的游戏命令,查看管理命令列表。每一条GM命令都有对应的“所需权限”数值。检查@make、@GameGold、@level、@ChangeMode这些高危命令的权限要求是否为0。如果显示为0,意味着任何玩家在聊天框输入这条命令都能直接执行,不需要GM身份。
同时确认命令的前缀符号。默认是@,但如果服务端配置文件里改过触发符号,实际生效的就是改过之后的字符。在!Setup.txt或Command.ini里搜索CommandPrefix字段可以确认。
##版本特性带来的高频漏洞点
微变和轻变版本在原版基础上大量增加了转生、合成、赞助、泡点等自定义脚本,这些新增逻辑最容易出校验缺失。转生脚本如果只写了转生条件判断,但没有在#ACT段里写TAKE扣除材料,就可以无消耗反复转生。合成脚本如果缺少材料扣除的验证,可以虚空合成高级装备。
地图传送的边界测试也值得做。输入@map加非常规地图编号,比如999或D5001,看是否能进入未开放区域。或者贴着地图边缘的墙角持续行走,在出现角色抖动时使用随机传送,有概率卡进隐藏地图。
沙巴克铁匠的砸武器漏洞在老引擎中一直存在。武器取出的瞬间成败已经确定,用刺杀剑术攻击固定目标测试最高伤害值,如果比升级前的最高伤害多出1点,说明成功;如果多出2点以上说明跳点。知道武器已经碎了之后,在带芯状态下扔回给铁匠,有些版本可以回收重砸。
##排查顺序与注意事项
先从脚本审计入手,全盘搜索GAMEGOLD、GIVE、CHANGEPERMISSION、CHANGEMODE这几个关键词,把可疑的脚本段标记出来。然后查StdItems.DB的Anicount重复情况和武器Luck上限。有条件的话在单机环境里逐条验证可疑脚本,用测试角色执行对应操作,观察资源变化和日志输出。
测试所有漏洞时使用单独的测试账号和测试角色,不要在主号上操作。部分版本会记录异常行为并在后台标记账号。单机环境下测试相对安全,联网版本中触发的漏洞如果被其他玩家举报,面临的是封号和数据回滚。
漏洞的存在本身反映的是脚本编写时的校验缺失。找到漏洞之后,如果是自己架设的版本,正确的做法是在对应脚本段里补上CHECK条件判断和TAKE扣除命令,而不是利用漏洞获取资源。

