【Dump那点事】内存一键定位coderegistration和metadataregistration的方法
本帖最后由 ryanhn717 于 2024-3-14 13:34 编辑说明
https://static.52pojie.cn/static/image/hrline/line3.png
经常Dump的同学可能会碰到以下情况,本文提供一种简便的内存获取此值的方法。
前言
https://static.52pojie.cn/static/image/hrline/line3.png
网上已有很多关于使用IDA来查找coderegistration和metadataregistration的文章,略作总结如下(此文不做额外延申):
1、通过字符串交叉引用最终定位il2cpp::vm::Runtime::Init,找到 s_Il2CppCodeGenRegistration中包含的coderegistration和metadataregistration。
【搜字符串如“global-metadata.dat”,“mscorlib.dll”等),交叉引用路径如下il2cpp::vm::GlobalMetadata::Initialize →il2cpp::vm::MetadataCache::Initialize →il2cpp::vm::Runtime::Init →s_Il2CppCodeGenRegistration】
2、通过 il2cpp_init 定位找到 il2cpp::vm::Runtime::Init
由于很多游戏对于常用字符串或结构等进行了加密处理,操作者在使用IDA进行定位时需要对源码以及工具有一定程度了解。比如以下情况(游戏案例: XX方舟)
①字符串global-metadata.dat无交叉引用
②字符串mscorlib.dll交叉引用结构混乱(对照源码)
针对不熟悉IDA工具以及il2cpp源码的同学,我们可以从内存结构中直接获取coderegistration和metadataregistration。
正文
https://static.52pojie.cn/static/image/hrline/line3.png
工具:GG修改器
案例游戏:XX方舟 (截止发帖3.14最新版 64bit)
一、打开游戏,打开GG修改器,选择好游戏进程。内存范围选择 Ca/A/O 。
二、字符串搜索 get_fieldOfView 定位内存解密后的 global-metadata.dat 模块 ,随之获取该模块头地址,即metadata文件魔术字头地址(此案例已抹掉了魔术字头,可直接内存修改”AF1BB1FAr “进行还原)
三、更改内存范围为 Cb/A。对metadata魔术字头地址进行指针搜索,得到偏移量为" 8 "的两个指针。
四、分别对得到的两个指针做偏移" -18 "(十六进制),即可得到coderegistration 和 metadataregistration的指针,所得指针中包含的十六进制地址值即为所需数值, 此例为:
coderegistration : 6F9FFB6DB8
metadataregistration: 6F9FFB6E28
注意
https://static.52pojie.cn/static/image/hrline/line3.png
由于内存指针地址变动,所获数值需要对应当次内存dump出的global-metadata.dat和libil2cpp.so使用。
内存结构对应源码数据,如按本文方法无法获取所需数值,则需要进一步查看对应的内存结构,本文不在延申。
有意思,在游戏领域很好的教程 思路挺好,但是这种网游可不兴修改呀 写的挺好 写的很棒,刚好在学过游戏检测 谢谢分享。 学的很棒,学习了 大佬请问指针搜索出来的数据类型不是Ca而是A的话要怎么处理呢 学习了.,
页:
[1]