快来注册~
您需要 登录 才可以下载或查看,没有账号?注册账号
x
在Unity安卓游戏的逆向分析中,加密的资源文件、隐藏的核心DLL以及无法识别的资源包版本,都是常见的拦路问题。本次就以某款Unity安卓游戏(包名com.hpw.fishapp)为例,详细记录逆向过程中获取资源文件与核心代码的全步骤,从工具准备到问题突破,拆解每一个关键环节的操作思路与解决方法,为同类游戏的逆向分析提供参考。
一、逆向准备:核心工具清单本次逆向操作围绕Unity游戏的特性,选用多款针对性工具,涵盖DLL导出、反编译、动态调试、静态分析与资源提取,工具清单如下:
Frida:动态插桩调试工具,用于Hook关键函数、追踪代码调用流程;
IDA:专业静态反编译工具,分析底层汇编代码,定位解密逻辑;
AssetStudioGUI:Unity资源提取神器,用于解析AB包、提取图片/脚本/模型等资源;
Il2CppDumper:Il2Cpp架构下的DLL导出工具,从游戏中提取核心动态链接库;
dnSpy:C#反编译工具,查看、分析DLL中的函数与代码逻辑。
二、初步分析:游戏加密特征排查
拿到目标游戏APK后,首先进行解压分析,快速定位加密关键点,发现两处核心加密特征:
游戏内所有资源文件的文件名均经过MD5加密,无明文标识,无法直接判断文件用途;
核心资源AB包被做了字节填充处理,头部插入了不固定字符,且常规方式无法识别出Unity版本号,直接导致AssetStudioGUI无法解析。
以上特征说明游戏做了双层加密防护,既对文件标识做了哈希加密,又对资源包本身做了字节篡改,常规直接提取的方式完全失效,需要先破解代码逻辑,再针对性解密资源。
三、DLL提取与分析:定位核心加载函数
首先使用Il2CppDumper对游戏进行DLL导出,发现导出结果中缺少Unity游戏常规的Assembly-CSharp.dll(核心业务逻辑DLL),初步判断该DLL被动态加载且做了加密处理;
将Il2CppDumper导出的所有DLL导入dnSpy进行函数排查,在AOTMainGame.dll中发现了loadDLL函数,结合经验判断,该函数即为加密Assembly-CSharp.dll的动态加载入口。
四、解密逻辑定位:IDA+Frida联合突破
找到加载入口后,核心目标转为定位DLL的解密逻辑,此过程中先后尝试静态分析与动态调试,最终通过FridaHook实现突破:
IDA静态分析遇阻:将游戏程序导入IDA,跟踪loadDLL函数的调用流程,但未在代码中找到任何与解密相关的逻辑,一度陷入瓶颈;
Frida动态追踪流程:改用Frida对loadDLL函数进行Hook,追踪其调用后续,发现该函数执行后会立即调用StartGame方法;
IDA二次定位解密函数:根据Frida的追踪结果,在IDA中跳转到StartGame方法,成功定位到解密相关的核心函数;
Hook验证解密函数:初步发现疑似解密的Encrypt函数,但Frida Hook后发现该函数并未被调用;再次回到dnSpy,查找该函数所属类,对类内的Decrypt函数进行Hook,验证发现该函数为实际的解密函数,且能正常被调用。
五、核心DLL导出:Frida脚本实现明文提取定位到真实的Decrypt解密函数后,编写针对性的Frida脚本,对该函数的执行过程进行Hook,拦截解密后的明文数据,将加密的Assembly-CSharp.dll完整导出到本地。
将导出后的Assembly-CSharp.dll再次导入dnSpy,此时可看到该DLL内的所有代码均为明文状态,游戏的核心C#业务逻辑全部解锁。
六、AB包解密:定位偏移量实现字节还原
核心代码解锁后,开始针对AB包的头部字节填充问题进行解密,步骤如下:
在dnSpy中对明文的Assembly-CSharp.dll进行代码检索,查找与assetbundle加载相关的逻辑,最终定位到getoffset方法;
分析该方法的代码逻辑,确定其返回值即为AB包头部被插入的字节偏移量;
根据偏移量编写解密程序,对所有加密AB包进行头部字节剔除,还原原始AB包结构。
解密完成后,打开任意AB包验证,可看到文件头部已正常显示UnityFS标识,说明AB包的结构还原成功。
七、版本号修复:魔改AssetStudioGUI源码解决解析问题AB包结构还原后,又遇到新问题:所有AB包的版本号均被篡改为0.0.0,导致AssetStudioGUI无法识别并加载,对此采用源码魔改的方式暴力解决:
从GitHub上下载AssetStudio的原始源码;
在源码中找到CheckStrippedVersion方法(版本号校验方法),将方法内的版本号校验值直接写死,跳过版本号的有效性验证;
重新编译AssetStudio源码,生成自定义的AssetStudioGUI可执行文件。
八、最终成果:资源与代码全量提取
使用魔改后的AssetStudioGUI加载解密后的AB包,此时游戏的所有资源均可正常解析,结合之前导出的明文DLL,本次逆向实现全量成果提取:
核心代码:明文的Assembly-CSharp.dll内的所有C#业务逻辑;
脚本文件:游戏内的所有Lua脚本;
资源文件:AB包内的图片、模型、音效、场景等全部Unity资源。
九、拓展:同类加密游戏的逆向思路在本次逆向过程中,有网友咨询另一款热血江湖手游(部分版本)的逆向问题,该游戏采用.pak资源包格式,且做了异或加密,核心加密点为global-metadata.data文件与.pak资源包,针对此类异或加密的Unity游戏,可直接编写异或解密脚本,对加密文件与资源包进行解密,解密后将资源包导入AssetStudioGUI即可实现资源提取,整体难度低于本次实操的游戏。
总结本次Unity安卓游戏的逆向,核心难点在于动态加载的加密DLL与字节篡改的AB包,通过Il2CppDumper导出基础DLL→dnSpy排查关键函数→Frida动态追踪调用流程→IDA定位解密逻辑→脚本解密还原文件→魔改工具突破版本校验的步骤,层层拆解加密防护,最终实现资源与代码的全量提取。
整个过程中,Frida的动态调试与IDA的静态分析形成互补,是突破Unity游戏加密的核心组合,而对工具源码的魔改则是解决特殊校验问题的实用技巧,这些思路与方法均可迁移到其他同类Unity安卓游戏的逆向分析中。
|
免责声明:
资源盒论坛发布的一切资源、模型和注册信息及软件的源码教程仅限用于学习和研究目的;
不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。
本站资源来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。
如果您喜欢该程序/源文件,请支持正版软件,购买/注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
若本站侵犯了您的权益请联系站长进行删除处理E-mail:190183740@qq.com;