读书笔记:游戏安全防外挂

游戏安全防外挂

什么是外挂

  • 内存挂:释放核心功能模块,注入到游戏客户端。侵入性操作,修改游戏代码和数据,HOOK游戏代码,CALL游戏函数等行为。
  • 非内存挂:不注入模块到游戏空间。分类为:资源修改挂,模拟客户端收发包协议或脱机挂,模拟按键挂。
  • 外挂分为 内存挂和非内存挂。根据是否有模块进入游戏客户端。
  • 内存挂启动后 遍历进程定位目标游戏进程,然后将核心模块放到驱动目录下,
  • 把DLL注入游戏进程空间。修改数据,HOOK代码,CALL游戏函数。

游戏的3个保护核心

  • 外挂开发者感兴趣: 游戏资源的破解和修改,游戏通讯协议的破解,内存对象的修改数据
  • 游戏资源的加解密
  • 游戏协议的加密保护
  • 游戏内存对象布局

VMProtect商业产品

  1. VMProtect 是新一代的软件保护系统,将保护后的代码放到虚拟机中运行,这将使分析反编译后的代码和破解变得极为困难。使用 MAP 文件或内建的反编译引擎,您可以快速选择需要保护的代码。
  2. VMProtect保护原理 与其它大部分的保护程序不同,VMProtect可修改程序的源代码 [2] 。VMProtect可将被保护文件中的部分代码转化到在虚拟机(以下称作VM)上运行的程序(以下称作bytecode)中。您同样可把VM想象为具备命令系统的虚拟处理器,该命令系统与Intel 8086处理器所使用的完全不同。例 如,VM没有负责比较2个操作数的命令,也没有有条件与无条件的移转等。就象您现在看到的,黑客必须开发一款特定的工具以分析与反编译bytecode, 而且还相当地耗时。3

保护程序的三个方法

  • 使用编译器创建的MAP文件以及程序的可执行文件。MAP文件包含有关应用程序的所有过程和功能的名称以及地址的所有必要信息。如果使用MAP文件,则可以选择按名称保护的过程和函数。使用MAP文件,每次重新编译项目时,VMProtect都会自动确定过程和函数的新地址。
  • 使用插入应用程序源代码的标记。 标记是VMProtect用于确定受保护片段边界的特殊标记。 此外,VMProtect支持具有预定义编译类型的标记。当你只想保护函数或过程的一部分时,使用标记非常有用的。使用标记可以指定要保护的字符串常量的代码部分。
  • 通过可执行文件中受保护过程的地址。 与上述两种方式相比,这种方式使用起来不太方便。 每次修改和重新编译应用程序时,都必须再次指定所有地址。 对于没有源代码的应用,建议使用此类保护。

外挂的说明和解释

  • 外挂分为 内存挂和非内存挂。根据是否有模块进入游戏客户端。
  • 内存挂启动后 遍历进程以定位目标游戏进程,然后将核心模块是否到驱动目录下,把DLL注入游戏进程空间。修改数据,HOOK代码,CALL游戏函数。
  • 非内存挂:修改游戏资源包,模拟收发数据包,模拟按键。
  • 外挂开发者感兴趣: 游戏资源的破解和修改,游戏通讯协议的破解,内存对象的修改数据。

外挂的设计思路和步骤

  1. 把核心功能模块注入目标游戏进程。
  2. 外挂模块进入游戏空间后,隐藏外挂模块,避免被人或者安全模块检测到。
  3. 外挂和用户指令交互,构建完全的交互环境,防止被安全分析人员定位。
  4. 接受操作指令后,开始执行与游戏相关的核心功能,吸怪,加速,释放技能,加红蓝(技术:CALL函数,HOOK)
  5. 分析游戏的安全保护方案,并且绕过他。
  6. 外挂的自我保护。

反外挂的思路

  1. 防止外挂开发者分析游戏客户端代码:去掉调试信息和明文字符串等,给客户端加保护壳。
  2. 防止外挂模块注入游戏客户端:常用双进程保护的启动方式,或者在驱动里添加监控加载模块的功能。
  3. 防止外挂开发者分析游戏通讯协议:通信协议必须要加密,最好经常更换密钥或算法,还有防止重放数据包的功能
  4. 防止外挂模块CALL函数,修改代码或数据。

