Ghost In The Game Android MMO Game Security 束骏亮 -LoCCS 上海交通大学
introduction 为什么要研究 MMO 类游戏的安全? 频繁的在线互动 对于公平性有着很强的需求 庞大的用户群体 容易成为不法分子的攻击目标 强大的盈利能力 游戏开发者更加关心其安全性 运行环境多样且不可控 对防守方提出了更高的技术要求 代码架构复杂 在分析时面临更多的困难 ( 也更加有趣 ) Massively Multiplayer Online
PPT 模板 :www.1ppt.com/moban/ PPT 素材 :www.1ppt.com/sucai/ PPT 背景 :www.1ppt.com/beijing/ PPT 图表 :www.1ppt.com/tubiao/ PPT 下载 :www.1ppt.com/xiazai/ PPT 教程 : www.1ppt.com/powerpoint/ 资料下载 :www.1ppt.com/ziliao/ 范文下载 :www.1ppt.com/fanwen/ 试卷下载 :www.1ppt.com/shiti/ 教案下载 :www.1ppt.com/jiaoan/ PPT 论坛 :www.1ppt.cn PPT 课件 :www.1ppt.com/kejian/ 语文课件 :www.1ppt.com/kejian/yuwen/ 数学课件 :www.1ppt.com/kejian/shuxue/ 英语课件 :www.1ppt.com/kejian/yingyu/ 美术课件 :www.1ppt.com/kejian/meishu/ 科学课件 :www.1ppt.com/kejian/kexue/ 物理课件 :www.1ppt.com/kejian/wuli/ 化学课件 :www.1ppt.com/kejian/huaxue/ 生物课件 :www.1ppt.com/kejian/shengwu/ 地理课件 :www.1ppt.com/kejian/dili/ 历史课件 :www.1ppt.com/kejian/lishi/ 1 2 3 4 Android 平台游戏类应用概况 MMO 类游戏安全分析技术 MMO 类游戏常见威胁 MMO 类游戏常见保护技术
Android 平台游戏类应用概况
Android 平台游戏类应用概况 1 2 3 4 387 亿美元 2016 年, 全球移动平台游戏营收 387 亿美元, 其中近 1/4 来自中国市场 3 亿美元 2017 年第一季度,MIXI 旗下移动游戏 怪物弹珠 营收 3 亿美元, 坊间传闻腾讯旗下 王者荣耀 营收 120 亿人民币 3.38 万家 2016 年底, 国内的移动游戏内容提供商达到 3.38 万家 11.3 亿台 2016 年底, 国内移动游戏活跃设备数达到了 11.3 亿台
Android 平台游戏类 (MMO) 应用概况 来源 国外以 Google Play 为主, 国内以 TAPTAP 以及各大应用市场为主 形式 形式上仍然是传统的 Android 应用程序, 以 APK 的形式在网络上传播 差异 和传统的 Android 应用程序相比, 主要基于主流的第三方游戏引擎, 以非 JAVA 的语言编写 ; 应用体积巨大 ; 在本地保存大量的图片 音乐 视频等素材 特点 主要以 Unity3D 和 Cocos2D 两个主流的第三方游戏引擎为主, 根据所使用引擎的不同, 在代码和资源管理上呈现不同的结构 特点
MMO 类游戏安全分析技术
MMO 类游戏安全分析技术 素材 文字 图片 音频 视频等构成游戏主要感官冲击的元素, 以各自不同的格式保存在设备上 逻辑 用于决定游戏行为的规则, 用于决定游戏的走向 播放和管理各种素材, 主要以代码的方式存在, 具体格式因引擎不同而不 同 引擎 游戏的心脏, 为上层的逻辑代码提供各种接口, 决定了一个游戏在空间上的结构以及各个组件之间的关系 在 Android 平台上, 一般以 native lib 的形式存在, 游戏开发者使用其提供的各类接 口完成游戏的开发 对于 MMO 类游戏的分析, 我们一般围绕着引擎展开, 以分析游戏的逻辑代码为主, 辅以对素材的分析
MMO 类游戏安全分析技术 - 引擎 Unity3D 当前移动游戏引擎领域当之无愧的领跑者 Cocos2D 2D 游戏引擎的翘楚, 在国内的市场占有量要高于 Unity3D 自定义引擎 部分移动游戏大厂会有自定义的游戏引擎, 比如网易的 neox 对于这些引擎的分析有助于我们分析同一个厂商开发的其他游 戏
MMO 类游戏安全分析技术 - 程序分析 如何快速区分不同的游戏引擎 查看 AndroidManifest.xml 文件 一般来说,AndroidManifest.xml 中会包含和游戏 引擎相关的权限和字符串 也可以通过爆搜整个 apk 内的文件, 来寻找 cocos2dx 和 unity 等关键字符串 寻找特定的 native lib 文件 通过 Google 等搜索引擎搜索相关的新闻 信息
MMO 类游戏安全分析技术 - 程序分析 如何快速区分不同的游戏引擎 查看 AndroidManifest.xml 文件 寻找特定的 native lib 文件 不同的游戏引擎一般都会带有不同的 native lib, 在 apk 中的 lib 目录下能找到 基于 cocos2d 开发的游 戏一般会包含 cocos 和 lua 等字眼, 基于 unity3d 开发的游戏一般会有名为 libunity.so 的 native lib 通过 Google 等搜索引擎搜索相关的新闻 信息
MMO 类游戏安全分析技术 - 程序分析 如何快速区分不同的游戏引擎 查看 AndroidManifest.xml 文件 寻找特定的 native lib 文件 通过 Google 等搜索引擎搜索相关的新闻 信息
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x Cocos2d-x 引擎特点 开源 出色的 2D 支持, 在国内被大规模使用 支持 Lua 和 Javascript 两种脚本语言, 目前以 Lua 为主 ( 得益于 Lua 优秀的 C 语言交互接口和 更加小巧的解释器 )
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 寻找逻辑脚本 目前主流的基于 Cocos2d-x 开发的游戏都使用了 Lua 作为脚本语言, 和游戏主体相关的逻辑一般都以 Lua 为主体框架 定位 Lua 脚本是所有分析工作的第一步 定位 Lua 解释器是定位 Lua 脚本的第一步
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 定位 Lua 解释器 以 native lib 形式存在, 一般和引擎在一个 lib 里 存放在 lib/ 文件夹下 比较庞大 名字有特点
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 定位 Lua 解释器 在 binary 中寻找特定的接口字符串 lua cocos2d cocos2dx 等等
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 定位 Lua 脚本 由于 Lua 的开源特性,Lua 解释器对 Lua 脚本的加载过程存在定制化差异 但是都会使用到一些固有的 API,API 列表可以 在 Lua 源码的 src/lapi.c 中找到 寻找特定的接口调用, 定位 Lua 脚本的加载过程 lua_load
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 逆向还原加载流程 定位 Lua 脚本的位置
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 逆向还原加载流程 判断是否存在对 Lua 脚本的处理
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 逆向还原加载流程 分析 Lua 脚本的加密 / 处理算法 还原 Lua 脚本
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 分析 Lua 脚本 判断 Lua 脚本的版本 ( 不同版本的 Lua 脚本, magic number 不同 ) 判断是否是 luajit 寻找合适的反编译工具
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 分析 Lua 脚本 luadec unluac 等等 luajit 目前没有很好用的反编译工具, 可以使用 luajit-decomp ljd 等工具协助分析
MMO 类游戏安全分析技术 - 程序分析 -Cocos2d-x 分析 Lua 脚本 考验分析技术的时候到了 脚本语言相对容易分析 选择合适的字符串 资源文件帮助定位关键逻 辑 理解逻辑 发现问题
MMO 类游戏安全分析技术 - 程序分析 -Unity3D Unity3D 引擎特点 受限开源 全面 强大 专业的综合性引擎, 不止应用在游戏开发领域 目前世界范围内移动平台的主流游戏引擎 支持 C# Javascript Lua 等多种脚本语言, 以 C# 为主
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析 C# 脚本 由于 Unity3D 的受限开源特性, 导致绝大部分基于 Unity3D 开发的游戏具有较为一致的代码结构和文件结构 名为 libunity.so 的 native lib 是引擎的主体部分
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 一般来说, 基于 Unity3D 开发的游戏所使用的逻辑脚本会有三类呈现方式 : C#&JS Lua IL2CPP
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -C#&JS 作为最常见的类型, 使用 C# 或者 JS 作为脚本语言的 Unity3D 游戏, 其 C# 相关代码位于 assets/bin/data/managed/ 目录下
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -C#&JS Assembly-CSharp.dll 是 C# 脚本编译以后生成的文件 Assembly-UnityScript.dll 是 Javascript 脚本编译以后生成的文件
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -C#&JS 对于 dll 文件的分析, 有很多成熟的工具可以使用 ILSpy( 传统的 C# 反编译工具, 提供可阅读的 C# 代码 ).NET Reflector( 比 ILSpy 好用一些, 能够部分修补被篡改过的文件头 ) Reflexil( 提供修改并重编译 IL 功能的插件 ) ilasm & ildasm(il 的逆向和重编译工具 )
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -C#&JS 一般来说, 不同于 Cocos2D, Unity3D 所使用的脚本文件是没有经过加壳的 但是, 会有开发者对脚本进行一定程度的混淆
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -C#&JS 需要先去除混淆 de4dot
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -Lua Unity3D 中的 Lua 脚本一般用来实现热更新, 常见的有 slua, ulua,nlua 等插件 分析方法和 Cocos2D 类似, 解释器为 libulua.so
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 将 C# 编译为 native code 的技术 C# -> IL -> CPP -> native code 编译后的代码为 libil2cpp.so 一定程度上提升了安全性
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 大部分的符号信息被隐藏了 Il2cpp 的代码在使用的时候存在一定的模式 符号信息保存在 assets\bin\data\managed\metadata\globalmetadata.dat 中 使用 il2cppdumper 工具帮助还原符号信息
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 使用 il2cppdumper 工具帮助还原符号信息 定位注册函数 提取参数 r0 和 r1 在使用 il2cppdumper 时输入 r0 和 r1 完成修复 分析
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 使用 il2cppdumper 工具帮助还原符号信息 定位注册函数 提取参数 r0 和 r1 在使用 il2cppdumper 时输入 r0 和 r1 完成修复 分析
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 使用 il2cppdumper 工具帮助还原符号信息 定位注册函数 提取参数 r0 和 r1 在使用 il2cppdumper 时输入 r0 或 r1 完成修复 分析
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 使用 il2cppdumper 工具帮助还原符号信息 定位注册函数 提取参数 r0 和 r1 在使用 il2cppdumper 时输入 r0 或 r1 完成修复 分析
MMO 类游戏安全分析技术 - 程序分析 -Unity3D 分析逻辑脚本 -IL2CPP 使用 il2cppdumper 工具帮助还原符号信息 定位注册函数 提取参数 r0 和 r1 在使用 il2cppdumper 时输入 r0 或 r1 完成修复 分析
MMO 类游戏安全分析技术 - 程序分析 - 自定义引擎案例 判断引擎类型 历史经验 搜索引擎 查看一些配置文件 符号信息 逆向 Java 层逻辑
MMO 类游戏安全分析技术 - 程序分析 - 自定义引擎 判断引擎类型 查看 /proc/<pid>/maps 查看 /proc/<pid>/fd/* 寻找关键文件
MMO 类游戏安全分析技术 - 程序分析 - 自定义引擎 分析逻辑脚本 - 变种 python 定位脚本文件 assets/script.npk 分析加载脚本逻辑 解密脚本
MMO 类游戏安全分析技术 - 程序分析 - 自定义引擎 分析逻辑脚本 - 变种 python 分析脚本 使用了指令集置换技术修改了 python 引擎 逆向 python 引擎 PyEval_EvalFrameEx, 找到修改过的 opcode 表 对 pyc 进行 bytecode 分析, 找到 opcode 对应关系 重新编译开源的 python 反编译器 反编译 pyc 分析
MMO 类游戏安全分析技术 - 程序分析 - 动态调试 动态调试 和调试普通的 Android 应用程序类似 以调试 native lib 为主 Lua 等脚本的调试较为困难 有些游戏会有反调试的措施
MMO 类游戏安全分析技术 - 网络流量分析网络流量分析 一般来说,MMO 游戏中存在多种类型的网络通信 第三方 SDK 公告信息等, 以 HTTP/HTTPS 为主, 使用 Burpsuite 分析 与游戏内容相关的流量, 以 socket 为主
MMO 类游戏安全分析技术 - 网络流量分析网络流量分析 一般来说,MMO 游戏中存在多种类型的网络通信 第三方 SDK 公告信息等, 以 HTTP/HTTPS 为主, 使用 Burpsuite 分析 与游戏内容相关的流量, 以 socket 为主, 使用 wireshark 风声等工具
MMO 类游戏安全分析技术 - 网络流量分析网络流量分析 一般来说,MMO 游戏中存在多种类型的网络通信 第三方 SDK 公告信息等, 以 HTTP/HTTPS 为主, 使用 Burpsuite 分析 与游戏内容相关的流量, 以 socket 为主, 使用 wireshark 风声等工 Socket 流量往往是经过加密 / 编 码 / 变换的, 对这类流量的分析 依赖于对逻辑的分析
MMO 类游戏常见威胁 49
MMO 类游戏常见威胁 客户端侧 素材窃取 逻辑篡改 功能辅助 服务器侧 协议劫持
MMO 类游戏常见威胁 - 素材窃取 攻击目标 : 窃取 APK 内 / 保存在磁盘上的图片 动画 音乐等素材 影响 : 部分素材经过专业人士设计, 价值不菲同时存在版权归属, 被窃取后会给开发者带 来经济上的损失 ; 同时, 可能对游戏未来的走向产生剧透
MMO 类游戏常见威胁 - 素材窃取 常见的技术 资源解包 对于处理过的资源文件, 基于对游戏逻辑的逆向, 定位并还原素材文件 动态调试, 从内存中提取素材数据
MMO 类游戏常见威胁 - 逻辑篡改 攻击目标 : 游戏运行时的本地运算逻辑影响 : 获取原本无法获得的道具 金钱 属性 功能, 达到传统意义上的作弊, 影响游戏 平衡
MMO 类游戏常见威胁 - 逻辑篡改 常见技术 内存修改 ( 八门神器 GameGuardian 等 ) 对目标进程进行 ptrace, 然后直接操作内存 ( 需 root, 容易检测 ) 操作 /proc/<pid>/mem 文件 ( 需 root, 较难检测 ) 定制运行环境, 修改虚拟机 系统库或内核 ( 很难检测 )
MMO 类游戏常见威胁 - 逻辑篡改 常见技术 代码修改 ( 各类游戏的修改版 ) 对游戏的脚本进行逆向分析, 修改特定位置代码后对原文件进行替换 / 重打包 ( 能够大规模的传播 ) 动态 hook( 需 root, 难以工具化 )
MMO 类游戏常见威胁 - 逻辑篡改 常见技术 本地文件修改 类似代码修改, 对一些数值 / 配置文件的位置 格式进行逆向, 然后篡改
MMO 类游戏常见威胁 - 功能辅助 攻击目标 : 替代玩家完成某些不可能完成的操作 ( 从人类的角度 ) 重复性的操作 影响 : 极大的增强玩家某些方面的游戏实力或降低玩家某些方面的游戏难度, 给游戏平衡 性带来影响
MMO 类游戏常见威胁 - 功能辅助 常见技术 能力增强 ( 自动瞄准 透视等功能 ) 对内存中某些特定数据结构进行读取, 转化为可读信息后反馈给游戏操作者或直 接操作游戏 对屏幕图像 声音等数据进行捕捉, 从中提取额外的信息 ( 较难实现 )
MMO 类游戏常见威胁 - 功能辅助 常见技术 挂机脚本 ( 替代玩家进行游戏操作 ) 基于对游戏逻辑的逆向分析, 从内存 网络流量 屏幕图像中读取当前的游戏状 态 通过系统接口替代玩家做出操作 adb shell input Monkey Accessibility 辅助功能 调用内存中的函数 发送网络包
MMO 类游戏常见威胁 - 协议劫持 攻击目标 : 劫持游戏客户端和服务器之间的通信信道影响 : 客户端和服务器之间可能会传递和玩家相关的敏感数据 ( 账号信息 聊天信息等 ), 被窃取后会危害玩家账号安全和隐私安全 ; 伪造通信数据可以达到欺骗服务器的目的, 从而 对服务器的数据和运算逻辑产生影响, 达到作弊的目的
MMO 类游戏常见威胁 - 协议劫持 常见技术 Burpsuite 和 wireshark 抓包分析 ( 部分游戏直接明文传输数据 ) 直接重放 逆向游戏代码中和网络通信相关的部分, 分析网络流量格式以及功能 对截获的网络流量进行解密 / 篡改或者脱离游戏直接和服务器通信 动态调试 /hook 游戏代码, 使用游戏内接口伪造通信包
MMO 类游戏常见保护技术
MMO 类游戏常见保护技术 攻击方防守方 身份为设备的拥有者 拥有所有设备资源, 可以进行任意操作 所有的权限 查看 操作其他进程 虚拟机 内核 外接设备等 身份为应用程序的开发者 拥有有限的资源, 操作受限 仅能够操作自身的进程 获取其他进程的部分信息, 无法操作 有限的部署 使用方式 可以有复杂的部署 使用方式 需要考虑对游戏本身的影响 不计成本
MMO 类游戏常见保护技术 - 资源加密 目标 : 保护游戏相关的本地资源不被窃取 逆向 篡改 常见技术 对需要保护的文件进行加密, 同时修改引擎中相关加载逻辑, 实现强度合理的加密 Cocos2d 以及自定义引擎可以直接修改 Unity3D 可以通过 patch libuntiy.so 的方式实现 (patchelf 等工具 ) 基于白盒的高强度加密算法 混淆代码 修改文件头以对抗常见的逆向工具 对引擎的相关逻辑进行混淆, 增加通过动态调试直接获取明文数据的难度 减少明文数据在内存中存在的时间
MMO 类游戏常见保护技术 - 代码完整性保护 目标 : 保护游戏本地运算逻辑不被篡改常见技术 在文件加密的基础上, 对关键的代码文件和数值文件进行完整性校验 对内存中的关键代码块 函数入口进行完整性校验 进行重打包检测 apk 完整性 签名 特征值 调试 hook 检测
MMO 类游戏常见保护技术 - 抗内存修改 目标 : 保护游戏运行时内存数据不被窃取 篡改 常见技术 ptrace 检测 使用 inotify 等工具监控 /proc/<pid>/mem 对内存中的关键数据采用加密存放和运算
MMO 类游戏常见保护技术 - 运行环境检测 目标 : 确保游戏运行时没有修改器等外挂在运行 常见技术 受限于权限, 一般采用黑名单机制 常见外挂的特征 ( 包名 进程名 签名 代码等 ) 常见的 hook 工具特征 (xposed adbi 等 )
MMO 类游戏常见保护技术 - 服务器同步运算 目标 : 在服务器端发现已经发生的作弊行为常见技术 将尽可能多的运算放在服务器进行 在游戏运行时收集用户的操作数据和游戏的运行数据, 上传至服务器进行校验
MMO 类游戏常见保护技术 - 安全网络通信 目标 : 保证客户端与服务器之间的网络通信数据不被窃取 篡改 常见技术 使用安全的网络协议并正确部署 (https) 对基于 socket 的通信流量进行加密 / 校验处理 使用安全的加密算法 (AES-CBC 等 ) 使用安全的哈希算法 (SHA256 等 ) 使用安全的密钥交换协议来协商密钥 (RSA ECDSA 等 )
MMO 类游戏常见保护技术 Last But Not Least 分析待保护游戏的整体架构 ( 代码 服务器 游戏玩法 ) 定位需要保护的元素 制定保护方案 多种技术协同 即时更新各类保护方案 ( 尤其是存在被破解可能性的 ) 跟进新出现的外挂 作弊技术 尽可能收集用户游戏时的各项数据
MMO 类游戏常见保护技术 Last But Not Least 分析待保护游戏的整体架构 ( 代码 服务器 游戏玩法 ) 定位需要保护的元素 制定保护方案 多种技术协同 即时更新各类保护方案 ( 尤其是存在被破解可能性的 ) 跟进新出现的外挂 作弊技术 尽可能收集用户游戏时的各项数据
特别鸣谢 张奇张倬简鲲鹏刘穆清
THANK YOU