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

游戏安全防外挂

什么是外挂

  • 内存挂:释放核心功能模块,注入到游戏客户端。侵入性操作,修改游戏代码和数据,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实现透明效果。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,634评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,951评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,427评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,770评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,835评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,799评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,768评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,544评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,979评论 1 308
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,271评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,427评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,121评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,756评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,375评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,579评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,410评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,315评论 2 352

推荐阅读更多精彩内容

  • 一、温故而知新 1. 内存不够怎么办 内存简单分配策略的问题地址空间不隔离内存使用效率低程序运行的地址不确定 关于...
    SeanCST阅读 7,798评论 0 27
  • APK加固,Android开发,APP保护,游戏反外挂,应用安全加固 摘要:兴起的手游市场背后隐藏着严峻外挂问题,...
    御安全_李大师阅读 619评论 0 1
  • 转自长亭知乎专栏,实习时小姐姐的约稿,已经不在那边了所以版权不归我哈 笔者一直自认玩过不少游戏,无奈水平太菜,日常...
    hyrathon阅读 1,619评论 0 0
  • 最近一直在思考人际关系,觉得自己是那种平和的人,不会跟谁莫名其妙的不和。确实,我这大专两年多来跟班上同学也相处的非...
    王者鲁夫阅读 369评论 1 0
  • 初冬的午后,又一次打开音乐,陈奕迅在《十年》里唱到:“直到和你做了多年朋友,才明白我的眼泪,不是为你而流也...
    定西北阅读 365评论 0 2