-
-
[原创]口袋西游无限满血漏洞分析和利用
-
发表于:
2019-5-19 10:08
9714
-
在武汉科锐学完三阶段了,找个游戏练手无意间发现这个漏洞,和大家交流下。
首先介绍几个概念:
网络游戏的变态功能的一般实现方式
1:本地数据
某些网络游戏将人物的血量,攻击力,坐标,这些重要数据存在游戏本地的客户端,当然可能会有一些加密,这样的游戏可以直接修改内存实现无敌,秒杀,瞬移等变态功能。当然这种网络游戏并不多见,大多数游戏重要数据都存放在服务器,我们修改内存看到的只是假象。
2:伪造封包
既然是网络游戏,就肯定要与服务器进行网络通信,比如我们在游戏里使用技能,就会向服务器发送使用技能封包,喊话就回向服务器发送喊话封包。大多数封包的漏洞都是服务器判断不严谨或者有一些逻辑漏洞造成的,比如如果游戏服务器并没有对技能冷却时间进行判断,我们直接一直向服务器发送使用技能的封包就可以实现技能无CD的效果,有些网游怪物死亡会向服务器发送怪物死亡的封包,那我们就可以伪造封包向服务器发送达到秒杀怪物的效果。某些射击网游,玩家朝着敌人射击时会发送一条封包,我们可以通过玩家和敌人坐标计算精确的值修改这些封包,就可以实现枪枪爆头等变态功能。还有些游戏刚进副本时会向服务器发送封包增加人物血量攻击力之类的,我们可以把这条封包找出来,调用游戏发包函数向服务器发送,也可能可以实现倍攻无敌等效果。
大多数网络游戏通过send或者WSASend发包函数向服务器发送封包,当然现在很多网络游戏可能会调用更底层的发包函数,或者一些其他处理,导致用od在这些函数上下断点并不会命中断点,这种情况我们不在赘述。
为什么要找明文发包call?因为我们在这些系统的发包函数下断点,断下看到的数据一般都是加密的 ,所以我们要找到游戏明文的发包函数才能方便分析封包内容。
我们今天讨论的是口袋西游的封包bug
我们先要找到游戏中的明文发包函数以及分析使用技能的封包内容
这个游戏的发包函数调用过程非常简单,简单可以概括为
功能CALL==》组包==》明文发包CALL==》加密等等==》send
我们可以在send头部下段,在游戏中 做相应的功能动作,断下时通过栈回朔就可以返回到明文发包call。
在send函数头部下断点,使用回城术技能,ctrl+f9几次来到了如图所示处:
这里只有使用技能才会断下,我们可以观察下这个call的参数
第一个参数是0x1C,应该是包长,第二个参数是包内容,我们可以把内容复制出来
29 00 45 00 00 00 FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01 42 A3 03 00
经过我们的对比分析,可以分析出
29 00//包头
45 00 00 00//技能ID
FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 01//固定数据
01 42 A3 03 00//如果是选中怪物攻击的技能,这里就是怪物id,如果不需要选中怪物就攻击的,就是我们人物自己的id
技能封包分析完了,接下来就需要分析技能遍历,我们可以继续ctrl+f9几次找到技能call,技能call应该有个参数是技能id,分析技能id的来源可能就可以找到技能遍历
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2019-5-22 18:49
被小白鼠_897235编辑
,原因: