【C#】从零开始的CSGO透视外挂制作教程 P1

发布于 2022-11-20  729 次阅读


使用的软件:

  • Cheat Engine
  • Visual Studio

使用的编程语言:

  • C#

前言

这一系列文章将向你展示从基址寻找内存读取,再通过矩阵算法绘制方框。从0开始制作一款CSGO透视辅助软件。

在其中我会提供我寻找到的内存基址和寻找方法,由于游戏版本更新迭代,很有可能部分基址已经无法使用,所以我将着重强调这一方法,而非基址信息。

注:本教程纯属学习用途,制作全过程将会在线下游戏进行,不可在线上游戏中使用!


1.外挂等辅助软件的基本原理

如果稍微了解一点计算机编程开发的都应该知道,我们在对对象或者数据进行初始化个调用的过程中,计算机需要先在内存区域中新增加一个区域用来存放这个数据,或者从磁盘中获取数据存放到内存中的某一个位置。

理解了这个,接下来就好说很多了,在游戏运行中,人物的状态位置等信息均存在内存中。我们只需要读取并获取这些信息,甚至在有必要的时候我们还可以修改这些信息,从而达到作弊的目的。

举个例子,游戏在开局运行当中,人物的状态、位置等信息也被存在内存中,我们只需要知道人物的位置信息被存在内存当中的哪一个地方,就能顺理成章的获取到人物的位置从而达到透视的效果。


2.人物部分重要基址的获取

首先,需要实现透视功能,当然需要获取到人物的位置信息。在CSGO中,人物数据是用一种链表结构进行存储的,链表的大概格式如下:

Player{
  数据地址
  ID
  上一个结构体地址
  下一个结构体地址
}

通过链表就可以依次偏移出所有玩家的人物的信息。

进入游戏,按“~”键打开控制台,键入指令方便我们的后续操作

sv_cheats 1 //开启作弊
mp_roundtime_defuse 60 //设置回合时间60分钟
bot_stop 1 //禁止bot移动
mp_restartgame 1 //1秒后重新开始

我们可以通过已知的数据,比如角色血量的方式来索引链表(血量更加直观,通过链表中其他已知的角色数据都可以尝试搜索链表)

当然我的任务血量为“97”,使用CE搜索“97”,出现八千多个结果,回到游戏使用“hurtme <血量>”指令自扣1点血,再次搜索“96

循环上述操作,我们最终得到了13个结果

一般由ECX的偏移得到数据,举个例子,ECX+血量的偏移量得到血量。所以我们只需要寻找ECX的数据即可。

先看一下第一个结果,右键点击“找出是什么访问了这个地址

结果如下,有一条move指令,将ecx+18的值存储进ecx,我们可以试试这不是我们需要的链表地址,此时ecx为0000005F,通过十六进制搜索0000005F。

直接寻找绿色的静态地址即可,右键“浏览相关内存区域”查看这块内存中是否符合我们之前提到的链表特征,如果不符合就继续查看下一条静态地址。

如果这些静态地址中都不符合我们的链表特诊,大概率说明,这个ECX地址并不是我们想要的,寻找下一个ECX的地址即可,比如下面这个EXC地址为“656B5840”。偏移为0x100

我们试试这个,重复上述步骤,十六进制搜索这个值,发现四个绿色静态地址,第一个经过还不符合链表特诊,我们再打开第二个试试,右键浏览相关内存区域。如果是首次打开CE,你可能需要调整一下显示类型为“4字节(HEX)

我们发现这块内存非常符合链表特诊,且也符合这局10名玩家的条件,上下均为空值。那么基本这个可以判断“client.dll+4E021E4”是在指向这个链表的一个基址。

我们可以来验证一下,之前血量的偏移是0x100,我们可以在CE中手动添加地址和再加上偏移试试能不能得到血量的值

ok,我们继续向下索引,我们转到这个链表地址

因为人物位置坐标数据类型为单浮点,我们把显示类型改为单浮点

尝试在游戏中移动,观察内存区域中的变动情况,得到存放玩家坐标的地址分别是“656B58E0”、“656B58E4”、“656B58E8

我们得到的这个地址是动态地址,我们需要做一个简单的十六进制加减来得到它对基址的偏移量,方便我们之后在编程环节中得到这个值。用“656B58E0-656B5840(链表地址)”得到偏移量“A0”,然后通过横向加上0x4就可以得到另外两个方向的值了。

接下来我们还需要确定一下角色阵营的数据,将显示类型调整为4字节(DEC)方便查看。不断切换阵营,观察变化的数值

观察得出,在CSGO中,2代表T阵营,3代表CT阵营

重复上述计算偏移的操作,就可以得到玩家阵营的偏移了。

3.视角矩阵基址的获取

CSGO中的矩阵是4X4的矩阵,特诊主要如下图

有两个我们可以确定的数据,就是这个1和-1,当指向天空时为1,当指向地面时为-1,通过单浮点,反复搜索这两个值,并在绿色的静态地址中就能够找到矩阵

P2已更新:传送门

P1教程我们成功寻找到了内存的基址并且得到了他们的偏移,接下面我们需要用编程访问这些内存地址然后完成矩阵进行运算从3D的玩家坐标转换为屏幕坐标,最终在屏幕上绘制方框。