这个月找了点资料,整了整CSGO的外挂。总体感觉CSGO官匹的保护还是很宽松的,这里记录一下设计思路与过程(这博客我竟然鸽了一个多月….老拖延症了
地址寻找
既然是实现辅助,那我们必然要对游戏中一些内存的值做读写,而实现读写的前提是我们知道它们在内存中的地址。所以做辅助前需要花大量的时间去寻找我们所需变量在内存中的地址。
寻找地址是一项极为枯燥繁琐的工作,大体思路是控制游戏的一些可变量,使其改变或者不变,同时搜索内存中发生改变或者不变的值,以此来缩小筛选范围
PS: 地址搜索一定要通过 “csgo.exe -insecure"不安全模式运行游戏,这样游戏不会去连接VAC服务器执行安全策略,特别是当CE还是用的官网版不是魔改版的情况下,一定不要头铁去官匹搜内存。不然分分钟你就变成封号斗罗(不要问我为什么这么清楚)
查找视野矩阵
当我们进行游戏时,准星处其实是一个视野矩阵,当我们跳一下时会发现上下左右四个点会向外扩展,静步时会向内收缩。找到这个矩阵在内存中存在的位置是实现自瞄的关键。
这个矩阵在内存中是以浮点数的二维数组形式表示,并且其不会随着人物移动而改变,只有控制准星的移动,它的值才会改变。根据这个特性,我们可以使用CE搜索浮点数内存将变量筛选到100个
然后视野矩阵还有个特征,就是在不开镜的情况下,其首元素值只会在 -1 ~ 1 之间,开镜后其值会大于1。根据这个特征,搜索 -1.5 ~ 1.5间的浮点数,可以再度收缩筛选范围。而后拿狙击枪开镜再筛选一次,就可以将筛选范围降的很低了。接下来对剩下的几个地址右键浏览相关内存区域,可以看到当我们准星移动时,该内存数值一直在发生变化,当我们准星不移动时该内存不变。这样就可以确认我们成找到了视野矩阵地址
并且可以看到这个地址是绿色的,也就是说其本身就是基址,那记录下来就可以了,不需要再费工夫去找它的基址了
查找自己角度
相比于查找视野矩阵来说,查找自己角度又要简单很多了。对于这类沙盒游戏,其实只需要一个表示左右的角度和一个表示上下的角度就可以表示全部的方向了。 查找方法于前面类似,通过找改变角度查找变动的浮点数即可得到。
同时,CSGO的角度查找还有一个特征,当准星指向最上方的时候,上下角度角度值为-89,当准星指向最下方的时候,上下角度的角度值为89。通过这个特征,就能很容易的确定角度指针
查找自己坐标值
同样的,既然是个沙盒游戏,其本身其实就是模拟了一个三位空间,那必然有变量表示着我当前的X Y Z的坐标值。我们可以通过敌人坐标值与我们坐标值做运算得到与敌人的相对距离,即自瞄距离。
这个坐标值的寻找也非常容易,就是控制自己的移动与不移动来用CE查找变动与不变动的浮点数
查找敌人与队友的信息
这个信息的查找应该就是整个外挂实现最重要的部分了,因为得到了敌人的结构体,我们就能得到关于敌人血量、护甲、武器、坐标值在内的大量信息。按常理,敌人指针应该是非常难找的,但CSGO给我们提供了一个非常好用的工具————“开发者控制台”。通过这个神器,我们可以控制机器人的动与不动,进而搜索得到机器人的XYZ坐标值,再上推出角色结构体
首先先用指令 “bot_kick”踢出所有机器人,然后用 “bot_add” 指令增加一个敌方机器人,接着通过 “bot_stop” 这条指令控制机器人的移动与不移动,通过CE搜索改变与不改变的浮点数值。然后还可以自己与机器人站在一起,通过自己的坐标判断机器人坐标的大致范围,进行数值筛选
筛选到这一步其实已经很难通过控制机器人是否移动再来筛选了,但是还是会发现列表中有许多相差很近的数值穿越火线卡盟,一般认为这是敌人某些骨骼的坐标值,所以我们可以通过浏览内存区域功能来判断出敌人这个值是敌人本身的XYZ坐标值还是骨骼的XYZ坐标值。(骨骼XYZ坐标值往往是连成一片的,而敌人本身的XYZ坐标值则是连续的三个浮点变量)