浅谈CTF中的unity游戏逆向
字数 1516 2025-08-07 08:22:23

Unity游戏逆向分析技术详解

一、前言

Unity游戏逆向在CTF比赛中越来越常见,主要分为两类:

  1. DLL类型游戏(基于Mono)
  2. libil2cpp类型游戏(基于IL2CPP)

二、必备工具

1. 安卓APK逆向三件套

  • Apktool:解压/重新打包APK
  • dex2jar:将dex转换为jar
  • jd-gui:查看dex文件逻辑

2. DLL文件逆向工具

  • dnSpy:查看和修改DLL程序逻辑
  • ILDASM:反编译DLL生成IL文件
  • ilasm:重新编译IL文件为DLL

三、Unity技术背景

1. Mono与IL2CPP

  • Mono:早期Unity使用的跨平台.NET实现,核心代码在Assembly-CSharp.dll中
  • IL2CPP:Unity为提高安全性引入的技术,将C#编译为C++,生成libil2cpp.so和global-metadata.dat

2. 中间语言(IL)

  • 类似面向对象的汇编语言
  • 可读性较高,易于逆向分析

四、DLL类型Unity逆向

1. 基本流程

  1. 解压APK获取Assembly-CSharp.dll
  2. 使用dnSpy分析关键逻辑
  3. 修改DLL并重新打包

2. 典型案例分析

案例1:[BJDCTF2020]BJD hamburger competition

  • 关键点:
    • 在ButtonSpawnFruit类中找到Spawn方法
    • 分析secret变量的处理逻辑
    • SHA1和MD5双重加密验证

案例2:[2019红帽杯]Snake

  • 关键点:
    • 发现外部导入的Interface.dll
    • 使用IDA分析C++编写的DLL
    • 编写爆破程序测试GameObject函数

案例3:[RoarCTF2019]TankGame

  • 关键点:
    • 分析WinGame方法中的条件判断
    • 理解MapState数组结构
    • 编写Python脚本暴力破解

五、IL2CPP类型Unity逆向

1. 基本流程

  1. 获取libil2cpp.so和global-metadata.dat
  2. 使用IL2CPPDumper提取类和方法信息
  3. 使用IDA进行深入分析

2. 典型案例分析

案例1:[MRCTF2021]EzGame

  • 关键点:
    • 使用CE修改游戏数据
    • 分析EatTokenUpdateKey方法
    • 逆向计算8字节key的生成算法

案例2:[Nu1LCTF2018]baby unity3d

  • 关键点:
    • 使用Riru框架dump解密后的metadata
    • 分析CheckFlag函数
    • 使用Frida进行Hook获取AES密钥

六、Frida Hook技术

1. 环境搭建

  1. 安装Python客户端:pip install frida frida-tools
  2. 下载对应架构的frida-server到Android设备

2. Hook技术要点

  • 有导出函数:通过函数名定位
  • 无导出函数:通过特征字符串定位

3. 典型Hook脚本

Java.perform(function(){
    var soAdrr = Module.findBaseAddress("libil2cpp.so");
    var ptrCheckFlag = soAdrr.add(0x518a24);
    Interceptor.attach(ptrCheckFlag,{
        onEnter: function(args){
            console.log(hexdump(args[1]));
        },
        onLeave: function(retval){
            retval.replace(1); // 修改返回值
        }
    })
})

七、进阶技巧

  1. DLL注入:修改游戏运行时行为
  2. 内存修改:使用Cheat Engine定位关键数据
  3. 算法逆向:分析加密/校验逻辑
  4. 条件爆破:针对复杂条件编写自动化脚本

八、参考资源

  1. Unity官方文档
  2. IL2CPP逆向工具链(GitHub)
  3. Frida官方文档
  4. CTF比赛Writeup合集

九、总结

Unity游戏逆向技术要点:

  1. 快速定位关键代码(DLL或so)
  2. 理解游戏逻辑与逆向条件的关联
  3. 掌握静态分析与动态调试的结合
  4. 熟练使用各类逆向工具链
  5. 具备算法分析和脚本编写能力

通过系统学习和实践,可以逐步掌握Unity游戏逆向的各种技巧,在CTF比赛和实际安全研究中取得成果。

Unity游戏逆向分析技术详解 一、前言 Unity游戏逆向在CTF比赛中越来越常见,主要分为两类: DLL类型游戏(基于Mono) libil2cpp类型游戏(基于IL2CPP) 二、必备工具 1. 安卓APK逆向三件套 Apktool :解压/重新打包APK dex2jar :将dex转换为jar jd-gui :查看dex文件逻辑 2. DLL文件逆向工具 dnSpy :查看和修改DLL程序逻辑 ILDASM :反编译DLL生成IL文件 ilasm :重新编译IL文件为DLL 三、Unity技术背景 1. Mono与IL2CPP Mono :早期Unity使用的跨平台.NET实现,核心代码在Assembly-CSharp.dll中 IL2CPP :Unity为提高安全性引入的技术,将C#编译为C++,生成libil2cpp.so和global-metadata.dat 2. 中间语言(IL) 类似面向对象的汇编语言 可读性较高,易于逆向分析 四、DLL类型Unity逆向 1. 基本流程 解压APK获取Assembly-CSharp.dll 使用dnSpy分析关键逻辑 修改DLL并重新打包 2. 典型案例分析 案例1:[ BJDCTF2020 ]BJD hamburger competition 关键点: 在ButtonSpawnFruit类中找到Spawn方法 分析secret变量的处理逻辑 SHA1和MD5双重加密验证 案例2:[ 2019红帽杯 ]Snake 关键点: 发现外部导入的Interface.dll 使用IDA分析C++编写的DLL 编写爆破程序测试GameObject函数 案例3:[ RoarCTF2019 ]TankGame 关键点: 分析WinGame方法中的条件判断 理解MapState数组结构 编写Python脚本暴力破解 五、IL2CPP类型Unity逆向 1. 基本流程 获取libil2cpp.so和global-metadata.dat 使用IL2CPPDumper提取类和方法信息 使用IDA进行深入分析 2. 典型案例分析 案例1:[ MRCTF2021 ]EzGame 关键点: 使用CE修改游戏数据 分析EatTokenUpdateKey方法 逆向计算8字节key的生成算法 案例2:[ Nu1LCTF2018 ]baby unity3d 关键点: 使用Riru框架dump解密后的metadata 分析CheckFlag函数 使用Frida进行Hook获取AES密钥 六、Frida Hook技术 1. 环境搭建 安装Python客户端: pip install frida frida-tools 下载对应架构的frida-server到Android设备 2. Hook技术要点 有导出函数 :通过函数名定位 无导出函数 :通过特征字符串定位 3. 典型Hook脚本 七、进阶技巧 DLL注入 :修改游戏运行时行为 内存修改 :使用Cheat Engine定位关键数据 算法逆向 :分析加密/校验逻辑 条件爆破 :针对复杂条件编写自动化脚本 八、参考资源 Unity官方文档 IL2CPP逆向工具链(GitHub) Frida官方文档 CTF比赛Writeup合集 九、总结 Unity游戏逆向技术要点: 快速定位关键代码(DLL或so) 理解游戏逻辑与逆向条件的关联 掌握静态分析与动态调试的结合 熟练使用各类逆向工具链 具备算法分析和脚本编写能力 通过系统学习和实践,可以逐步掌握Unity游戏逆向的各种技巧,在CTF比赛和实际安全研究中取得成果。