jjzjj

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

MingkXr 2024-04-28 原文

喜欢的请支持正版,此版本仅用于学习,不可用于商业目的,请在下载后于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()来初始化,这是个关键方法,我们从这里入手。

这边我们没有必要去逆向steam_api64.dll,直接往上找

这里看到有两个,只有第一个会执行,

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

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

调试可以拿到自己的steamid,不过貌似随便填一个都可以,为了保险还是直接把steamid填上

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

By x1a0reN.

有关[IL2CPP逆向] 某立志传 - 脱离Steam运行的更多相关文章

  1. ruby - 从我的胰岛素泵 Controller 逆向工程统计数据文件 - 2

    这可能是也可能不是灰色地带主题,尽管我的意图肯定不是,所以我的意图不是激起关于逆向工程主题的道德辩论。我是1型糖尿病患者,目前正在接受泵治疗。我是OmniPod用户,这是一个一次性胶囊,可以粘在我的身上并分配胰岛素3天。它由个人糖尿病管理器[PDM](见下文)控制,该管理器控制进餐期间分配的胰岛素量、血糖读数,并且包含一个用于计算碳水化合物的食物指数。(来源:myomnipod.com)新的PDM有一个用于下载数据的USB端口。该软件对Windows用户免费(名为CoPilot的软件包),但不支持Mac。将PDM插入我的Mac后,它像任何其他USB设备一样安装,并为我提供了一个可读卷,

  2. 如何设置cpp_cppckeck opitions? - 2

    我已经下载了VIM插件cpp_cppcheck但已将其复制到~/.vim/ftplugin/c_cppcheck.vim它也可以使用C文件。它似乎运行良好,但我现在想激活该选项--enable-all就像一个可以在外壳上的人一样。在Cppcheck帮助窗口中,它说以下内容:g:cpp_cppcheck_optionsThecommandlineoptionsyouwanttopasstoCppcheck.ViewyourCppcheckdocumentationforthepossibleoptions.Notethatyoushouldn'tspecifyatemplatehere!Ifyo

  3. 3. Android逆向-基于Frida的工具Objection - 2

    文章目录Objection安装使用安装使用Ubuntu连接测试Windows问题Objection安装使用在开始熟悉Frida时,接触的示例是需要frida-server在一个root过的os环境中运行,便于读取/访问所有需要的数据或其他app。一般真机开发过程,都是一个比较纯粹的App开发,不会在一个Root过的Android设备上进行开发。这篇主要就是学习在非Root环境下hookapp。这里介绍并使用一个基于Frida开发的工具objection:📱objection-runtimemobileexploration(github.com)。本篇文章主要描述下objection安装及在使

  4. javascript - 你将如何对它进行逆向工程? - 2

    我有一些代码位于javascript中的php文件的底部。它经历了许多奇怪的扭曲,比如将十六进制转换为ascii,然后进行正则表达式替换、执行代码等等......有没有办法在它实际执行之前找出它在执行什么?代码在这里:http://pastebin.ca/1303597 最佳答案 您可以逐步完成它-因为它是Javascript,并且是解释型的,所以它需要自己的解密器。如果您可以访问命令行Javascript解释器(例如Firebug中的控制台),这将非常简单。我会看看会发生什么。编辑我已经完成了大部分-看起来最后一步很重要,可能是因

  5. javascript - 如何使用 js/uml 对我的 JavaScript 文件进行逆向工程? - 2

    目标我的目标是从我的JavaScript项目(由几个.js文件组成)中获取UML模型并将其存储为XMI。我走了多远我在网上搜索了一下,发现js/uml是第一个去的地方。我已经设法让js/uml插件与Eclipse3.7.1(Win32)一起运行,并在本地安装我预先下载的附加插件:mdt-uml2tools-Update-incubation-I201103290512.zip(安装所需的org.eclipse.uml2.diagram.clazz0.10.0)jsuml-eclipse-0.8.4.zip(仅适用于Eclipse3.7.1(Indigo))我将提供的示例项目jsuml-

  6. javascript - Steam 发布请求 - 无法加载资源 : the server responded with a status of 400 (Bad Request) - 2

    我正在尝试发送这样的帖子请求:xhr.open("POST","/steamapi/actions/RemoveFriendAjax",false);varparams="sessionID="+session_id+"&steamid="+id;xhr.onreadystatechange=function(){//Callafunctionwhenthestatechanges.if(xhr.readyState==4&&xhr.status==200){alert(xhr.responseText);}}xhr.send(params);我正在使用Apache服务器,这是我的.h

  7. javascript - 最难逆向的 JavaScript 混淆器 - 2

    这个问题在这里已经有了答案:HowcanIobfuscate(protect)JavaScript?[closed](22个答案)关闭9年前。我正在寻找目前最难逆向的JavaScript混淆器。如果它可以在自己的服务器上运行,则可以加分。性能下降和代码膨胀都很好。

  8. javascript - 对 Google+ 按钮背后的 Javascript 进行逆向工程 - 2

    我正在尝试模拟google+按钮。在LINK的部分代码中,它将sessionID转换成某种哈希。我发现sessionID名称是SAPISID,转换后的哈希名称是SAPISIDHASH,谁能告诉我哪部分代码执行哈希部分。任何帮助将不胜感激。我已经连续花了6个小时,仍然没有任何线索:(例如VUOyLIU22fNPz2ko/AbGsxW03_WHoGjaJq是SAPISID和f17aa630b9b9a105dad437b0fedcafe429f6fca2是SAPISIDHASH。在php中,我尝试了所有类型的散列..没有匹配。 最佳答案

  9. javascript - 无法找到聊天消息的 Steam UMQID - 2

    使用Golang,我正在尝试通过Steam发送聊天消息.岗位要求是jsonp:jQuery1111021217753615295387_1460262983441umqid:6271781725479270872type:saytextsteamid_dst:76561198208696745text:foobaraccess_token:87e689c612b38f535a4d2b645b3aa3a7_:1460262983442我了解所有必需的变量,并且能够使用它们(UMQID变量除外)。我已经通过Steam'sjavascriptsourcecode一遍又一遍地试图弄清楚它的值(

  10. c++ - vim折叠cpp和golang代码 - 2

    vim无法折叠test.cpp,vim提示未找到E490,但是将此文件重命名为test.c或test.cc,vim可以使用zc折叠相同的代码。我已经在.vimrc中设置了configurefoldmethod=语法setfoldlevel=0setfoldnestmax=2VIMRUNTIME=/usr/share/vim/vim80在/usr/share/vim/vim80/ftplugin中,退出cpp.vim文件。为什么vim无法折叠*.cpp和*.go 最佳答案 我已经解决了这个问题,因为尽管我在.vimrc中设置了fdm=

随机推荐