Il2CppDumper支持從il2cpp中獲取types, methods, fields等等數(shù)據(jù),除了支持switch的NSO格式外,最主要的還是完整處理了下MetadataUsage,現(xiàn)在在IDA執(zhí)行script.py后,F(xiàn)5能看到所調(diào)用的實(shí)例類,靜態(tài)類的具體名稱了,分析算法和搞些花式修改也更容易了!
功能介紹
支持ELF, ELF64, Mach-O, PE和NSO格式
支持Metadata版本16, 19~24
導(dǎo)出包括types, fields, properties, methods, attributes
自動(dòng)生成IDA腳本
重命名函數(shù)
重命名并注釋Metadata
MakeFunction完善IDA分析
生成DummyDll
使用說(shuō)明
運(yùn)行Il2CppDumper.exe并依次選擇il2cpp的可執(zhí)行文件(ELF,Mach-O或者PE文件)和global-metadata.dat文件,然后選擇運(yùn)行的模式,將在程序運(yùn)行目錄下生成dump.cs文件和script.py腳本
關(guān)于模式
Manual
你需要手動(dòng)輸入CodeRegistration和MetadataRegistration的指針地址,一般需要依靠反匯編工具來(lái)獲取地址
Auto
通過(guò)函數(shù)的特征字節(jié)找到il2cpp_codegen_register函數(shù)并獲取傳入il2cpp::vm::MetadataCache::Register中的參數(shù)1(CodeRegistration)和參數(shù)2(MetadataRegistration)。由于不同編譯器優(yōu)化差異,很多情況下無(wú)法正常工作。
Auto(Plus) - 優(yōu)先使用此模式
以metadata的數(shù)據(jù)作為依據(jù),指針特征作為判讀條件進(jìn)行搜索。
支持Metadata版本20及以后版本
在16版本下只能獲取到CodeRegistration地址
Auto(Symbol)
目前只支持ELF,使用自帶的符號(hào)進(jìn)行處理。
關(guān)于dump.cs
文本文件,推薦使用有c#語(yǔ)法高亮的編輯器打開
關(guān)于script.py
需要安裝IDA所需的python。在IDA中File-Script file選擇script.py運(yùn)行即可,會(huì)重命名methodName,添加stringLiteral注釋和MakeFunction
關(guān)于DummyDll
利用Mono.Cecil生成的仿制Dll,使用反編譯工具進(jìn)行查看
關(guān)于config.json
DumpMethod,DumpField,DumpProperty,DumpAttribute,DumpFieldOffset, DumpMethodOffset, DumpTypeDefIndex 控制程序是否在dump.cs輸出相應(yīng)的內(nèi)容
DummyDll
控制程序是否生成DummyDll
ForceIl2CppVersion,F(xiàn)orceVersion
當(dāng)ForceIl2CppVersion為true時(shí),程序?qū)⒏鶕?jù)ForceVersion指定的版本讀取il2cpp的可執(zhí)行文件(Metadata仍然使用header里的版本),在部分低版本的il2cpp中可能會(huì)用到(比如安卓20版本下,你可能需要設(shè)置ForceVersion為16程序才能正常工作)
常見問(wèn)題
ERROR: Metadata file supplied is not valid metadata file.
global-metadata.dat不是一個(gè)有效的metadata文件,通常是因?yàn)橛螒蚣用芰薵lobal-metadata.dat文件。關(guān)于解密的問(wèn)題最好去相關(guān)破解論壇尋求幫助,請(qǐng)不要在issues提問(wèn)!
ERROR: Can't use this mode to process file, try another mode.
當(dāng)所有自動(dòng)模式都無(wú)法工作時(shí),確認(rèn)可執(zhí)行文件未加殼或受保護(hù)后,你可以打開一個(gè)新的issue,并上傳文件,我會(huì)嘗試解決。