去年夏天,传奇充值一个开网吧的私服朋友给我看了他后台的充值记录。有个账号在三天内充了四万七千块,漏洞每次都是传奇充值648元的档位,但游戏里的私服元宝数量对不上——到账的元宝比实际充值金额少了将近三分之一。他查了日志,漏洞发现这些订单的传奇充值支付状态全显示“已回调”,但第三方支付平台的私服流水里只有两万八。剩下的漏洞钱去哪了?没人知道。
这就是传奇充值传奇私服里最常见的充值漏洞之一:支付回调伪造。私服不像官服有完整的私服支付风控体系,很多服主直接套用网上下载的漏洞支付接口代码,回调验证环节写得稀烂。传奇充值攻击者用抓包工具拦截客户端和服务器之间的私服通信,把支付金额从648改成1块,漏洞或者把“未支付”状态直接改成“已支付”,服务器照单全收。
更野的路子是“元宝负数刷法”。某服的技术跟我讲过,他们服的充值逻辑是先给元宝再扣款。有人利用这个时间差,用脚本在0.3秒内连续发起二十笔充值请求,每笔都触发元宝到账,但只有第一笔真正扣了钱。后面的请求因为余额不足被支付网关拒绝,可元宝已经进了背包。等服主发现的时候,这人已经把元宝换成装备挂在交易平台上卖了。
有些漏洞甚至不需要技术。有个开服两年的老哥跟我说,他见过最离谱的案例是充值比例写错了。本来1元等于100元宝,他改配置的时候手滑写成了1元等于10000元宝。凌晨三点改的,早上八点发现的时候,已经有七个人充了六块钱,每人拿了六万元宝,把全服的市场价格打崩了。他一个个打电话求人家退元宝,最后退了五个,剩下两个直接把他拉黑了。
这些漏洞背后有个共同点:私服的技术栈太薄。官服有专门的支付团队、风控系统、对账机制,私服往往就一两个人维护,用的还是网上扒来的源码。支付接口的密钥硬编码在客户端里,数据库密码是“123456”,后台登录地址是“/admin”,连验证码都没有。有人写了个爬虫,专门扫这些后台,扫到就进去给自己充元宝。
我见过一个更隐蔽的玩法。攻击者不直接改充值金额,而是篡改订单号。他把自己的订单号改成别人的大额订单号,服务器验证的时候只看订单号不看用户ID,结果别人充的钱进了他的账号。这种漏洞在同时使用多个支付通道的私服里特别常见,因为不同通道的订单号格式不一样,服主自己都搞不清楚哪个订单对应哪个通道。
说到底,私服充值漏洞的本质是信任错位。服务器太信任客户端发来的数据,太信任支付平台返回的状态,太信任自己那套从网上抄来的代码。攻击者只需要找到其中一个信任链条的断点,就能把整个经济系统撬开。那些被刷走的元宝、被改掉的订单、被负数的余额,最后都变成服主自己掏钱填的坑。
我那个开网吧的朋友后来把私服关了。他说关服那天,数据库里还有十七个账号的元宝是负数,最多的一个负了八十多万元宝。他没去追,也追不回来。那些账号的注册IP全是假的,绑定的手机号是空号,连支付时用的银行卡都是买来的。他只能把服务器一关,当这事没发生过。