CSGO破解学习(八)
郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!
透视
看到CS的显示模式是通过OpenGL来做到的,这个是微软官方的动态链接库
作为图形硬件的软件接口,OpenGL 的主要用途是将二维和三维对象呈现为框架缓冲区。 这些对象被描述为顶点序列,这些顶点 (定义几何对象) 或像素 (定义图像) 。 OpenGL 对此数据执行多个过程,以将其转换为像素,以在帧缓冲区中形成最终所需的图像。
以下主题演示 OpenGL 工作原理的全局视图:
- 基元和命令 将点、线段和多边形作为绘图的基本单位进行讨论:以及命令的处理。
- OpenGL 图形控件 描述哪些图形操作 OpenGL 控件及其不控制。
- 执行模型 讨论用于解释 OpenGL 命令的客户端/服务器模型。
- 基本 OpenGL 操作提供有关 OpenGL 如何处理数据以在帧缓冲区中生成相应图像的高级说明。
- OpenGL 函数名称描述 OpenGL 中使用的命名约定。
我们只需要关注两个函数
- openGL32.dll -> glBegin(开始渲染)
- openGL32.dll -> glDisable(关闭渲染)
首先我们把CS给附加进去
然后在符号表中看数据,并右键点击在反汇编中转到
在转到的哪个界面按F2下个断点,这样游戏画面就不会动了
接着转到调用堆栈位置,找到这个地址右击后跟随目标
可以看到多个函数值,根据微软文档所述(没看过的去看官方文档),这个传入的值就是需要关闭的ID
然后我们回到断点位置,禁用我们刚刚的哪个断点,让游戏跑起来,接着看下面动图,在我们未修改值之前,游戏界面的右下角人物手臂是不会阻挡到子弹数量的,而当我们修改这个参数(快捷键空格会弹出修改框),我们把值改为0,需要把剩余字节用NOP填充,就能看到人物手臂遮挡了子弹数量
所以我们把这两段汇编获取下来,call可以不用上面的地址直接调用改DLL的函数即可
push 00000B71 |
接着我们用同样的方式找到glBegin,在我们给<opengl32.dll.glBegin>
中下断点后在调用堆栈中跟随目标的时候,先不急点开始,可以看到下图
可以看到esp+4
的值是9,和我们压入的哪个参数一致,所以esp+4
就是我们压入的值,接着可以看到调用glBegin
可以看到我们跳转到了这里,由于在微软文档中这个函数也是和关闭渲染一样,压入一个值进行调用的,所以我们修改下这个值(正常来说会崩溃)
接着我们回到CE中
然后在往下+4的位置,按Ctrl+A
进入自动汇编
然后和之前教程中的一样进行代码注入,接着我们把这段代码拿出来进行编辑,只需要newmem中插入如下代码
cmp [esp+4],0//渲染ID |
接着放到CT表中,修改对比的渲染ID,直到人物显示出来,这边测试这个ID是5,有些游戏有上千上万
可以看到已经是透视了
CT表下载
https://raw.githubusercontent.com/Ascotbe/Image/master/CSGO/CSGO1.6-8.CT |