设为首页收藏本站
  • 官方微信
    lmkj_wx 微信公众号 添加方式:
    1:扫描左侧二维码
  • 手机访问
    lmkj_sj
  •  找回密码
     立即注册

    QQ登录

    只需一步,快速开始

    查看: 6|回复: 0

    如何修复已发现的传奇游戏脚本漏洞

    [复制链接]
    avatar
    • 打卡等级:魔龙套勇士
    • 打卡总天数:117
    • 打卡月天数:10
    • 打卡总奖励:13851
    • 最近打卡:2025-08-10 00:32:31

    6538

    主题

    130

    回帖

    8084

    积分

    管理员

    本站站长

    积分
    8084
    online_admin 发表于 4 天前 | 显示全部楼层 |阅读模式
    修复传奇游戏脚本漏洞需要结合漏洞类型(如权限控制、经济系统、触发逻辑等),针对性调整脚本逻辑、补充校验机制,并通过严格测试验证修复效果。以下是分场景的具体修复方案,包含脚本代码示例和验证方法:
    一、权限控制漏洞修复
    核心目标:严格限制敏感操作(如刷装备、改权限)的执行权限,确保只有管理员或特定权限用户可操作。
    1. 管理员命令权限校验修复
    漏洞场景:普通玩家可执行@make(刷装备)、@ChangeMode(开无敌)等管理命令。
    修复思路:

    使用引擎提供的权限判断函数(如CheckLEVELEX、CheckAdmin)明确权限等级(通常管理员权限≥100)。
    隐藏或加密管理命令,避免玩家猜解。

    错误脚本示例:

    text
    ; QFunction-0.txt 中错误的刷装备脚本
    #ACT
    ; 无权限校验,任意玩家可执行
    Make 屠龙刀 1

    修复后脚本:

    text
    ; 仅允许权限≥100的管理员执行
    #IF
    CheckLEVELEX > 99  ; 权限等级>99(即≥100)
    #ACT
    Make 屠龙刀 1
    #ELSEACT
    SendMsg 7 权限不足,无法执行该命令  ; 普通玩家执行时提示错误
    2. 越权访问(如查看他人数据)修复
    漏洞场景:玩家可通过@LookBag 玩家ID查看任意玩家背包。
    修复思路:校验操作对象是否为执行者本人,或限制仅管理员可跨用户操作。

    错误脚本示例:

    text
    ; @LookBag命令脚本(未校验权限和对象)
    #ACT
    OpenBag <$TARGETID>  ; 直接打开目标玩家背包

    修复后脚本:

    text
    #IF
    ; 两种情况允许执行:1. 查看自己的背包;2. 管理员查看他人背包
    (Equal <$TARGETID> <$USERID>) || (CheckLEVELEX > 99)
    #ACT
    OpenBag <$TARGETID>
    #ELSEACT
    SendMsg 7 无权查看该玩家背包  ; 非本人且非管理员时拒绝
    二、经济系统漏洞修复
    核心目标:确保资源(元宝、材料、装备)的 “增减平衡”,避免 “只给不扣” 或 “扣少给多”。
    1. 无限刷资源(回收 / 合成脚本)修复
    漏洞场景:装备回收时只给元宝不扣装备,或合成时只出成品不消耗材料。
    修复思路:

    所有Give(添加)操作必须对应Take(扣除)操作,且数量一致。
    用CheckItem先验证玩家是否有足够资源,再执行扣除和添加。

    错误脚本示例(装备回收):

    text
    ; Market_Def\回收.txt 错误示例
    #IF
    CheckItem 青铜剑 1  ; 检查是否有1把青铜剑
    #ACT
    Give 元宝 50  ; 给50元宝,但未扣除青铜剑(可无限回收)

    修复后脚本:

    text
    #IF
    CheckItem 青铜剑 1  ; 先确认有足够物品
    #ACT
    Take 青铜剑 1       ; 先扣除物品
    Give 元宝 50        ; 再添加资源(顺序不可颠倒)
    #ELSEACT
    SendMsg 7 背包中没有青铜剑,无法回收  ; 物品不足时提示
    2. 数值溢出(金币 / 属性异常)修复
    漏洞场景:金币或属性值超过上限(如金币变为负数、攻击突破 10 万)。
    修复思路:

    对AddGold(加金币)、AddAttack(加攻击)等命令设置数值上限。
    用Less(小于)、Greater(大于)函数限制输入参数范围。

    错误脚本示例(金币奖励):

    text
    ; 任务奖励脚本,未限制金币数量
    #ACT
    AddGold <$PARAM>  ; 玩家可输入超大值(如999999999)导致溢出

    修复后脚本:

    text
    #IF
    Less <$PARAM> 100000  ; 单次奖励上限10万金币
    #ACT
    AddGold <$PARAM>
    #ELSEACT
    SendMsg 7 单次奖励金币不能超过10万  ; 超过上限时拒绝
    三、触发逻辑漏洞修复
    核心目标:限制脚本触发次数(如任务奖励、地图进入奖励),避免无限重复触发。
    1. 无限触发物品 / 任务奖励修复
    漏洞场景:双击经验卷不消耗物品,或重复接取同一任务获取奖励。
    修复思路:

    触发后立即删除物品(Delete)或标记任务状态(SetVar)。
    用CheckVar(检查变量)判断是否已触发,避免重复执行。

    错误脚本示例(经验卷):

    text
    ; 经验卷触发脚本(StdItems.DB关联QF)
    #ACT
    AddExp 10000  ; 增加经验,但不删除物品(可无限双击)

    修复后脚本:

    text
    #IF
    CheckItem 经验卷 1  ; 确认有物品
    #ACT
    Delete 经验卷 1     ; 先删除物品
    AddExp 10000        ; 再增加经验
    #ELSEACT
    SendMsg 7 物品不存在  ; 防御异常触发
    2. 地图无限触发奖励修复
    漏洞场景:每次进入某地图都给金币,无次数限制。
    修复思路:通过玩家变量记录 “是否已触发”,仅允许首次进入时获取奖励。

    错误脚本示例(MapEvent.txt):

    text
    ; 地图100进入触发,无次数限制
    [地图=100 进入触发]
    #ACT
    Give 金币 1000  ; 每次进入都给1000金币

    修复后脚本:

    text
    [地图=100 进入触发]
    #IF
    CheckVar EnterMap100 0  ; 检查变量EnterMap100是否为0(未触发过)
    #ACT
    SetVar EnterMap100 1    ; 标记为已触发(变量值改为1)
    Give 金币 1000
    #ELSEACT
    SendMsg 7 已领取过该地图奖励  ; 重复进入时提示
    四、注入类漏洞修复
    核心目标:过滤用户输入的特殊字符(如;、#、@),防止输入内容被解析为脚本命令。
    聊天 / 输入框注入修复
    漏洞场景:玩家在聊天框输入;@make 屠龙刀 1,通过分号;截断原命令并执行刷装备。
    修复思路:使用CheckValidStr函数过滤特殊字符,仅允许安全字符(字母、数字、中文)。

    错误脚本示例(聊天脚本):

    text
    ; 未过滤特殊字符,直接拼接玩家输入
    #ACT
    SendMsg 0 玩家<$USERNAME>说:<$MSG>  ; <$MSG>包含玩家输入的特殊字符

    修复后脚本:

    text
    #IF
    CheckValidStr <$MSG> 1  ; 1表示允许中文、字母、数字(过滤;、#、@等)
    #ACT
    SendMsg 0 玩家<$USERNAME>说:<$MSG>
    #ELSEACT
    SendMsg 7 输入包含非法字符  ; 含特殊字符时拒绝发送
    五、修复验证与测试方法
    权限测试:
    用普通玩家账号执行修复后的命令(如@make),确认提示 “权限不足”。
    用管理员账号执行,确认能正常执行,验证权限边界(如权限 99 的账号无法执行,100 的可以)。
    资源平衡测试:
    测试回收 / 合成流程:提交 1 个物品,检查背包是否正确扣除,资源是否对应增加,重复提交是否失败。
    触发次数测试:
    对经验卷、地图奖励等,触发一次后再次尝试,确认无法重复获取,变量状态是否正确更新(如EnterMap100变为 1)。
    注入测试:
    在聊天框输入;@make 屠龙刀 1,确认被拦截并提示 “非法字符”,后台无刷装备记录。
    六、通用预防措施
    脚本审计:定期用 “全局搜索” 工具检查敏感命令(Make、Give、AddExp),确保都有对应的权限校验或扣除逻辑。
    备份与版本控制:修复前备份原脚本(如QFunction-0_backup.txt),避免修复错误导致脚本失效。
    引擎适配:不同引擎函数可能不同(如 GOM 引擎用CheckAdminLevel,HeroM2 用CheckLEVELEX),需参考对应引擎文档。
    模拟攻击:用测试账号模拟玩家可能的漏洞利用方式(如重复触发、输入特殊字符),提前发现未修复的逻辑缺陷。

    通过以上方法,可有效修复 90% 以上的常见脚本漏洞。修复后需在测试服运行 24 小时以上,观察是否有异常日志(如M2Server.log中的Invalid Command或资源异常变动),确认无问题后再部署到正式服。

    您需要登录后才可以回帖 登录 | 立即注册 qq_login

    本版积分规则

    QQArchiver 手机版 小黑屋 39传奇素材网 ( 蜀ICP备2022016510号-3 )

    快速回复 快速发帖 返回顶部 返回列表