- Android 手机 root
- 安装 Frida 服务
- 安装本项目环境依赖
pip install -r requirements.txt
查看参数:
python dump_so.py --h
options:
-h, --help show this help message and exit
-p PACKAGE, --package PACKAGE
android package name
-s SO, --so SO so name e.g. libil2cpp.so
-o OUTPUT, --output OUTPUT
output directory (default: current directory), e.g. "*/{packageName}"
运行示例:
python dump_so.py -p com.vitastudio.mahjong -o ./output/
最终会在 output/package/ 下生成两个 so 文件:
- XXX.so-起始地址.so(直接内存导出的)
- XXX.so-起始地址.fix.so(修复后的)
- 使用 IDA Pro 打开第一步导出的修复后的 .so 文件
- 搜索字符串(Shift + F12)global-metadata
- 点击搜索结果,找到 aGlobalMetadata 字样
- 在 aGlobalMetadata 上按 X 键,找到使用的地方
- 然后按 F5 反编译
- 找到
sub_XXXXXX("global-metadata.dat")代码 - 其中 sub_XXXXXX 的 XXXXXX 就是 LoadMetadataFile 方法的偏移地址,记下 0xXXXXXX
- 开始运行
dump_metadata.py
查看参数:
python dump_metadata.py --h
options:
-h, --help show this help message and exit
-p PACKAGE, --package PACKAGE
android package name
-a ADDR, --addr ADDR LoadMetadataFile function addr offset, e.g. 0xCB90B0
-o OUTPUT, --output OUTPUT
output directory (default: current directory), e.g. "*/{packageName}"
运行示例:
python dump_metadata.py -p 'com.vitastudio.mahjong' -a '0xCEB484' -o ./output/
最终会在 output/package/ 下生成 dumped-global-metadata.dat 文件:
- dumped-global-metadata.dat(直接内存导出的 metadata,修复了头信息中的魔数,版本号固定成了 29/0x1D)
3. 使用 Il2CppDumper 导出结构信息
.\Il2CppDumper.exe <第一步中修复的 so 文件> <第二步中导出的 metadata 文件> <output-directory>
执行后会提示输入 so 文件的起始地址,这里直接输入 0 就行
Input il2cpp dump address or input 0 to force continue:
0