上分宝:值得大家信赖的下载网站!
时间:2023-06-09 12:41:17来源:互联网
我们的选题是对过气游戏cs1.6 (Esai 3248版)进行外挂的编写,主要涉及到利用反汇编、注入dll等技术进行游戏的修改。
DLL注入
我知道,每个dll文件里都有一个dllMain的入口,可以在那里设置当dll被process/thread进行attath/deattach等操作时执行的操作。那么我们编写我们的外挂代码,然后将其注入进cstrike.exe中就可以实现许多作弊功能了。
至于具体的注入方式,我们采取了远程创建线程注入的方式。具体的过程和解释如下
先获取注入目标的进程句柄,可以通过进程名、pid等方式获得给注入目标开辟一块内存空间存储dll的路径,然后远程写入获得加载dll的函数LoadLibraryW的地址,由于所有win32进程都加在了kernel.dll,因此该函数在所有进程的内存位置都是一样的,这为我们提供了方便创建在注入目标里远程线程,执行LoadLibraryW,参数自然就是之前写入诸如目标内存空间的dll路径名私信小编:“01”获取听课权限与资料!至此,dll已经被成功注入,并执行了相关的操作。在这里我们执行的就是下面介绍的hook操作
Hook opengl 函数实现透视、反烟雾、闪光
我们知道,cs1.6有opengl模式,也就是通过调用glBegin等函数进行人物等模型的绘制。那么在执行相关操作之前执行我们想要的操作就可以实现相关的hack。比如说,如果识别出正在绘制烟雾弹,直接终止绘图操作就能够实现反烟雾。如果正在绘制人物的模型,那么关闭深度检测,或者将人物的深度拉到很近也就能实现透视的效果了。
因此目前的核心在于,如何在游戏调用相关的函数的时候,先行调用我们插入的函数,并不影响原函数的正常运行。
注意到下列事实会有助于理解
游戏里每次调用相关函数都会从entry处执行,因此我们需要在entry处jmp到我们预先执行的代码targetjmp函数会覆盖原有的指令,我们需要对其进行备份,并且留有接口能正确的执行原函数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文件中。上海市初中学生综合素质评价登录入口
宝可梦属性克制表2024最新,18种属性克制关系
王者荣耀排位巅峰赛荣耀战力加分公式规则2024
魔塔50层攻略隐藏道具图解,魔塔50层详细图文攻略
美国zoom动物仙踪林详情介绍
重装机兵攻略隐藏物品图文详解,战车具体位置
推荐几款超污的手游游戏,6个很污的养成类游戏
希尔薇攻略
原神主c排行2023,4.2目前各系最强主c角色排名
action对魔忍
动作游戏
2233盒子
其他游戏
oppo助手2.0
其他游戏
touchitrikka
益智休闲
qq飞车测试服
赛车竞速
青云纪事
角色扮演
泰拉tmodloader
其他游戏
菜菜音乐盒
其他游戏
迷你世界老版本0.44.2版本
模拟经营
极乐园
聊天交友
湖北农村商业银行
金融理财
51品茶
交友约会
极乐园paradise
聊天交友
丝目
社交聊天
七点工具箱
工具应用
酷狗输入法(搜狗输入法)
常用工具
shopee东南亚跨境电商
境外购物
日本大阪usj
生活实用