某前2的游戏分析日志-1 Global-Metadata
我的文章不面向小白,也别来私信我 0级回复不了人 我也不想理小白
为什么呢? 因为我曾经是逆向小白的时候从来没有人理过我 也没人看得起我 就这么简单.
第一眼直接看到这个的时候 我是懵逼的 心想又是个打包把源码打进去的神仙吗

然后发现事情不对劲 IL中间码被加密了

那就二话不说直接去看global-metadata.dat报错 对比了一下正常的dat果然加密了

然后直接下载同版本unity引擎对比了下unityplayer.dll

0差异 没有改源码 那就排除⚪的情况 那就简单多了 直接上内存dump
直接Process monitor看堆栈

看上去是在映射内存的部分

然后对比原版的GameAssembly的读取函数结构 通过相似程度判断这是在哪 直接往上找引用
找了2层就找到了il2cpp::vm::MetadataLoader::LoadMetadataFile 这部分确实被修改过了

再往上一层 看到这个就是懂得都懂了

直接上内存Dump x64dbg无法找到Game Assembly的地址 可能是被NEP2.dll给藏起来了 但这种雕虫小技对CE无效
所以我直接用CE Dump 来一堆Nop 然后死循环 游戏打开之后就会停止 然后开CE跳转到GameAssembly 断点下到 MetadataFile = il2cpp::vm::MetadataLoader::LoadMetadataFile();

返回值的地方然后拿EAX寄存器的指针就是解密后的文件内存地址了 然后Ctrl+S直接保存 From是文件的起始地址 to是global-metadata.dat文件的大小的16进制

发现还是不对

但是看上去确实解密了 那肯定就是文件头有问题


看了下版本号不对 那就是这个的原因了 直接改回去修复完成

然后更震撼我的来了 我还好奇为什么这global-metadata为什么那么小 结果居然用的是il2cpp+mono混合编译?

还用了MagicCloth 我愿称之为 显卡危机2023 接下来就是还原IL中间码了 也许还有下一篇