注入技术

  • 方法有:注册表,远线程,依赖可信进程,APC,消息钩子,导入表,劫持进程创建,LSP,输入法,COMRES注入等

自我隐藏:无模块化

  • 断开进程的LDR_MODULE链。(WINDOWS西永中,每个模块都有一个结构体 关键字:InLoadOrderModuleList)
  • 抹去模块的PE头。(抹去MZ PE标志。 GetModuleHandle VirtualProtect等)

安全的交互通道

  • 消息钩子
  • HOOK游戏消息处理进程
  • GetKeyState()等函数
  • 进程间通信

CALL函数相关知识

  • call stack 检测:利用栈帧信息中的调用返回地址来确定发起调用的地址是否合法。
  • 多层堆栈检测方法:HOOK调用链底层的函数或者地址,然后多层堆栈回溯检测。
  • 躲过多层堆栈检测方法:构建假栈帧,在CALL函数之前给EBP一个假的栈基地址。

HOOK大全

  • HOOK分 linline 和 非 inline HOOK.
  • Inline HOOK:将程序中的某处地址处若干直接的代码复制到其他地方,然后再远地址写出实现跳转功能的指令,改变程序流程。
  • 非Inline HOOK: 改变CALL操作的目标地址。
  • 微软Detours HOOK库 来 动态HOOK任意地址,截获函数调用,输出打印信息。
  • 硬件断点HOOK: WINDOWS的 SEH-结构化异常处理机制和 VEH-向量异常处理机制。

INTEL X86处理器的RING级别访问控制

  • RING分为4层。 ring 0 - 4
  • R0层拥有最高的权限,R3位最低的权限。
  • 应用程序在R3层,只能访问R3层数据,操作系统在R0,可以访问所有层的数据。

应用层防护

  • 静态保护:加壳,去字符串,去全局指针和虚拟保护的软件。
  • 角色基地址拆分为多个值运算返回。 DWORD VALUE = 0X876C20; PDWORD pdPlayer = (PDWORD)VALUE/2;
  • 动态保护:反DUMP,内存访问异常HOOK。

脱壳和加壳

  • 从技术的角度出发,壳是一段执行于原始程序前的代码。原始程序的代码在加壳的过程中可能被压缩、加密……当加壳后的文件执行时,壳-这段代码先于原始程序运行,他把压缩、加密后的代码还原成原始程序代码,然后再把执行权交还给原始代码。
  • 软件的壳分为加密壳、压缩壳、伪装壳、多层壳等类,目的都是为了隐藏程序真正的OEP(入口点,防止被破解)。
  • 最常见的加壳软件ASPACK ,UPX,PEcompact,不常用的加壳软件WWPACK32,PE-PACK,PETITE NEOLITE。

Dump程序基本步骤(LordPE):

  1. 就是把内存中运行的PE进程的数据,从内存中抓取出来,然后在用文件的形式保存下来。
  2. 在系统中找到目标进程。
  3. 在进程中确定进程的大小imagesize。
  4. 把进程中的数据保存到文件。

分析工具介绍

  1. GameSpider WINDOWS下的外挂和游戏辅助分析工具。是DLL模块。
  2. Kernel Detective 用于检测,分析和修改WINDOWS NT内核的免费工具。强大的静态逆向分析工具。
  3. 脱壳工具:https://baike.baidu.com/item/%E8%84%B1%E5%A3%B3/9482636?fr=aladdin

加速外挂(全屏加速和角色加速挂)

  • 通过HOOK来让FPS中的SKIP时间满足条件,对time.GetTime()函数进行HOOK,放大系统运行时间。

自动瞄准和反后坐力

  1. 反后坐力:测试出开钱前后的反弹距离Z,然后调用mouse_event(...,x,y+z,..)函数。
  2. 自动开枪:通过模拟按键和像素检测来自动射击。

D3D9的HACK点(通过调用SetRenderState)

  1. 线框透明:渲染时忽略图形表面的材质和纹理。
  2. 禁用光照:可以高亮显示要关注的物体对象。
  3. 禁用烟雾效果:绘制场景中烟雾效果会消失。
  4. 禁用Z缓存:Z坐标判断深度失效,导致被挡住的物体会出现在面前。
  5. 修改材质ALPHA实现透明效果。

你可能感兴趣的:(读书笔记:游戏安全防外挂)