123下一页
查看: 76|回复: 21

[相关教程] Unity IL2CPP逆向:Il2CppDumper还原方法名到Frida hook

[复制链接]

96

主题

5

回帖

951

积分

UID
2
贡献
9 点
钻石
7 个
C币
993 个
发表于 2026-9-14 00:22:48 | 显示全部楼层 |阅读模式
Unity 游戏用 IL2CPP 编译后,C# 代码被转成 C++ 再编译成 native 二进制。逆向时看不到 C# 源码,只能看 ARM 汇编。这篇讲怎么还原。

一、IL2CPP 原理
Unity 编译流程:C# → IL (中间语言) → C++ 代码 → native binary (ARM64)。同时生成 global-metadata.dat 文件,包含所有类名、方法名、字段名的字符串。native 二进制里只有地址,需要从 metadata 里还原名字。

二、Il2CppDumper
GitHub 上的 Il2CppDumper 工具,输入二进制和 metadata 文件,输出:

  • dump.cs:还原的 C# 伪代码,包含类名方法名字段名
  • script.json:方法地址到方法名的映射表
  • ida.py/script.py:IDA/Ghidra 脚本,自动重命名函数


用法:
  1. Il2CppDumper.exe game_binary.so global-metadata.dat output_dir/
复制代码

三、IDA 中还原
  1. # 在 IDA Python 控制台运行
  2. import json
  3. mapping = json.load(open("script.json"))
  4. for entry in mapping["ScriptString"]:
  5.     ida_name.set_name(entry["Address"], entry["Value"], ida_name.SN_NOWARN)
  6. # 或者直接运行 script.py
复制代码

还原后 IDA 里的函数名从 sub_12345 变成 PlayerController_UpdateHealth,可读性大幅提升。

四、Frida hook IL2CPP 方法
  1. // 通过 script.json 找到方法地址
  2. var addr = ptr("0x1234567"); // PlayerController.UpdateHealth
  3. Interceptor.attach(addr, {
  4.     onEnter: function(args) {
  5.         console.log("UpdateHealth called");
  6.         // args[0] = this (PlayerController实例)
  7.         // args[1] = 第一个参数
  8.     },
  9.     onLeave: function(retval) {
  10.         console.log("UpdateHealth returned: " + retval);
  11.     }
  12. });
复制代码

五、常见问题

  • IL2CPP 版本不同,metadata 格式可能变化。用对应版本的 Il2CppDumper
  • 有些游戏加密了 metadata 文件。需要先脱壳解密
  • inline 模式编译的 IL2CPP 方法可能被内联,找不到独立函数地址


温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
回复

使用道具 举报

匿名  发表于 2026-9-17 18:32:56
发发呆,回回帖,工作结束~
回复

使用道具

0

主题

373

回帖

38

积分

UID
426725
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:42:37 | 显示全部楼层
现在很多方案开始用双端校验,单点突破越来越难。
回复

使用道具 举报

0

主题

374

回帖

374

积分

UID
762116
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-9-17 18:52:04 | 显示全部楼层
遇到卡住的地方,换个思路往往比死磕更快。
回复

使用道具 举报

0

主题

362

回帖

0

积分

UID
481626
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 18:59:19 | 显示全部楼层
版本迭代之后要重新分析,这部分工作很难复用。
回复

使用道具 举报

0

主题

352

回帖

0

积分

UID
422988
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 19:09:22 | 显示全部楼层
App 侧的安全基本靠客户端自觉,服务端校验才是最后一道。
回复

使用道具 举报

0

主题

370

回帖

50

积分

UID
216589
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 19:14:39 | 显示全部楼层
多平台的支持是个大工程,工作量远超预期。
回复

使用道具 举报

0

主题

383

回帖

0

积分

UID
382547
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 19:25:00 | 显示全部楼层
反调试这块的坑最多,建议先把常见检测点列一遍。
回复

使用道具 举报

0

主题

382

回帖

52

积分

UID
413472
贡献
0 点
钻石
0 个
C币
0 个
发表于 2026-9-17 19:32:29 | 显示全部楼层
实际项目里最实用的往往是最朴素的抓包手段。
回复

使用道具 举报

0

主题

360

回帖

40

积分

UID
110965
贡献
0 点
钻石
0 个
C币
1 个
发表于 2026-9-17 19:38:13 | 显示全部楼层
这类校验现在很多是服务端下发的,光改本地没用。
回复

使用道具 举报

温馨提示:
1、在论坛里发表的文章仅代表作者本人的观点,与本网站立场无关。
2、论坛的所有内容都不保证其准确性,有效性,时间性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
3、当政府机关依照法定程序要求披露信息时,论坛均得免责。
4、若因线路及非本站所能控制范围的故障导致暂停服务期间造成的一切不便与损失,论坛不负任何责任。
5、注册会员通过任何手段和方法针对论坛进行破坏,我们有权对其行为作出处理。并保留进一步追究其责任的权利。
6、网络世界也请遵守我国的法律法规!一旦发现违法行为,将立即封存相关信息并报警处理!
123下一页
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

QQ客服返回顶部