【技术教程】FPS网络游戏自动瞄准漏洞分析以及实现(2)

零 技术教程评论72字数 825阅读2分45秒阅读模式

所需工具:

CE文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

OllyDbg文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

聪明的大脑文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

勤劳的双手文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

 文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

注意:本站只提供教程,不提供任何成品+工具,仅限用于学习和研究。文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

 文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

教程如下:文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

开始分析人物数组文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

说到人物数组,我们必须要了解一下游戏中人物对象的存放形式,一般均为数组, 优点:文章源自灵鲨社区-https://www.0s52.com/jc/jsjc/2549.html

1、按照索引查询元素速度快
2、能存储大量数据
3、按照索引遍历数组方便

而且这也是我们C/C++语言中常用的写法

那么我们来分析一下该游戏,由于该游戏没有子弹数量,所以我们可以通过血量来分析该游戏的数据:

由于血量精度也比较高,所以存放形式也多为浮点数或者双浮点数,由于精度过高,所以我们不能够搜索精确数值,改为搜索两者之间的数值:

 

 

通过撞击建筑物或者其他车辆,使自身血量变动,然后过滤到血量地址:

 

 

这个时候,我们需要用到另外一款调试器:OllyDbg

我们附加进程,使用dd指令,查看血量地址,然后下硬件断点,寻找数组和基地址

 

 

程序断在了0x011299D9位置处,观察寄存器,我们得知eax为人物的临时对象地址,0x0C0为我们的血量地址偏移:0x39EE8FF0 + 0x0c0 = 0x39EE90B0 (eax)

 

 

所以我们继续去追eax,通过单步call,我们发现eax实际上来源于上方的Call的返回值:

 

 

我们进入Call去追踪Eax来源,通过追踪我们发现了数组:

 

 

并且我们发现了数组的基地址:

 

 

关于最终数组的地址的寻址过程,在这里不再赘述,我只放出大概的OD逆向的注释,大家对照一下就可以了:

 

 

最终通过我们的分析得到数组的表达式:

dd [[1C6E1F0]+(([[23E20D4]*7c0+2BE8+23CFD80]&0FFF)+2aad)*c]+0c0

其中,通过我们的分析,得知:0x23E20D4这个地址存放的使我们自身的数组的下标,所以,表达式可转换为

dd [[1C6E1F0]+(( n*7c0 + 2BE8 + 23CFD80 ]&0FFF)+2aad)*c]+0c0 n为下标

分析完数组之后,我们接下来就来分析人物的结构了!

零
  • 转载请务必保留本文链接:https://www.0s52.com/jc/jsjc/2549.html
    本社区资源仅供用于学习和交流,请勿用于商业用途
    未经允许不得进行转载/复制/分享

发表评论