Il2CppHookScripts广告分析实战:AppLovin MAX与AdMob瀑布流竞价的完整解析指南
【免费下载链接】Il2CppHookScriptsFrida-based libil2cpp.so runtime parsing script项目地址: https://gitcode.com/gh_mirrors/il/Il2CppHookScripts
Il2CppHookScripts 是一套基于 Frida 的 libil2cpp.so 运行时解析脚本(npm 包名il2cpp-hooker),专门用于 Hook 和分析 Unity IL2CPP 游戏。这篇文章带你用它内置的 ADS 模块,完整走一遍 AppLovin MAX 与 AdMob 广告展示、瀑布流竞价日志抓取的实战流程。
一、快速上手:安装与挂载目标App
先全局安装,再用fat命令挂载或拉起目标游戏:
npm install il2cpp-hooker -g fat ${PackageName} # spawn 启动目标 App 并注入也可以 attach 到已经运行的进程。如果 npm 包更新不及时,可先拉取源码自行编译:
git clone https://gitcode.com/gh_mirrors/il/Il2CppHookScripts cd Il2cppHook && npm install && npm run build && npm run compress👉 挂载成功后,后续所有命令都在 Frida REPL 里直接输入即可。
二、ADS 分析模块架构
广告相关的脚本集中在Il2cppHook/agent/java/ADS/目录,结构如下:
ADS/applovin/max.ts:AppLovin MAX 核心脚本,封装了回调 Hook、MediationDebugger、插屏展示、伪造激励事件等功能ADS/applovin/unity.ts:封装com.applovin.mediation.unity.Utils(读取 SDK Key、当前 Activity)与MaxUnityAdManager(SDK 版本、TAG、mAdInfoMap 等)ADS/export.ts:一键批量 Hook 广告展示方法的入口ADS/testFireBase.ts:Firebase 依赖检查 Hook 与 RemoteConfig 抓取(广告配置常走 Firebase,可作为辅助手段)
其中max.ts里定义了三个关键数据结构:AdEvent(广告事件)、WaterfallInfo(瀑布流信息)、NetworkResponse(单条网络竞价响应),这正是我们分析瀑布流竞价的"字典"。
三、批量拦截广告展示:5步实战流程
第一步,用B_ShowAD批量给所有广告展示方法打上断点。它内部通过BF(模糊批量断点,定义于agent/base/breaker.ts)依次挂住showInterstitial、ShowRewardedInterstitialAd、showRewardedAd、ShowBannerAd、AppOpenAd等常用方法,游戏里一点"看广告"按钮,调用栈立刻现形:
> B_ShowAD()之后观察日志即可定位游戏调用了哪个 SDK、哪个方法。确认目标后,配合breakWithArgs查看参数,printCurrentMethods("Ad")列出所有已挂方法。
四、瀑布流竞价日志:一条命令看清全部网络响应
AppLovin MAX 的回调会经过 C# 层MaxSdkCallbacks.ForwardEvent/InvokeEvent(命名空间MaxSdk.Scripts),脚本已将其封装为两个命令:
> HookMaxCallBack() # Hook 回调,实时打印广告事件 JSON > listMaxCallBack() # 列出已记录的全部广告事件(精简版)Hook 命中后,每条事件都会按AdEvent结构解析输出,核心字段含义如下:
| 字段 | 含义 |
|---|---|
adUnitId | MAX 广告位 ID |
adFormat | 广告形式(REWARDED / INTERSTITIAL / BANNER 等) |
networkName | 实际出价的广告网络,如AppLovin、Google AdMob |
creativeId | 素材 ID,可反推广告内容 |
revenue/revenuePrecision | 本次广告收入与精度 |
waterfallInfo.networkResponses | 各网络在瀑布流中的竞价响应 |
waterfallInfo里的networkResponses记录每个网络的mediatedNetwork(适配器类名/版本)、credentials(app_id / placement_id)、error(错误码与错误信息)和latencyMillis(延迟毫秒数)——哪条网络竞价失败、超时还是出价低,一查便知。
五、打开 MAX 官方调试面板
想看 MAX 官方的 Mediation Debugger 界面(含完整瀑布流层级与请求状态),一条命令即可拉起:
> showMediationDebugger() # 调用 com.applovin.mediation.unity.MaxUnityPlugin.showMediationDebugger面板会在手机上直接显示,配合HookMaxCallBack()的日志,实现"界面 + 数据"双重视角。
六、手动触发插屏与伪造激励事件
除被动观察,脚本还提供了主动能力(源码见Il2cppHook/agent/java/ADS/applovin/max.ts):
showInterstitial(id):依次调用loadInterstitial→isInterstitialReady→showInterstitial,直接加载并展示插屏;onMaxInit():向游戏伪造发送OnSdkInitializedEvent,并用setFunctionBool把IsRewardedAdReady改为 true、n掉ShowRewardedAd,用于初始化失败时的调试;onMaxReward():通过SendMessage伪造OnRewardedAdReceivedRewardEvent/OnRewardedAdHiddenEvent(含 revenue、waterfallInfo 等真实字段结构),可用来验证游戏侧"看广告发奖励"的逻辑是否正确。
⚠️ 伪造事件仅建议在自有测试包或兼容性调试中使用,用于验证游戏业务逻辑,而非线上应用。
七、AdMob 与 Firebase 联动观察
onMaxReward()的示例事件里可以看到networkName: "Google AdMob"与networkPlacement: "ca-app-pub-.../...",说明 AdMob 常作为 MAX 瀑布流中的一个网络参与竞价——抓一次瀑布流日志,两个渠道的竞价表现就都拿到了。
如果怀疑广告开关/参数来自远端配置,可参考ADS/testFireBase.ts的思路,HookFirebaseApp.CheckDependencies等方法,或抓取 RemoteConfig 的键值,进一步定位配置来源。
八、常用命令速查表
| 命令 | 作用 |
|---|---|
B_ShowAD() | 批量断点全部广告展示方法 |
HookMaxCallBack()/listMaxCallBack() | 监听并列出 MAX 广告事件(含瀑布流信息) |
showMediationDebugger() | 打开 MAX 官方调试面板 |
showInterstitial("广告位ID") | 加载并展示插屏广告 |
onMaxInit()/onMaxReward() | 伪造初始化 / 激励奖励事件 |
JavaAds.Utils.retrieveSdkKey() | 读取 MAX SDK Key |
JavaAds.MaxUnityAdManager.VERSION | 查看 MAX Unity 插件版本 |
总结
用 Il2CppHookScripts 做广告分析的核心路径非常短:B_ShowAD定位展示入口 →HookMaxCallBack抓全量事件 JSON → 解析waterfallInfo弄清各网络竞价结果 → 需要时用showMediationDebugger、onMaxReward主动验证。掌握这套流程,你就能对 AppLovin MAX 与 AdMob 的广告展示链路做到"所见即所得"的完整解析。
【免费下载链接】Il2CppHookScriptsFrida-based libil2cpp.so runtime parsing script项目地址: https://gitcode.com/gh_mirrors/il/Il2CppHookScripts
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考