传奇找漏洞的核心思路分两条路。手里有服务端文件时,直接审计脚本代码是最准的方式,能发现九成以上的逻辑问题。手里只有客户端、只能进游戏操作时,靠边界值测试和异常操作来试探触发点。两条路配合使用,效率最高。
## 脚本文件审计的重点位置
服务端目录下 MirServer\Mir200\Envir 是脚本集中的区域,用 Notepad++ 或 VS Code 打开该文件夹,启用全局搜索功能,重点排查以下几类文件。
**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 扣除命令,而不是利用漏洞获取资源。
传奇找漏洞技巧 脚本审计与游戏内测试完整方法
来源:
作者:
点击:

