cs16控制台作弊指令大全 cs16外挂如何实现

來源:81下載 時間:2023-06-05

CS 1.6 hack

我们的选题是对过气游戏CS1.6 (Esai 3248版)进行外挂的编写,主要涉及到利用反汇编、注入dll等技术进行游戏的修改。

DLL注入

我知道,每个dll文件里都有一个dllMain的入口,可以在那里设置当dll被process/thread进行attath/deattach等操作时执行的操作。那么我们编写我们的外挂代码,然后将其注入进cstrike.exe中就可以实现许多作弊功能了。

至于具体的注入方式,我们采取了远程创建线程注入的方式。具体的过程和解释如下

  1. 先获取注入目标的进程句柄,可以通过进程名、pid等方式获得

  2. 给注入目标开辟一块内存空间存储dll的路径,然后远程写入

  3. 获得加载dll的函数LoadLibraryW的地址,由于所有win32进程都加在了kernel.dll,因此该函数在所有进程的内存位置都是一样的,这为我们提供了方便

  4. 创建在注入目标里远程线程,执行LoadLibraryW,参数自然就是之前写入诸如目标内存空间的dll路径名私信小编:“01”获取听课权限与资料!

至此,dll已经被成功注入,并执行了相关的操作。在这里我们执行的就是下面介绍的hook操作

Hook opengl 函数实现透视、反烟雾、闪光

我们知道,cs1.6有opengl模式,也就是通过调用glBegin等函数进行人物等模型的绘制。那么在执行相关操作之前执行我们想要的操作就可以实现相关的hack。比如说,如果识别出正在绘制烟雾弹,直接终止绘图操作就能够实现反烟雾。如果正在绘制人物的模型,那么关闭深度检测,或者将人物的深度拉到很近也就能实现透视的效果了。

因此目前的核心在于,如何在游戏调用相关的函数的时候,先行调用我们插入的函数,并不影响原函数的正常运行。

注意到下列事实会有助于理解

  • 游戏里每次调用相关函数都会从entry处执行,因此我们需要在entry处jmp到我们预先执行的代码target

  • jmp函数会覆盖原有的指令,我们需要对其进行备份,并且留有接口能正确的执行原函数new_entry

  • 我们可以存下new_entry的地址,以备target里使用

  • 每个指令都有各自的长度,我们不能随意打断拆分。所以我们需要用IDA等工具查看entry处的汇编指令情况,找到len长度的字节,保证len大于等于5且不会打断指令

关于len的示意图如下,hook这个函数是len需要设成7(或者更大,但不能打断指令)

同时为了方便理解,放上相关的示例代码

上述代码就可以实现在执行glVertex2f时,先跳转到我们的Hooked_glVertex2f函数执行,而pglVertex2f就是原函数的功能备份。当然如果判断完不需要绘制(比如烟雾)的话,直接return也就可以了。

通过对mp.dll的分析实现hack

在使用IDA和CE修改器等工具后,我们可以发现一个核心的dll——mp.dll。绝大多数的游戏相关的函数都存在里面,这也是我们攻击的重点。

定位数据

拿到游戏里人物、枪械的数据是我们实现hack非常重要的一步。这里我们使用CE修改器帮助我们完成相关的操作。这里以生命值(HP)为例来说明我们如何定位关键数据的内存地址。

我们首先在游戏中通过各种方式反复改变自己的HP,同时利用CE监控内存变化。如果内存中的某个数据总是和我们的HP保持一致,那么我们就可以认为这个地址很大概率上储存了玩家的生命值。但在实际操作中,HP的值往往在内存中存在多个副本,还需要逐个分析筛选,找到唯一的记录HP的内存地址。

但是即便我们这里得到了一个地址,这个地址也不会是一成不变的。在重每次新运行进程的时候,进程的地址都有可能变化,因此我们需要把获得的绝对地址转化为相对于进程的偏移地址。具体来说,我们一级一级寻找它的指针,直到这个地址位于游戏主进程cstrike.exe里面。一个基本的步骤如下

