Il2cppdumper的使用姿势
2021-02-22 本文已影响0人
约你一起偷西瓜
Il2cppdumper用多了总会遇到dumper自动查找不到codeRegistration和metadataRegistration的情况,所以就需要我们自己去找找
IDA打开lib2cpp.so,ctrl+s 找到 .init_array 第三个函数(一般情况下是这个)



此处对应源码
...\Unity\Editor\Data\il2cpp\libil2cpp\codegen\il2cpp-codegen-il2cpp.cpp
中的
void il2cpp_codegen_register(const Il2CppCodeRegistration* const codeRegistration, const Il2CppMetadataRegistration* const metadataRegistration, const Il2CppCodeGenOptions* const codeGenOptions)
{
il2cpp::vm::MetadataCache::Register(codeRegistration, metadataRegistration, codeGenOptions);
}
由此可见
R0 就是 CodeRegistration (unk_ 是一个数值,当成 dword_)
R1 就是 MetadataRegistration (off_ 是一个偏移,点进去看看就是)

继续点进去的话就是对应的
...\Unity\Editor\Data\il2cpp\libil2cpp\vm\MetadataCache.cpp
中的
void il2cpp::vm::MetadataCache::Register(const Il2CppCodeRegistration* const codeRegistration, const Il2CppMetadataRegistration* const metadataRegistration, const Il2CppCodeGenOptions* const codeGenOptions)
{
s_Il2CppCodeRegistration = codeRegistration;
s_Il2CppMetadataRegistration = metadataRegistration;
s_Il2CppCodeGenOptions = codeGenOptions;
for (int32_t j = 0; j < metadataRegistration->genericClassesCount; j++)
if (metadataRegistration->genericClasses[j]->typeDefinitionIndex != kTypeIndexInvalid)
il2cpp::metadata::GenericMetadata::RegisterGenericClass(metadataRegistration->genericClasses[j]);
for (int32_t i = 0; i < metadataRegistration->genericInstsCount; i++)
s_GenericInstSet.insert(metadataRegistration->genericInsts[i]);
s_InteropData.assign_external(codeRegistration->interopData, codeRegistration->interopDataCount);
s_WindowsRuntimeFactories.assign_external(codeRegistration->windowsRuntimeFactoryTable, codeRegistration->windowsRuntimeFactoryCount);
}

这里就不细说代码了,详细看的话导入一个dumper出来的头文件再F5就行
此文简单的记录一下手动查找codeRegistration和metadataRegistration的方法
以上只是部分情况,有时候这个函数在
导出函数 il2cpp_init 中,最后一条bl跳转
...\Unity\Hub\Editor\2019.4.11f1\Editor\Data\il2cpp\libil2cpp\il2cpp-api.cpp
