郑重声明:文中所涉及的技术、思路和工具仅供以安全为目的的学习交流使用,如果您不同意请关闭该页面!任何人不得将其用于非法用途以及盈利等目的,否则后果自行承担!

000000

透视

看到CS的显示模式是通过OpenGL来做到的,这个是微软官方的动态链接库

image-20220515160028454

作为图形硬件的软件接口,OpenGL 的主要用途是将二维和三维对象呈现为框架缓冲区。 这些对象被描述为顶点序列,这些顶点 (定义几何对象) 或像素 (定义图像) 。 OpenGL 对此数据执行多个过程,以将其转换为像素,以在帧缓冲区中形成最终所需的图像。

以下主题演示 OpenGL 工作原理的全局视图:

我们只需要关注两个函数

  • openGL32.dll -> glBegin(开始渲染)
  • openGL32.dll -> glDisable(关闭渲染)

首先我们把CS给附加进去

image-20220515161606329

然后在符号表中看数据,并右键点击在反汇编中转到

image-20220515165030293

在转到的哪个界面按F2下个断点,这样游戏画面就不会动了

image-20220515165304823

接着转到调用堆栈位置,找到这个地址右击后跟随目标

image-20220515165455471

可以看到多个函数值,根据微软文档所述(没看过的去看官方文档),这个传入的值就是需要关闭的ID

image-20220515165612544

然后我们回到断点位置,禁用我们刚刚的哪个断点,让游戏跑起来,接着看下面动图,在我们未修改值之前,游戏界面的右下角人物手臂是不会阻挡到子弹数量的,而当我们修改这个参数(快捷键空格会弹出修改框),我们把值改为0,需要把剩余字节用NOP填充,就能看到人物手臂遮挡了子弹数量

1

所以我们把这两段汇编获取下来,call可以不用上面的地址直接调用改DLL的函数即可

push 00000B71
call opengl32.glDisable

接着我们用同样的方式找到glBegin,在我们给<opengl32.dll.glBegin>中下断点后在调用堆栈中跟随目标的时候,先不急点开始,可以看到下图

image-20220517210645148

可以看到esp+4的值是9,和我们压入的哪个参数一致,所以esp+4就是我们压入的值,接着可以看到调用glBegin

image-20220517203033467

可以看到我们跳转到了这里,由于在微软文档中这个函数也是和关闭渲染一样,压入一个值进行调用的,所以我们修改下这个值(正常来说会崩溃)

2

接着我们回到CE中

image-20220517211735975

然后在往下+4的位置,按Ctrl+A进入自动汇编

image-20220517213019808

然后和之前教程中的一样进行代码注入,接着我们把这段代码拿出来进行编辑,只需要newmem中插入如下代码

cmp [esp+4],0//渲染ID
jne originalcode //判断不成立跳转到原代码
push 00000B71//压入任务值
call opengl32.glDisable//调用关闭渲染

image-20220517213343965

接着放到CT表中,修改对比的渲染ID,直到人物显示出来,这边测试这个ID是5,有些游戏有上千上万

3

可以看到已经是透视了

CT表下载

https://raw.githubusercontent.com/Ascotbe/Image/master/CSGO/CSGO1.6-8.CT