2021腾讯游戏安全技术复赛pc客户端安全浅析(二)

看到好多人都在做,菜鸟跟风,有错请指正
本系列分为三部分:
一、剥离dll 二、分析自瞄思路 三、自写代码


赛题下载地址: https://gslab.qq.com/html/competition/2021/race-final.htm ,选择 PC客户端安全 下载。

12.分析DLL

  已知游戏是通过按下鼠标右键实线自瞄,将dll拉到IDA,找到注册热键的GetAsyncKeyState函数,双击按X查找引用。
在这里插入图片描述

  发现只有一个地方用到了GetAsyncKeyState,判断5050处为自瞄实现函数。在这里插入图片描述

  跳转过去,F5分析伪代码,结合上下文发现有几处浮点型的操作。自瞄函数实现浮点型数据无外乎几种:坐标、角度。因为数据是连续存储的,所以盲猜一波此处存放的是坐标数据。
  于是跟进v24,得到坐标偏移为:

myX:[[[[[[[[ShooterClient.exe+0x2F71060]+0x160]+0x38]]+0x30]+0x360]+0x158]+0x164] 

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  打开CE附加,将地址输入验证,确定为坐标地址。
在这里插入图片描述

  继续分析自瞄函数。可以看到关键判断是第二个框,判断鼠标右键是否按下或者后面的判断是否成功。
在这里插入图片描述

  下面两个框实现的操作一样,所以可以判断最下面的框是获取敌人坐标。追踪敌人坐标的来源,发现基址来源于第二个框中的函数AimTarget()的返回值。跟进,自下而上分析。
在这里插入图片描述

  可以看到返回的EnemyObj来源于一个循环体,i来源于一个指针对象,i依次加8,可以判断出是枚举敌人对象。在if(v19)里面是不是又看到了很熟悉的操作?没错,就是获取坐标的操作。
  在获取坐标之后进行了一个判断,判断里面有一个勾股定理,熟悉FPS游戏的朋友都知道,计算勾股定理百分之九十九是用于计算距离。根据下面的if(absDstc<24.0)就给返回的EnemyObj赋值同时跳出循环,可以判断出absDstc是敌人到相机坐标往前延伸的垂直距离,通俗点就是敌人在窗口空间的位置和屏幕中心点的距离是否小于24。于是可以逆向推出最上面三条语句的具体作用。
第一个函数的二参和三参都进行了传值,可以判断出是赋值操作。再看后面的*0.5可以判断是获取屏幕中心点,而函数则是取屏幕的宽高。
在这里插入图片描述

  回到计算距离的位置。可以看到tmp_obj在判断语句执行前是为0的,不难看出判断语句内返回了敌人的窗口坐标并且赋值给*tmp_obj。第一个参数是LocalPlayer的指针,第二个是枚举的敌人指针,第三个则是接收数据的指针。
在这里插入图片描述

  回头看整个函数的上半部分,其中有个do while循环用来枚举场中所有人物对象,依次对对象进行判断,判断是否为本地玩家,不为本地玩家则通过getEnemyBase函数获取敌人指针,执行之前的for循环。至此,AimTarget函数基本分析完成。
在这里插入图片描述

  回到注册热键的部分,看到剩下没有分析的部分,可以直接看出整个操作流程。[v21+0x398]存放的是仰俯视角角度,+0x39c则为左右视角角度,而angleZ和angleXY则为偏差角度。通过更改仰俯和左右视角角度来实现自瞄。

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值