公司动态
如何快速定位Unity目标函数:Il2CppHookScripts函数查找与签名查看完整指南
如何快速定位Unity目标函数Il2CppHookScripts函数查找与签名查看完整指南【免费下载链接】Il2CppHookScriptsFrida-based libil2cpp.so runtime parsing script项目地址: https://gitcode.com/gh_mirrors/il/Il2CppHookScripts一、为什么需要 Il2CppHookScripts 函数定位在分析 Unity IL2CPP 游戏时最大的痛点就是找不到函数就什么都做不了。Hook 一个方法需要它的地址、改返回值需要确认参数类型、绕过逻辑需要完整的方法签名——这些信息散落在内存深处靠手工翻 IDA 效率极低。Il2CppHookScripts正是一款基于 Frida 的 libil2cpp.so 运行时解析脚本其中的findMethods和showMethodInfo两个函数能帮你在游戏运行过程中快速查找目标函数、查看完整签名。本文面向新手带你从零开始掌握这套函数定位工作流。二、快速安装与启动项目通过 npm 一键安装无需编译$ npm install il2cpp-hooker -g然后有两种启动方式附加模式fat直接 attach 当前正在运行的 App启动模式fat com.xxx.xxx以指定包名 spawn 启动游戏启动成功后进入 Frida 控制台本文所有函数都可以直接调用。 如果想从源码运行可按 README.md 中的 Compile 一节执行npm installnpm run build再用frida -l加载编译产物。三、findMethods批量扫描函数的雷达findMethods是全局函数扫描器签名如下声明见 Il2cppHook/agent/java/info.tsfindMethods(filter, findAll?, formartMaxLine?, retArr?, accurate?)五个参数各司其职参数说明filter函数名过滤关键字findAll是否扫描全部方法不传则只查 Transform/GameObject 等常用类formartMaxLine每行最大长度排版用retArrtrue时返回Il2Cpp.Method数组供后续调用accurate是否精确匹配函数名实战示例 1全局模糊搜索findMethods(Show, true)控制台会列出所有名字包含Show的方法每条结果带有序号、MethodInfo 地址、虚拟地址偏移、所属类与完整签名。注意结果分两段打印已实现的方法和虚方法虚表未填充并显示耗时Take 126ms to find 14 results实战示例 2指定类搜索findMethods(Damage, CNRDPassiveObject)第二个参数传类名时只在该类及其导出符号中搜索速度快很多。实战示例 3拿到结果数组继续操作let methods findMethods(onClicked, true, undefined, true, true) // 用返回的数组做 Hook / 断点retArr传true后不打印日志直接返回方法数组——这是链式操作比如批量断点bp、批量 Hook的关键用法。配套函数findMethodsInClass(filter, className, sort?)只看某个类内部的方法默认按访问修饰符分组排序详见 Il2cppHook/agent/java/info.ts。filter传*表示列出全部findMethodsInClass(*, CNRDPassiveObject)findMethod(assembly, class, method, argsCount, overload?)已知三要素时精确查找单个函数的最快路径带参数重载支持实现见 Il2cppHook/agent/base/base.ts。参数从全到简findMethod(UnityEngine.CoreModule, UnityEngine.Transform, Rotate, 2, [UnityEngine.Vector3, System.Single]) // 最快 findMethod(GetHashCode, Color) // 函数名 类简称 findMethod(LerpUnclamped) // 最慢全量遍历四、showMethodInfo一行命令看全函数签名找到候选函数后showMethodInfo负责输出完整的层级信息程序集 → DLL 镜像 → 命名空间/类 → 方法 → 每个参数的类型甚至包括返回值_RET_行。别名mi更短。showMethodInfo(0x7aec6b6e10) // 传 MethodInfo 地址字符串 mi(findMethod(GetHashCode, Color, false)) // 或直接传方法对象输出效果摘自 Il2cppHook/agent/base/info.ts 中的注释样例[-]Assembly-CSharp 0x7c00f74bf0 [-]Assembly-CSharp.dll 0x7b6bb29850 | C:1001 [-]RewardedAdsManager 0x7a007245c0 | M:21 | F:8 | N:ZeroX.AdsSystem [-]public WaitToken...ShowRewardedResult Show(String where,String reason) MI:0x7aec6b6e10 MP: 0x7ae4358a44 RP: 0x756a44 [-]where | type: 0x7ae57f9720 | class:0x7b0a454e00 | System.String [-]reason | type: 0x7ae57f9720 | class:0x7b0a454e00 | System.String [-]_RET_ | type: 0x7ae56e5b00 | class:0x7940de4050 | WaitToken...几个实用细节⚠️arm64 下不要用数字字面量传地址超出 JS 安全整数范围请传0x...字符串否则会报错提示类、方法数M:21 | F:8一目了然方便判断该类是否是目标如果是虚方法函数还会尝试inflate生成替身实现并打印Inflate Object ↓后的真实地址从地址反查方法的完整链路可参考showMethodInfoFromAddress见 Il2cppHook/agent/java/info.ts。五、标准工作流三步定位目标函数推荐的新手流程把两个函数串起来用扫findMethods(关键词, true)全局模糊搜索拿到候选列表查对疑似目标执行showMethodInfo(地址)核对参数与返回值类型确认没找错重载用确认后直接B(地址, (args){}, (ret){})批量 Hook或callFunction主动调用不确定时可先bp(关键词)批量打断点观察。// 完整示例找到 Show 相关函数 → 查签名 → 断点 findMethods(ShowRewarded, true) showMethodInfo(0x7aec6b6e10) bp(ShowRewarded, false) 补充技巧拿到一个野地址不知道属于谁用functionProbe(地址)猜测它上下文的函数AddressToMethod(地址)可把执行地址直接转成方法对象都在 Il2cppHook/agent/java/info.ts 中。六、常见问题 FAQQ1findMethods只传一个参数为什么只搜到几个方法不传findAll时默认只在Transform、GameObject、Input、Application、PlayerPrefs等常用 Unity 类中搜索实现见 Il2cppHook/agent/java/info.ts。想搜游戏自身代码请传true。Q2结果里为什么有虚方法单独一段这些方法的virtualAddress为空尚未填充实现。对它们 Hook 无效可先用showMethodInfo看它是否会触发 inflate 生成替身。Q3findMethod报 Not Found 怎么办类名要用全称含命名空间如UnityEngine.Transform并确认argsCount参数个数正确仍失败就用findMethods模糊搜索核对真实名字。Q4中文类名或泛型类找不到先用findClasses确认类名与程序集归属再用findMethodsInClass精确到类内部搜索。七、总结场景推荐函数不知道函数名全局扫findMethods(关键词, true)已知类列类内方法findMethodsInClass(过滤, 类名)已知三要素精确拿单个findMethod(程序集, 类, 方法, 参数数)看完整签名与参数类型showMethodInfo(地址)/mi(对象)地址反查方法AddressToMethod(地址)批量观察bp(关键词)findMethods负责搜得到showMethodInfo负责看得清两者配合就是 Il2CppHookScripts 中最高效的函数定位组合拳。更多 API 用法可在源码中搜索globalthis.快速发现核心实现集中在 Il2cppHook/agent/java/info.ts 与 Il2cppHook/agent/base/info.ts 两个文件中。【免费下载链接】Il2CppHookScriptsFrida-based libil2cpp.so runtime parsing script项目地址: https://gitcode.com/gh_mirrors/il/Il2CppHookScripts创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考