我们获得了HP存储的地址 0x0B221D5C。

我们监测修改该处值的代码,并使自己受伤,然后可以看到修改该地址的语句含有[eax+00000160]的字样。

因此我们可以大胆断定,eax此时存的是某个结构体的指针,而hp作为结构体的成员被存储在+160的位置。因此我们读取eax的值,然后直接在内存中搜索这个值,就可以找到存放这个指针的位置。

至此,我们就成功找到了hp上一级的地址。重复上述操作直到该地址不再是绝对的内存地址,而是cstrike.exe + offset的形式时,我们就找到了hp的正确访问方式,而不用担心进程加载以及malloc的时候开辟空间的不同造成的影响。

同样的,我们也对其他容易观测并修改的值进行了定位,并依靠其获得了许多有用的数据如下

其中像X,Y,Z坐标的信息是难以通过搜索内存定位的。但从已经确定的如玩家HP,护甲等信息,我们可以猜到[cstrike.exe+11069BC]+7c]存放着玩家的相关信息,而[[cstrike.exe+11069BC]+7c]+4]里面存放的就是和玩家物体直接相关的信息。那么我们通过对[[cstrike.exe+11069BC]+7c]+4]里所有的offset进行监控,也就能定位出这样一些难以直接定位的数据。

关键语句定位

在找到关键数据后,我们需要找到修改这些数据的函数语句。我们首先使用CE监视修改关键数据的语句,这里往往会得到很多条;然后需要逐条查看反汇编,进行筛选,最后找到最核心的语句。这样我们就拿到了语句相对于动态链接库起始位置的地址。由于动态链接库在内存中的加载地址并不固定,之后我们还需要借助Windows提供的一系列API来计算出这条语句在内存中加载的实际地址,才能进行后续的操作。

定位目标函数的一般流程如下:

使用CE监视内存,不断修改游戏中的某个状态,找到内存中控制这个状态的数据地址。

使用CE找到修改这条数据的语句的地址(实际上关心的是在dll中的偏移量)。

基于IDA Pro对dll的反汇编,根据上面得到的地址,找到对应的语句,阅读包含这条语句的函数的汇编代码,理解含义。

关键语句修改

修改分为两类,一种是简单地写入新语句,覆盖原来的内容。这部分相对比较简单,只需要把机器码直接写入内存指定即可。但是限制较多,一般只是写入0x90(nop),相当于移除了某条指令。

这个方法确实不错,也能达到很多效果比如不掉血不掉甲。但是由于这些函数都是全局共享的,也就是双方都不掉血掉甲,作为一个外挂来说肯定是失败的。

更为通用的办法还是仿照之前的写法进行hook,而在hook的代码里就可以检测调用者的信息,如果是自己就加入类似无敌、攻击翻倍等功能。

我们实现过的功能包括无限子弹,秒杀(用户造成的伤害锁定为255),无敌,随地买枪下包等。有兴趣的读者也可以自行尝试。建议先用CE修改器达到类似功能,然后再考虑如何写入dll文件中。

相關文章
熱門攻略
推薦遊戲
小小三国志变态版v1.0
小小三国志变态版
變態手遊 24.3MB
下載
弓箭手箭棍之战v1.1.0
弓箭手箭棍之战
休閑益智 30.0M
下載
梦之谜道路疏通1.0
梦之谜道路疏通
休閑益智 9.9M
下載
黑棒勇士v1.0.2
黑棒勇士
飛行射擊 21.1M
下載
茅山降魔录v1.30.0
茅山降魔录
動作冒險 202.57MB
下載
热门教程
推薦應用
搜书大师老版本v16.5
搜书大师老版本
新聞資訊 10.62 MB
下載
王牌扫描仪2.13.0
王牌扫描仪
系統工具 8.47 MB
下載
花缘优美v1.0
花缘优美
學習教育
下載
简历形象照v1.1.2
简历形象照
系統工具 162.05 MB
下載
行测练题狗3.0.0.0
行测练题狗
學習教育 35.77 MB
下載