罗萨 发表于 2022-1-25 16:32

记录一次U3D il2cpp游戏逆向解包

本帖最后由 罗萨 于 2022-1-25 21:03 编辑

纯记录贴,怕下次自己忘了。
目标:steam锁国区某日游,因无中文语言,所以想做一下汉化。
使用工具:CPP2ILhttps://github.com/SamboyCoding/Cpp2IL
Il2CppInspector
AssetStudioGUI
dnspyida   x64dbg用到的工具比较多

一、先找语言文件
先打开AssetStudioGUI

直接加载游戏文件目录,等他跑一小会,随便搜搜关键字筛选一下看看


能看到多语言文件都是加密过的,先右键导出个英文的文件准备开干。

二、解包GameAssembly.dll
下载好Cpp2il,填上bat命令行,一键导出,或者使用Il2CppInspector。
命令行:Cpp2IL.exe--game-path="D:\Program Files (x86)\Steam\steamapps\common\Yu-Gi-Oh!Master Duel" --exe-name="masterduel"
经过漫长无比的等待后
cpp2il文件目录下会输出若干文件


三、分析Assembly-CSharp.dll
拖进dnspy可以看到类似这样,看不到函数内部,只能看到函数名,够用了,开始找解密函数

搜索Decrypt方法,只有一个符合,我这里已经知道这个函数就是解密函数了,所以直接拿他开整。


记录下地址:[Address(RVA = "0x7BD270", Offset = "0x7BC470", VA = "0x1807BD270",dnspy先别关一会还有用

四、分析GetBytesDecryptionData解密函数
掏出IDA拖入GameAssembly.dll,抽根烟开始漫长的等待。跑完之后直接去00000001807BD270处F5看一下伪代码

很简单的逻辑,在去dbg里跑一下看一眼变量。

这里rbx+78对应的a1 + 120,拿到v5的数值,接下来写个算法就好了,其实就两行。


简单的运算,没啥好讲的,解密之后发现还是加密的状态,后来我仔细找了找,返回值还有一个call双击进去,复制1806ED310,dnspy搜一下字符串

对应的应该是zlib算法里的解压函数,下载一个zlib类库看下源码


OK,引用到项目,测试一下完活






罗萨 发表于 2022-2-6 18:57

复制一下当加密算法,改一下zlib压缩参数,默认是9,这里改成6

wenlee 发表于 2023-2-20 18:18

大佬,我找了几个IL2CPP的游戏搜索Decrypt在Assembly里面没有,在mcorlib倒是有一堆decrypt方法,大概都是System.Security.Cryptography名字空间里的。这种的解密函数是哪个啊?
我想要的是给游戏解包,而不是修改游戏数值。

panicler 发表于 2022-1-26 01:14

一次U3D il2cpp游戏逆向

y13699688083 发表于 2022-1-26 09:25

感谢无私的分享

天山雪 发表于 2022-1-26 11:51

这就是知识 的力量啊。

zhouxinyi 发表于 2022-1-26 17:33

本帖最后由 zhouxinyi 于 2022-1-26 17:36 编辑

这是说的MD么?期待汉化{:1_887:},之前的DL都有简繁中文,没搞懂为啥MD就木有了

evill 发表于 2022-1-27 11:12

Yu-Gi-Oh

lws0318 发表于 2022-1-27 13:24

感谢楼主无私的分享

lossweight 发表于 2022-1-27 16:01

太厉害了 最近正好对u3d项目感兴趣 可以借鉴玩一下

xdpxby 发表于 2022-1-27 19:44

不是吧,逛个论坛都有牌佬?

Pipi2018 发表于 2022-1-28 08:31

学习 汉化🐂🍺
页: [1] 2 3
查看完整版本: 记录一次U3D il2cpp游戏逆向解包