欢迎来到 嗅灵易学

零基础也能上手的脚本技术课,一对一答疑带你入门

[原创]口袋西游无限满血漏洞分析和利用

[原创]口袋西游无限满血漏洞分析和利用

在武汉科锐学完三阶段了,找个游戏练手无意间发现这个漏洞,和大家交流下。


首先介绍几个概念:

网络游戏的变态功能的一般实现方式

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的来源可能就可以找到技能遍历


当然技能call可能不止一个,我这里找的是最外层的技能call,观察参数,可以看出最后push eax 就是push的技能id,往上一直追

到这里发现一个数组




这里发现一个数组,但是很明显看出来这是一个技能栏的技能数组,我们要找的并不是这个,而是人物的所有技能遍历





那怎么办呢,其实我们可以对技能ID下一个硬件访问断点试试




这里就是所有技能的访问了,由此可以遍历处人物的所有技能。

我们来遍历下人物技能看看



游戏中显示的人物只有两个技能,但是我们在内存中遍历出17个技能

我们看下最后一个叫月饼的技能,我们在游戏中看不到并且不能使用这个技能,我们调用明文发包call使用这个技能就可以实现无限满血了。

人物id可以直接在人物对象下观察到,这里就不再赘述。


遍历技能的代码如下:



调用明文发包向服务器发送使用技能的代码如下:



效果如图所示:



如图的dialog是我向游戏注入的dll,点击按钮的时候会调用游戏的明文发包函数向游戏服务器发送一条使用技能ID为0x000387的使用技能封包,人物就会瞬间满血。不过也有冷却时间,5秒可以使用一次。


附件里我打包了代码和dll文件,可以用od的StrongOD插件将dll注入到游戏。



上传的附件 MFC_DLL.rar

注意:上传附件及图片大小不得大于30M。

⚠️ 版权声明:
本博客所有内容(含教程、源码、工具)仅供个人技术学习与研究交流使用,严禁商用、倒卖、二次分发及非法用途
未经作者书面授权,任何组织或个人不得转载、复制或用于其他平台,违者将追究相关责任。

0 0 0 举报
复制成功