欢迎光临~珏怯网络 JJ金商微:jj26824

JJ租号新闻

四舍五入算法导致的JJ比赛**金币漏洞

游戏后端考虑不周,导致游戏币被无限刷,这是我真正遇到的。首先要明确的是,这不是我写的代码,但幸运的是,我当时没有碰这个代码,否则锅就是我的。
我曾经是一家游戏公司的脚本,我写了所有的前端和后端脚本。第一个脚本是引擎部写的最简单的框架。
框架大致是一些基本功能,包括仓库访问。
我们使用的脚本语言是Lua,我已经很多年没碰了,所以可能不对,但不影响整个故事的真实性。
仓库功能无非是获取道具和游戏货币。游戏的底部是游戏引擎C++写的时候,我也忘记了发生了什么。我不知道C++取整是四舍五入还是四舍五入Lua四舍五入。总之,问题在于四舍五入。
游戏货币绝对是整数,仓库的功能自写以来就没人动过。突然有一天,我们发现游戏中某个角色的货币数量惊人。
但是我们计算了游戏的价值,玩家不可能拥有如此惊人的游戏货币。所以,策划部门眼病手快,当场关闭游戏货币异常账号。
于是我们开始找原因。原本以为是公司内部人员不小心执行了什么命令。但是后来对这个异常人物的登录地点进行了检查,排除了公司内部人员的可能性。
当我们找不到原因时,角色账户的玩家主动联系我们公司,说我们的游戏有一个严肃的游戏Bug,让我们公司给他一笔报酬,让他告诉我们如何刷游戏货币。
作为一家正常的公司,我们不能受到威胁,所以我们拒绝了他“好意”。此外,我们还提醒他,如果他再次在游戏中动手脚,我们将使用法律部门。
这个人也很老实,从此没有出格的行为。
后来我们决定,Bug一定是游戏货币存取。好消息是当时涉及游戏的功能不多。经过仔细搜索,我真的在仓库功能上找到了它。
由于仓库是整存整取,所以没有小数点。虽然前端控制输入,但Lua是弱型脚本语言。因此,虽然前端已经控制好了,但是如果玩家在存储游戏货币时不走界面,直接调用存储界面就会出现问题。
当时我们的前端脚本没有加密,后来这件事发生后才加密。当然,也需要后端配合,这是后话了。
该人应使用封包软件检测前端和后端通信的接口地址,然后使用不知道的接口地址Lua或者C++语言直接调整后端接口,每次只有0.5个游戏货币。
此时,我不知道为什么,需要从玩家身上扣除0.5货币,因为没有0.5单位,扣除失败。但是存入仓库时,0.五舍五入1。这样,玩家没有扣钱,而是在仓库里多了一个游戏货币。
这个时候只需要写一个循环,想要多少游戏货币,循环多少次!
发现问题后,立即整改。但有趣的是,写仓库写仓库这个功能的人已经离开了,想有人背锅没人能背。
这件事最让人摸不着头脑的是,从玩家身上扣0.5个游戏货币时,没有四舍五入,而是四舍五入。这是整个Bug出现的首要原因。
后来的解决方案是,在执行存储功能时,后端直接向下整合,以解决所有问题

导航栏目

新闻中心

联系我们

公 司:珏怯网络

地 址:中国

用手机扫描二维码关闭
二维码