发布到steam的unity游戏破解方法

发布于 2021-02-08  3019 次阅读


工具下载:

IDA 7.0

Il2CppDumper

Reflector

百度网盘下载:

链接:https://pan.baidu.com/s/1EpYlq6VQfoKPzH9ZkF9Nug 

提取码:8u2b 

交流QQ群:1025446555

unity是现在独立游戏的常用游戏引擎,Steam上就有很多。这篇记录就先简单介绍一下破解游戏做出游戏补丁让游戏脱离steam也能运行的办法。

以最近上线steam的游戏《回门》为例:

首先是下载游戏,找到游戏本体存在的目录:

比如我的steam安装在G:\Games\ 路径大概就是:

G:\Game\Steam\steamapps\common\回门 Way Back Home

放在其他盘其他目录的童鞋可以自行推断位置

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第1张

可以看到里面的GameAssembly.dll 用reflector打开GameAssembly.dll 会发现它不是C#的DLL文件,

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第2张

打开XXX_Data目录,里面有个il2cpp_data

从这两点可以看出这个游戏是使用的Il2cpp的后端,这种后端需要懂点汇编才好破解,不过只是断开steam的话是难度不高的。对付il2cpp后端的游戏,我们可以用Il2cppDumper这个工具来做辅助提取和修改。

进行这个修改还需要找另外一个文件global-metadata.dat,通常在il2cpp_data下面,我找了一下在:

WayBackHome_Data/il2cpp_data/Metadata/global-metadata.dat

我们先创建一个目录,把破解需要的中间文件都放在这里,比如我放在了g:\works\hack\hm\里面

然后我们编写一个简单的批处理脚本,放在游戏目录下(也就是GameAssembly.dll所在目录) 调用il2cppdumper来破解,其实只有一行:

Il2CppDumper GameAssembly.dll WayBackHome_Data/il2cpp_data/Metadata/global-metadata.dat g:\works\hack\hm\

编写完保存成bat文件,运行后等待结束,成功的话就会在g:\works\hack\hm\ 下面生成一些中间文件,比如:

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第3张

其中DummyDll里是一些C#代码,里面并没有从c和汇编反编译出来的具体代码内容,只有元数据,也就是可以用reflector或者ilspy之类打开查看代码结构。要修改的话 还是只能去用IDA去修改原本的GameAssembly.dll文件。

IDA是用来反编译机器语言到汇编语言,还可以返到不是很好看的C代码。

注意这个Tool是我把文章开头下载下来的工具解压之后放在这里的。然后现在启动我们的神器IDA,注意32位的就可以,64位的话可能会出现无法反编译到C代码。

在IDA打开这个GameAssembly.dll之后,默认选项确认进去,可以看到IDA会自动开始扫描分析这个dll文件,这个时候等待左下角的提示,

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第4张

出现这个自动分析结束的提示,就是分析完成了

好了现在选择 File-》Script File

运行Il2cpp所在文件夹下的ida_with_struct.py 

然后IDA会弹出窗口让你选择几个前面il2cppdumper提取出的json文件,也就是script.json和il2cpp.h 根据提示窗口标题就能看到。上面截图就有。

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第5张

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第6张

选择完毕IDA会开始进一步分析和替换函数名,这样就可以快速确认steam连接操作的代码位置了。

中途可能会报错,一般忽略并且继续就行。

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第7张

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第8张

等待分析完成。

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第9张

看到这个script finished就是分析完成了。

这时候看左侧的function window,里面会出现很多替换成有意义名称的函数名,选中随便一个,然后直接打英文SteamManager$$Awake

寻找到SteamManager$$Awake发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第10张把它的

选中右侧窗口 点击push ebp那里

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第11张

然后选择Edit->Patch Program->Assemble

改成ret

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第12张

这样初始化steam连接的函数改成了第一句就返回,跳过了后面和steam交互的过程,就可以脱离steam运行了。

最后Edit->Patch program->Apply patches to input file...

发布到steam的unity游戏破解方法  Il2Cpp unity 逆向工程 破解 游戏 第13张

这样补丁就打上了 关掉或者卸载STEAM 都可以直接进入游戏了。

破解完成

特别声明:

本人文章仅以技术交流为目的,不会直接用于任何盈利行为。如果使用本文介绍技术进行违法活动,本人概不负责,望周知。



点击数:4166


一沙一世界,一花一天堂。君掌盛无边,刹那成永恒。