某前2的游戲分析日志-1 Global-Metadata
我的文章不面向小白,也別來私信我 0級回復(fù)不了人 我也不想理小白
為什么呢? 因為我曾經(jīng)是逆向小白的時候從來沒有人理過我 也沒人看得起我 就這么簡單.
第一眼直接看到這個的時候 我是懵逼的 心想又是個打包把源碼打進去的神仙嗎

然后發(fā)現(xiàn)事情不對勁 IL中間碼被加密了?

那就二話不說直接去看global-metadata.dat報錯 對比了一下正常的dat果然加密了

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

0差異 沒有改源碼 那就排除?的情況 那就簡單多了 直接上內(nèi)存dump
直接Process monitor看堆棧

看上去是在映射內(nèi)存的部分

然后對比原版的GameAssembly的讀取函數(shù)結(jié)構(gòu) 通過相似程度判斷這是在哪 直接往上找引用
找了2層就找到了il2cpp::vm::MetadataLoader::LoadMetadataFile 這部分確實被修改過了

再往上一層 看到這個就是懂得都懂了

直接上內(nèi)存Dump x64dbg無法找到Game Assembly的地址 可能是被NEP2.dll給藏起來了 但這種雕蟲小技對CE無效
所以我直接用CE Dump 來一堆Nop 然后死循環(huán) 游戲打開之后就會停止 然后開CE跳轉(zhuǎn)到GameAssembly 斷點下到?MetadataFile = il2cpp::vm::MetadataLoader::LoadMetadataFile();

返回值的地方然后拿EAX寄存器的指針就是解密后的文件內(nèi)存地址了 然后Ctrl+S直接保存 From是文件的起始地址? to是global-metadata.dat文件的大小的16進制

發(fā)現(xiàn)還是不對?

但是看上去確實解密了 那肯定就是文件頭有問題?


看了下版本號不對 那就是這個的原因了 直接改回去修復(fù)完成

然后更震撼我的來了 我還好奇為什么這global-metadata為什么那么小 結(jié)果居然用的是il2cpp+mono混合編譯?

還用了MagicCloth 我愿稱之為 顯卡危機2023? 接下來就是還原IL中間碼了 也許還有下一篇