喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于24小时内删除。
喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于24小时内删除。
喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于24小时内删除。
重要的事情说三遍
前言
游戏是Unity游戏,但是用了il2cpp,非mono编译,只看GameAssembly.dll,dnspy可以pass掉了。
为了更好的分析游戏的逻辑,用到以下工具:
IDA Pro
Il2CppDumper
CheatEngine
先用Il2CppDumper 把游戏符号Dump出来,接着IDA配合CE调试分析。
一、配置逆向环境
1、IL2CppDumper
- 添加到环境变量
- 将GameAssembly.dll、global-metadata.dat单独放到一个文件夹(游戏根目录自己找)
- cmd调用,下面是命令格式
Il2CppDumper GameAssembly.dll global-metadata.dat [要dump的文件夹]
- 最终结果就是拿到下面这个目录
Wulin-Dump:.
│ dump.cs
│ il2cpp.h
│ script.json
│ stringliteral.json
└─DummyDll
2、IDA
- 先把GameAssembly.dll分析完(大概九万多个函数,半小时左右)
- 安装IDAPython(IDA7.0及以上自带,吾爱有现成的,记得要添加环境变量 PYTHONPATH)
- IDA左上角File ->Script File… ->Il2CppDumper 目录下的ida_with_struct.py,后面依次选择之前dump出来的script.json和il2cpp.h,等待脚本执行完成,中间可能会有警告和报错,直接无视
- 开始分析,符号都已经加载好了,只不过从原来的CSharp变成了cpp,需要一定逆向功底
3、CE
- CE自带mono分析,菜单上的Mono就是,可以打开.Net info搜索相关方法调试
二、开始逆向
1、资料
逆向之前,我们要做好充分的准备,想要入手,首先要知道Steam相关的SDK是怎么对接的,因为这是个Unity游戏,所以直接搜关键Steamwork.Net,可以参考以下文章。
[使用Steamwork.Net 接入Steam一点心得](https://zhuanlan.zhihu.com/p/523483071)
[steam游戏上架流程二:steamworks SDK API steamworks.net 对接 unity](https://blog.csdn.net/qq_42672770/article/details/104444771)
2、逆向
了解之后,知道游戏启动后会先对环境进行一些检查,并且初始化SteamManager,然后接下来会调用SteamAPI.Init()来初始化,这是个关键方法,我们从这里入手。
这边我们没有必要去逆向steam_api64.dll,直接往上找
这里看到有两个,只有第一个会执行,
直接在ShitimuManager__Awake下断
打开游戏,断下一直单步,发现在ShitimuManager__get_Instance里面有调用,接着下断,重启游戏,断下后回溯到了游戏主要逻辑部分,往下看,发现有个判断,如果SteamApi初始化失败则UnityEngine_Application__Quit,直接nop,重启游戏。PS:这块结合IDA看会比较清晰
结果发现游戏倒是不退出了,但是相关数据不正常,并且无法读取存档,再回过头来看这个函数,发现有个关键方法 WuLin_ThirdPlatformManager__OnLogin,正常从steam打开游戏,nop掉这个call,复现了之前的情况,确定就是这个call的问题。
调试可以拿到自己的steamid,不过貌似随便填一个都可以,为了保险还是直接把steamid填上
现在打开游戏,正常存档游玩。
有空还会发相关逆向教程,比如添加物品、各种修改功能…文章来源:https://www.toymoban.com/news/detail-779230.html
By x1a0reN.文章来源地址https://www.toymoban.com/news/detail-779230.html
到了这里,关于[IL2CPP逆向] 某立志传 - 脱离Steam运行的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!