石器时代LA官方

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 164|回复: 0

[基础教材] 修复 96封包漏洞

[复制链接]
匿名
匿名  发表于 2021-1-1 19:28:37 |阅读模式
这个漏洞我以前发的端已经修复(2012年),当时真的很惨,几乎每个私服无时无刻都在被这个漏洞攻击

在2012年-2014年的时候,石器私服里非常盛行一个BUG,那就是任何玩家都可以使用GM命令,还可以让玩家随机带走地图上任意NPC移动,
又或者造成NPC消失的BUG,这就是著名的96号封包BUG。目前市面上的服务端应该都修复过了,所以大家都可放心。
这里先说下石器里服务端96号封包的作用,接收客户端传来的宠物状态,休息,待机,战斗,骑宠,邮件这5个状态。

BUG的原理是这5个状态分别以01234这5个整数传送给服务端,但是服务端并未限制只能这5个参数,所以通过封包发送可发送小于0和大于4的参数。
在此封包的最后一句是写入CHAR_WORK_PET0_STAT+状态的数值,结果就会出现如果写入大于4小于0的数值,就会溢出到其他函数并赋值里,
这就导致了任意账号可以是GM账号并且可使用GM命令和玩家可以随机带动站在地图上的NPC。

最开始并不知道这个BUG的触发条件,而且只是个别几个大服才出现,大多数人没在意。直到大范围出现并有人写了个工具来实现。

修复的方法有两种
1、在没有源码的情况下,只要服务端支持ablua,可以对指定的账号限制使用GM命令即可。不过在当时只有一个服的GM做了,在没有源码的前提下,只靠LUA来勉强屏蔽这个BUG,我还是非常佩服的。而且当时也没有太多人会LUA,所以这个方法我只看到就这么一个服用。
2、通过源码修复,有源码就非常方便了。我(神奇的牧羊人)在创建神奇社区的时候,最开始也是并不知道触发BUG的方法,直到有人发了工具,才通过工具发送来的封包值找到问题所在,然后修复了,下面说下源码修复的方法。

1.打开callfromcli.c
2.搜索void lssproto_PETST_recv( int fd,  int nPet, int sPet )
3.在if (!CHAR_CHECKINDEX( charaindex ) ) return;这句话的下面加上如下代码

  1. if(nPet > 4 || nPet < 0)return;
  2. if(sPet > 4 || sPet < 0)return;
复制代码


回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|石器时代LA官方

GMT+8, 2021-3-2 11:48 , Processed in 0.504402 second(s), 31 queries .

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