游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

admin 2025年3月30日22:39:08评论4 views字数 1941阅读6分28秒阅读模式

点击上方「蓝字」关注我们

由于传播、利用本公众号"零羊Web"所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,公众号"零羊Web"及作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我们会立即删除并致歉谢谢!

前言

在此文章发布之前,有一篇详细讲解绘制的原理,不过只针对于坐标系(哈哈哈不学数学你连外挂都写不明白)

这次讲解具体原理

包括OpenGL使用API透视外部绘制

01
游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

外部绘制

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

外部绘制不依赖于篡改游戏内部渲染逻辑,而是通过读取游戏窗口内容并在其上叠加额外的信息层来实现透视效果。这种方法避免了直接修改游戏进程,但需要解决屏幕坐标与游戏世界坐标的映射问题。

这是最简单粗暴的方法,从内存中抓取三维坐标和视角场(也就是FOV) 进行三角函数计算,然后画出一个方框的方式进行透视

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解
游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解
游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

实现步骤

1 获取游戏窗口句柄
  • 使用 Windows API 获取目标游戏窗口的句柄(Handle)。

2 截取屏幕内容
  • 使用 BitBlt 或 PrintWindow 函数截取游戏窗口的内容。

2.3 解析游戏内存
  • 使用工具(如 Cheat Engine)定位游戏中存储玩家和敌人位置的内存地址。

  • 读取这些地址的数据,获取敌人的世界坐标。

2.4 世界坐标到屏幕坐标的转换
  • 使用游戏的视图矩阵(View Matrix)和投影矩阵(Projection Matrix)将世界坐标转换为屏幕坐标。

  • 视图矩阵和投影矩阵通常可以通过逆向工程从游戏的渲染代码中提取。

  • 转换公式:

    Vector4 clipCoords = projectionMatrix * viewMatrix * worldPosition;

  • screenX = (clipCoords.x / clipCoords.w + 1.0f) * screenWidth / 2.0f;

  • screenY=(1.0f- clipCoords.y / clipCoords.w) * screenHeight / 2.0f;

2.5 绘制叠加信息
  • 使用 Direct3D 或 GDI+ 在屏幕上绘制边界框、文字标签等。

哈哈不过这种方法也受到了不少吐槽,数学不好压根玩不了

02
游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

OpenGL透视

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

OpenGL是一种跨平台的图形API,许多游戏使用它来渲染3D场景。透视外挂的核心是通过拦截和修改OpenGL函数调用,改变游戏的渲染行为,从而让玩家看到被遮挡的物体。

比如CS1.6,利用的OpenGL底层进行开发的,当然,还有D3D

在这里介绍一下

  • OpenGL:是一个跨平台的图形API,允许开发者创建高性能的2D和3D图形应用。在CS 1.6中,使用OpenGL可以提供更好的视觉效果,并且对于一些旧系统来说,OpenGL驱动可能比Direct3D更稳定。

  • Direct3D:是微软开发的一个API,主要用于Windows平台上直接访问图形硬件。相比OpenGL,它提供了对Windows特定功能的支持,并且在某些情况下能提供更高的性能优化。

所以在这里需要使用hook

这里是HOOK的介绍:

用于拦截并修改程序的正常执行流程。通过挂钩,开发者可以在函数调用之前或之后插入自定义代码,以实现各种目的,如监控、调试、安全检查或者在游戏中实现作弊行为。在外挂中,通常被用来拦截游戏内部或图形API的函数调用。

比如更改渲染逻辑!

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

正常游戏情况下,躲在墙后的敌人是不被渲染的,因为在渲染逻辑中,墙体是大于敌人的,但是,我们如果更改了深度测试参数,躲在墙后的敌人依然会被渲染出来在掩体的前方,这就达到了透视的效果

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

实现步骤

1 钩子注入(Hooking)
  • 目标:拦截OpenGL函数调用。

  • 方法:

    • glDrawElements 或 glDrawArrays:负责绘制模型。

    • glDepthFunc 或 glDepthMask:控制深度测试和Z缓冲区。

    • 使用动态链接库(DLL)注入技术将自定义代码注入到游戏进程中。

    • 常见的钩子工具有 Detours、MinHook 或直接编写自己的钩子代码。

    • 注入后,替换关键的OpenGL函数指针,例如:

2 修改渲染逻辑
  • 禁用深度测试:

    • 深度测试用于判断物体是否被遮挡。

    • 通过修改 glDepthFunc 参数或禁用深度测试(glDisable(GL_DEPTH_TEST)),可以让所有物体都显示在屏幕上,即使它们被墙壁遮挡。

  • 颜色标记:

    • 截获每个物体的绘制调用,并根据其类型(如敌人、队友、物品)给其赋予特定的颜色

    • 这需要解析游戏中的物体数据,通常是通过读取游戏内存中的实体信息。

3 渲染叠加
  • 在原有渲染的基础上,添加额外的2D元素(如边界框、文字标签等)以突出显示目标。

  • 使用 glOrtho 切换到正交投影模式,绘制2D UI元素。

End

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解
零羊Web

了解更多知识

扫码关注公众号

点个「在看」你最好看~

游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

原文始发于微信公众号(零羊Web):游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年3月30日22:39:08
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   游戏安全之不学数学你连外挂都写不明白-透视和外部绘制讲解https://cn-sec.com/archives/3898266.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息