游戏安全02:手游外挂简单分类和实现原理介绍

文章目录

    • 一、外挂分类
      • 1)辅助版(需要依赖客户端,不能独自生效),根据作用范围分为:
        • (1)专用插件:so、dylib
        • (2)通用工具:内存修改器、变速器、按键精灵、模拟器、抓包工具
      • 2)破解版:脱机挂、受损客户端
    • 二、外挂实现原理
      • 1)辅助版本外挂实现原理(基于游戏客户端动态修改游戏数据类型)
        • (1)专用插件
        • (2)通用工具
      • 2)破解版外挂实现原理(预先静态修改后的独立游戏客户端,可以分为:逆向分析游戏协议、对游戏客户端修改后实现的游戏破解版,可以根据修改后的客户端数据的不同分为逻辑代码和数据资源)
        • (1)逻辑代码
        • (2)数据资源

一、外挂分类

1)辅助版(需要依赖客户端,不能独自生效),根据作用范围分为:

(1)专用插件:so、dylib

  • 定义:
    因依据不同平台而不同,在Android下为so文件形式,在iOS下为dylib文件形式。
  • 举例:
    在安卓平台上盛行一时的叉叉助手和圈圈助手,在iOS上也出现过888辅助,针对多款热门手游注入不同的dylib模块来实现无敌、秒怪功能。
  • 特点:
    这类专用插件外挂的功能较为灵活,一般可随时开启或关闭

(2)通用工具:内存修改器、变速器、按键精灵、模拟器、抓包工具

1)内存修改器
2)变速器
3)按键精灵
4)模拟器
5)抓包工具

2)破解版:脱机挂、受损客户端

1)脱机挂:作者基于对游戏协议的分析,自行开发的一个游戏客户端。这类客户端通常用于多开刷副本,收益巨大,工作室对这类外挂的需求较大
2)受损客户端:外挂基于对正版客户端的修改实现的,一般是一类破解版外挂固定开启一类外挂功能,游戏过程中无法关闭

二、外挂实现原理

1)辅助版本外挂实现原理(基于游戏客户端动态修改游戏数据类型)

(1)专用插件

  • 定义
    属于定制类外挂,每个外挂只针对一款游戏
  • 实现概况
    利用注入技术将功能模块注入游戏进程空间中,并执行功能模块的入口函数。
  • 不同平台形式
    安卓:Zygote注入、直接ptrace注入技术
    IOS:利用Cydia框架注入dylib模块
  • 执行流程
    外挂功能模块在被注入游戏进程后,会执行Hook操作实现外挂功能。外挂作者需要你想分析游戏代码逻辑,找到一些游戏功能函数的地址,比如怪物扣血处理函数,然后在外挂功能模块中通过Hook操作来挂钩相应函数、改写参数或者通过调用逻辑(多次回调或者异步调用)
  • HOOK的解释
    在底层汇编,Hook操作可以理解为在特定的代码地址,增加跳转指令跳转到外挂作者的自定义函数中。(可以利用优秀的第三方库:例如substrate)
  • 总结
    因此专用插件可以很灵活的修改游戏代码逻辑,通过多次回调怪物的扣血函数实现秒怪,通过屏蔽玩家的扣血函数实现无敌

(2)通用工具

1)内存修改器
一、实现与专用插件类似:
注入一个通用功能模块到游戏进程中,根据本地socket接受操作(搜索修改),直接便利内存等方式实现
二、根据平台加载机制躯壳实现
例如在安卓平台下通过/proc/[pid]/maps可读写游戏的内存镜像
2)变速器

  • 定义
    变速器影响游戏的时间质量。游戏通常需要以帧为单位播放画面,在播放画面过程中计算两帧动画播放所需要的时间,游戏需要调用C库函数获系统时间函数以供计算每帧的更新。
  • 做法
    目前外网主流的游戏加速器针对不同的引起修改了不同的Libc.so的相关函数,例如gettimeofday\clock_time,修改法格式则是上面提到的HOOK实现,针对LIbc.so模块的导出函数可利用导入表HOOK的方式

3)按键精灵
安静精灵通常调用系统API来发送特定操作序列,模拟用户案件。这类外挂和系统的关联性极大,因为它的实现主要是通过相应系统的API发送操作模拟全局按键。在安卓上可通过instrumentation接口的sendPointerSync函数实现;也可以通过具备Root权限的驱动程序调用Runtime.getRuntime().exec()执行sendevent等命令
4)模拟器
(略)
5)抓包工具
网络包编辑器,一类实现方式是基于硬件,比如让网卡处于混乱模式,即可拦截数据包;另一类是通过Hook函数,针对send和recv类函数进行拦截,获得网络数据包

2)破解版外挂实现原理(预先静态修改后的独立游戏客户端,可以分为:逆向分析游戏协议、对游戏客户端修改后实现的游戏破解版,可以根据修改后的客户端数据的不同分为逻辑代码和数据资源)

(1)逻辑代码

  • 举例
    1)安卓平台下逻辑代码的修改,根据游戏引擎的不同,修改的内容也不同。常见的Cocos2D游戏,其逻辑代码保存在so文件中,可通过IDA等工具读取和修改ARM\Thumb汇编指令;Unity3D游戏的C#脚本代码则保存在/assets/bin/Data/Managed/Assembly-CSharp.dll中,也可通过ildasm等工具转成IL代码进行修改操作
    2)IOS平台下,代码都在APP的bin文件中,和安卓的so文件类型,只需要了解Thumb指令。同样,还有Lua等代码,根据游戏语言的不同其修改方式也不同。
    3)直接修改汇编指令,可改动的空间较小,一般的实现是修改跳转、参数赋值,比如死亡判断、通关判断、扣血函数修改等。IL、Lua等的修改则较为简单

(2)数据资源

  • 定义:
    数据资源包括除代码外的一切客户端资源,例如图片资源、配置资源、音乐资源等(一般破解版是为了纯粹美化资源,但是更多是靠修改资源文件是实现游戏逻辑修改,这类实现需要更多的逆向积累,例如哪些资源较为敏感可能导致外挂功能)
  • 提及常用的替换资源破解的实现方法:
    1)无脑替换:尝试删除资源文件或者替换成空的,甚至将同类型的资源文件重命名并覆盖。(例如某飞机游戏,删除子弹资源即可实现敌机无子弹的效果,某跑酷游戏将修改后的配置覆盖原始文件即可实现关卡难度降低的功能等)
    2)分析调试法:前期是通过静态法分析或动态调试,确认资源的作用和加密方式

你可能感兴趣的:(游戏开发专栏,windows,服务器,linux,c++)