[IL2CPP逆向] 某立志传 - 脱离Steam运行

喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于24小时内删除。
喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于24小时内删除。
喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于24小时内删除。
重要的事情说三遍

前言

游戏是Unity游戏,但是用了il2cpp,非mono编译,只看GameAssembly.dll,dnspy可以pass掉了。
为了更好的分析游戏的逻辑,用到以下工具:
IDA Pro
Il2CppDumper
CheatEngine

先用Il2CppDumper 把游戏符号Dump出来,接着IDA配合CE调试分析。

一、配置逆向环境

1、IL2CppDumper

  1. 添加到环境变量
  2. 将GameAssembly.dll、global-metadata.dat单独放到一个文件夹(游戏根目录自己找)
  3. cmd调用,下面是命令格式
Il2CppDumper GameAssembly.dll global-metadata.dat [要dump的文件夹]
  1. 最终结果就是拿到下面这个目录
Wulin-Dump:.
│  dump.cs
│  il2cpp.h
│  script.json
│  stringliteral.json
└─DummyDll

2、IDA

  1. 先把GameAssembly.dll分析完(大概九万多个函数,半小时左右)
  2. 安装IDAPython(IDA7.0及以上自带,吾爱有现成的,记得要添加环境变量 PYTHONPATH)
  3. IDA左上角File ->Script File… ->Il2CppDumper 目录下的ida_with_struct.py,后面依次选择之前dump出来的script.json和il2cpp.h,等待脚本执行完成,中间可能会有警告和报错,直接无视
  4. 开始分析,符号都已经加载好了,只不过从原来的CSharp变成了cpp,需要一定逆向功底

3、CE

  1. 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()来初始化,这是个关键方法,我们从这里入手。
SteamAPI.Init
这边我们没有必要去逆向steam_api64.dll,直接往上找
xrefs-to-steamapi.init
这里看到有两个,只有第一个会执行,
ShitimuManager__Awake

直接在ShitimuManager__Awake下断
打开游戏,断下一直单步,发现在ShitimuManager__get_Instance里面有调用,接着下断,重启游戏,断下后回溯到了游戏主要逻辑部分,往下看,发现有个判断,如果SteamApi初始化失败则UnityEngine_Application__Quit,直接nop,重启游戏。PS:这块结合IDA看会比较清晰
在这里插入图片描述

结果发现游戏倒是不退出了,但是相关数据不正常,并且无法读取存档,再回过头来看这个函数,发现有个关键方法 WuLin_ThirdPlatformManager__OnLogin,正常从steam打开游戏,nop掉这个call,复现了之前的情况,确定就是这个call的问题。
在这里插入图片描述

调试可以拿到自己的steamid,不过貌似随便填一个都可以,为了保险还是直接把steamid填上
在这里插入图片描述

现在打开游戏,正常存档游玩。
有空还会发相关逆向教程,比如添加物品、各种修改功能…

By x1a0reN.

猜你喜欢

转载自blog.csdn.net/BY_HEY/article/details/128997558
今日推荐