- 打卡等级:魔龙套勇士
- 打卡总天数:117
- 打卡月天数:10
- 打卡总奖励:13851
- 最近打卡:2025-08-10 00:32:31
管理员
本站站长
- 积分
- 8084
|
传奇游戏脚本(基于 HeroM2、GOM、GEE 等引擎的.txt脚本文件)因逻辑设计疏漏或权限校验缺失,容易出现各类漏洞。以下是常见漏洞类型、原理及典型案例,结合脚本代码示例说明:
一、权限控制漏洞(最常见)
表现形式
低权限玩家(普通用户)可执行管理员命令(如刷装备、修改属性、开启无敌模式),或越权访问管理功能(如后台配置、玩家数据)。
原理
脚本中未对操作权限进行严格校验,或使用了错误的权限判断函数(如将管理员权限等级100误写为0)。
典型案例
text
; 错误的刷装备脚本(QFunction-0.txt)
#ACT
CheckLEVELEX > 0 ; 错误:权限等级≥1即可执行(普通玩家等级通常≥1)
Make 裁决之杖 1 ; 刷出顶级武器
; 正确写法应限制高权限:
#IF
CheckLEVELEX > 99 ; 仅管理员(权限≥100)可执行
#ACT
Make 裁决之杖 1
衍生漏洞
管理命令未隐藏:如@GM、@Admin等命令未加密,玩家通过猜解命令直接调用。
权限继承漏洞:子账号默认继承父账号权限,导致普通玩家通过 “师徒系统”“行会职位” 间接获取高权限。
二、经济系统漏洞(影响游戏平衡)
表现形式
玩家可无限刷元宝、金币、材料等资源,或通过 “空手套白狼” 获取高价值物品(如用 1 个材料合成 10 个装备)。
核心原理
“只给不扣”:脚本中Give(添加资源)与Take(扣除资源)命令未成对出现。
数值校验缺失:未限制单次操作的资源数量或次数。
典型案例
无限刷元宝(回收脚本)
text
; 错误的装备回收脚本(Market_Def\回收.txt)
#IF
CheckItem 木剑 1 ; 检查玩家是否有1把木剑
#ACT
Give 元宝 100 ; 给100元宝(但未扣除木剑)
; 漏洞:玩家可重复提交木剑,无限获取元宝
; 修复:添加Take命令
#ACT
Take 木剑 1
Give 元宝 100
材料不消耗合成
text
; 错误的装备合成脚本(QManage.txt)
#IF
CheckItem 铁矿 10
#ACT
; 遗漏Take铁矿 10,导致材料不消耗但产出装备
Make 青铜剑 1
三、触发逻辑漏洞(无限触发效果)
表现形式
玩家通过重复触发脚本(如双击物品、进入地图、对话 NPC),无限获取奖励(经验、属性、物品)。
原理
未限制触发次数(如未记录 “已触发” 状态)。
触发后未消耗 “触发媒介”(如物品、任务道具)。
典型案例
无限经验卷
text
; 错误的经验卷脚本(StdItems.DB关联的QF触发)
#ACT
AddExp 10000 ; 增加10万经验
; 遗漏Delete命令,导致经验卷可重复双击使用
; 修复:添加删除物品命令
#ACT
Delete 经验卷 1
AddExp 10000
地图无限刷怪 / 奖励
text
; 错误的地图进入触发(MapEvent.txt)
[地图=100 进入触发]
#ACT
Make 金币 1000 ; 每次进入地图都给1000金币,无次数限制
; 修复:通过变量记录触发次数
#IF
CheckVar HasaEnter 0 ; 检查变量HasaEnter是否为0(未进入过)
#ACT
SetVar HasaEnter 1 ; 标记为已进入
Make 金币 1000
四、越权访问漏洞(数据安全风险)
表现形式
水平越权:玩家 A 可查看 / 修改玩家 B 的背包、属性、任务数据(如通过修改UserID参数)。
垂直越权:普通玩家可执行管理员才能操作的后台功能(如踢人、禁言、修改服务器配置)。
原理
脚本未校验操作对象与执行者的关联性,或参数传递时未加密 / 校验。
典型案例
查看他人背包
text
; 错误的背包查询脚本(@LookBag命令)
#ACT
; 直接通过输入的UserID查询,未验证是否为本人
OpenBag <$USERID> ; <$USERID>为玩家输入的目标ID
; 修复:校验目标是否为自己
#IF
Equal <$USERID> <$USERNAME> ; 目标ID必须等于当前玩家ID
#ACT
OpenBag <$USERID>
越权踢人
text
; 错误的踢人脚本(@Kick命令)
#ACT
; 未检查是否为管理员,普通玩家可任意踢人
KickPlayer <$TARGET>
; 修复:添加权限校验
#IF
CheckAdmin 1 ; 仅管理员(权限等级1)可执行
#ACT
KickPlayer <$TARGET>
五、数值溢出与异常漏洞
表现形式
玩家属性(攻击、防御)、金币、经验等数值异常(如负数值、远超上限的数值),导致游戏逻辑崩溃(如无法攻击、任务无法完成)。
原理
脚本未限制数值范围,或计算时未处理溢出(如整数超过最大值后变为负数)。
典型案例
金币溢出
text
; 错误的金币奖励脚本
#ACT
AddGold <$PARAM> ; <$PARAM>为玩家输入的数值,未限制上限
; 漏洞:玩家输入9999999999,金币超过最大值(如2^31-1),变为负数
; 修复:限制最大数值
#IF
Less <$PARAM> 1000000 ; 单次最多添加100万金币
#ACT
AddGold <$PARAM>
属性叠加异常
text
; 错误的BUFF脚本(如“战神祝福”)
#ACT
AddAttack 10 ; 每次触发增加10点攻击,无上限
; 漏洞:玩家可重复触发,攻击变为数万,秒杀所有怪物
; 修复:限制叠加次数或总上限
#IF
CheckAttack < 100 ; 攻击上限100点
#ACT
AddAttack 10
六、注入类漏洞(脚本逻辑篡改)
表现形式
玩家通过输入特殊字符(如;、#、--),篡改脚本执行逻辑(如在聊天框输入命令执行刷装备)。
原理
脚本未过滤用户输入的特殊字符,导致输入内容被解析为脚本命令的一部分。
典型案例
text
; 错误的聊天脚本(未过滤特殊字符)
#ACT
SendMsg 0 玩家<$USERNAME>说:<$MSG> ; <$MSG>为玩家输入的聊天内容
; 漏洞:玩家输入“;@make 屠龙刀 1”,脚本被解析为:
; SendMsg 0 玩家张三说:;@make 屠龙刀 1
; 分号“;”截断原命令,执行@make刷装备
; 修复:过滤特殊字符
#IF
CheckValidStr <$MSG> 1 ; 仅允许字母、数字、中文(过滤;、#等)
#ACT
SendMsg 0 玩家<$USERNAME>说:<$MSG>
漏洞防范通用原则
严格权限校验:所有敏感操作(刷物品、改属性)必须用CheckLEVELEX、CheckAdmin限制权限。
成对使用命令:Give/Add类命令必须与Take/Delete类命令配合,确保 “有增有减”。
限制触发次数:通过变量(SetVar/CheckVar)记录触发状态,避免重复执行。
过滤用户输入:用CheckValidStr等函数过滤特殊字符,防止注入。
数值范围控制:对金币、属性等数值设置合理上限,避免溢出。
不同引擎(如 HeroM2、GOM)的函数可能略有差异,但核心逻辑漏洞的原理一致,需结合具体引擎文档进行针对性防护。
|
|