当前位置:首页 > 综合

传奇写入漏洞教程

《传奇》服务器端有个老毛病,传奇2003年那会儿,写入沙巴克城主能通过交易金币复制装备。漏洞具体操作是教程:两个人面对面交易,一方放上装备,传奇另一方放上金币,写入在点确认的漏洞瞬间,放装备的教程人小退,金币扣了,传奇装备还在。写入这漏洞当时没人管,漏洞因为官方觉得“玩家自己操作失误”。教程后来有人写了个脚本,传奇自动卡这个时间点,写入一晚上刷出三把屠龙。漏洞盛大封号封了三千多个,但装备已经流进市场了,一把屠龙从八千跌到三百。

写入漏洞跟这个不一样。复制是逻辑层面的,写入是直接改内存。早期传奇的服务端程序有个叫“人物数据缓存”的东西,玩家每次移动、攻击、捡东西,服务端会先把数据写到内存里,隔几秒再同步到数据库。这个间隔就是窗口期。你用WPE抓包,找到“捡取物品”的封包,把物品ID改成你想要的,比如把“金创药(小量)”的ID改成“屠龙”的ID,然后疯狂发送。服务端内存里你的背包数据就被覆盖了。数据库还没反应过来,你小退再上线,背包里就是屠龙。

这招在1.76版本之前特别好使。因为那会儿服务端用的是Delphi写的,内存管理松散,封包校验就一个简单的异或。后来1.80版本换了C++重写,加了CRC校验,WPE改包直接掉线。但道高一尺魔高一丈,有人开始用CE(Cheat Engine)直接搜内存。搜什么?搜你背包里金创药的数量,比如你有50个,搜50,然后丢掉一个,再搜49,反复几次就能定位到地址。把地址的值改成999,再买一个金创药,背包里就变成1000个。这比改封包稳定,因为不经过网络层。

我见过最狠的一个案例,是2010年一个私服。服主自己写了个“自动回收”功能,玩家把不要的装备拖到NPC那里换元宝。他图省事,回收逻辑写在了客户端。客户端发一个“回收请求”给服务端,服务端只校验了物品ID是否在回收列表里,没校验物品数量。有人用CE把回收请求里的“数量”从1改成-1。服务端一算,1减负1等于2,直接给你加了两份元宝。刷了三天,服主发现元宝总量不对,查日志才发现。那哥们儿已经提现了八千多块。

写入漏洞的核心就一句话:服务端信任了客户端发来的数据。只要客户端能改,服务端又照单全收,那就随便刷。防的方法也简单,所有关键数据——金币、物品数量、装备属性——全部在服务端算,客户端只发“我要捡这个物品”,服务端自己查数据库决定给你什么。但很多私服为了省服务器性能,把计算扔给客户端,这就等于把钥匙插在门上还贴了张纸条说“欢迎光临”。

现在官服基本堵死了,但私服还在用十几年前的代码。你去搜“传奇服务端”,下载下来解压,用WPE抓个包,改个数字,照样能刷。不是技术没进步,是有人懒得进步。

分享到: