传奇漏洞查看器
《传奇》服务端的传奇查漏洞,十有八九藏在NPC脚本和物品数据库里。漏洞我见过一个最离谱的传奇查,沙巴克武器店那个升级武器的漏洞老头,只要在对话框里输入特定字符,传奇查就能把一把木剑直接跳到+20。漏洞那串字符是传奇查什么?就是几个百分号加数字,像%1000这种。漏洞服务端解析的传奇查时候没做过滤,直接当成了参数。漏洞这个漏洞在2003年左右的传奇查1.76版本里横行了好一阵子,后来盛大紧急更新了NPC脚本引擎才堵上。漏洞
想自己查漏洞,传奇查先把服务端目录翻一遍。漏洞Mir200\Envir\Market_Def 下面全是传奇查NPC对话脚本,用记事本打开,搜“goto”和“#ACT”。凡是出现goto @xxx后面没跟条件判断的,基本都有问题。比如某个脚本写着#IF checkgold 1000 #ACT goto @给装备,但@给装备那个标签里又没二次校验金币,你只要在对话框里反复点那个选项,金币扣一次,装备拿无限次。这种逻辑漏洞比内存溢出好找多了,不需要什么调试器,肉眼就能看出来。
物品数据库更直接。DBC2000打开Magic和StdItems,看那些AniCount和Shape数值异常的条目。有些GM命令残留的测试物品,名字叫“测试用剑”或者“GM武器”,攻击力写着65535。这种物品如果没从掉落表里删干净,某些特定怪物就会掉。我印象很深,当年有个叫“暗之牛魔王”的怪,官方早删了,但服务端Monster.DB里还留着它的刷新点,坐标在猪洞七层最里面。有人用挂机脚本随机飞,飞到那个坐标就卡住,然后客户端报错,再上线包里多了三把屠龙。这事传开后,那个服三天就关了。
查看器这玩意儿,说白了就是写个程序去遍历服务端文件。用Python写个脚本,把Market_Def下所有txt读进来,正则匹配#ACT段里有没有give、take、goto这些关键字,再检查对应的#IF段有没有check类命令。跑一遍下来,可疑脚本列得清清楚楚。我试过一个1.80的复古端,扫出四十多个问题脚本,其中十二个能直接刷元宝。刷法也简单,比奇省书店老板那里,买一本《基本剑术》,对话框里选“兑换高级技能书”,脚本没判断你包里到底有没有那本书,直接给了一本《召唤神兽》。反复点,神兽书能堆满仓库。
有人觉得用现成的漏洞查看器省事,网上流传的那些工具,大部分是拿易语言写的,界面粗糙,扫描规则也老。它们只能查已知的漏洞特征,比如特定NPC名字或者特定物品ID。服务端稍微改个变量名,工具就瞎了。真正靠谱的办法还是自己读脚本。脚本这东西逻辑简单,就是if-then-else,读上两百行就能摸清套路。我认识一个开服的老哥,他每次拿到新端,第一件事就是把QuestDiary文件夹里所有脚本通读一遍,用红笔在打印稿上标出可疑行。他说这比任何工具都快,因为工具不会告诉你“这个判断写反了”。
最后说个真事。有个服叫“龙腾传奇”,开区第二天就被刷了满城金条。GM查日志,发现所有金条都来自一个叫“比奇国王”的NPC。那个NPC本来只负责传送,但脚本里有一行#ACT give 金条 100,被注释掉了,用//开头。服务端引擎不认//注释,照样执行。GM从网上下端的时候没检查,直接开了。这事说明什么?漏洞查看器再牛,也架不住人懒。