初探
很常规的两个路径:
apk\lib\arm64-v8a\libil2cpp.so
.apk\assets\bin\Data\Managed\Metadata\global-metadata.dat 但有加密。
魔数头被抹掉,可以看到大量的 0x66,有明显的统计特征,0x00 占比 ,0x66 占比 ,0x99 占比

直接怀疑是固定密钥 xor 或 sub,进一步猜测是纯 xor,但部分区段是不符合明显 0x66 的特征,猜测是按区块的异或解密。
此外,0x1000-0x4FFF 区间的统计熵显著变大。

推测这段有单独的 Key 或 AES 等加密算法。
安装
需指定安装来源安装:
adb install -r -d -g -i com.android.vending "アワーノーツ.apk"否则会被 Google Play 劫持。
安装完毕:

metadata dump
朋友搞的,尚未复现,
il2cppdumper
把 IDA 配好让 opus 4.8 自己去迭代进行,得到一个尚有缺陷的魔改版 il2cpp dumper
https://github.com/MetaMikuAI/Il2CppDumper-0x66
能导出大概 47.4 MB 的 dump.cs 和 3.35 MB 的字符串表,剩有几万个方法导出失败,大多是泛型之类,等需要的时候再细分吧。
导入 IDA 很快,想要什么上 il2cpp-to-csharp-skill 让 AI 自己来分析就行了。
毕竟个人对这个游戏不是很感冒,主要是研究了一些 il2cpp dumper 的魔改,剩下的等有需要的时候再进行研究了。
抓取日志
adb logcat -s UnitySF
内测已经过了,忘记预先抓包一下初始个人数据模板,要做的话也基本是盲测了,因此此处只做一次尝试。
时间校验
由于内测时间结束,且游戏本身有时间校验,虽然可以通过修改系统时间绕过,但还是最好解决一下时间校验的问题。

定位时间校验相关逻辑
// 0x73A64ACvoid *App_Display_Presenter_TitleDisplayPresenterBase_object___ValidateCbt( App_Display_Presenter_TitleDisplayPresenterBase__CreateUI_d__14_T__o *this, const MethodInfo_73A64AC *method){ __int64 v2; // x1 __int64 v3; // x1 __int64 v4; // x1 void *JstNow; // x19 App_Master_MasterLoader_o *Instance; // x0 void *Parameter; // x0 System_String_o *v8; // x20 System_DateTime_o v9; // x1 System_DateTime_o v10; // x0 App_Display_Presenter_TitleDisplayPresenterBase__OnBack_d__13_T__o *v12; // x0 const MethodInfo_73A6594 *v13; // x1
if ( (byte_A3414E3 & 1) == 0 ) { sub_4451420(&Fwk_Generic_AppTime_TypeInfo, method); sub_4451420(&System_DateTime_TypeInfo, v2); sub_4451420(&Method_Fwk_Generic_SingletonBase_MasterLoader__get_Instance___167494936, v3); sub_4451420(&StringLiteral_34379, v4); byte_A3414E3 = 1; } if ( !*(&Fwk_Generic_AppTime_TypeInfo->_2.cctor_finished + 1) ) ((void (*)(void))sub_44515A0)(); JstNow = Fwk_Generic_AppTime___c__get_JstNow(0LL); Instance = (App_Master_MasterLoader_o *)Fwk_Generic_SingletonBase_object___get_Instance((const MethodInfo_7199538 *)Method_Fwk_Generic_SingletonBase_MasterLoader__get_Instance___167494936); if ( Instance && (Parameter = App_Master_MasterLoader__GetParameter(Instance, (System_String_o *)StringLiteral_34379, 0LL)) != 0LL ) { v8 = (System_String_o *)*((_QWORD *)Parameter + 5); if ( !*(&System_DateTime_TypeInfo->_2.cctor_finished + 1) ) sub_44515A0(System_DateTime_TypeInfo); v9.fields._dateData = (uint64_t)System_DateTime__Parse(v8, 0LL); v10.fields._dateData = (uint64_t)JstNow; return System_DateTime__op_GreaterThanOrEqual(v10, v9, 0LL); } else { v12 = (App_Display_Presenter_TitleDisplayPresenterBase__OnBack_d__13_T__o *)sub_44516CC(); return App_Display_Presenter_TitleDisplayPresenterBase_object___OnKill(v12, v13); }}整个函数直接干掉
il2cpp:00000000073A64AC 00 00 80 52 MOV W0, #0il2cpp:00000000073A64B0 C0 03 5F D6 RET重新打包,签名并安装即可
api 地址
一共两个主要的地址
https://api-cbt.bang-dream-on.jphttps://static-cbt.bang-dream-on.jp前者是业务 API,后者应该是资源站的地址。这里只改前者。
xor 0x66 后填回 global-metadata.dat,这里 metamiku 直接配了公网服务器、SSL 证书和等长的域名,因此也不涉及什么 padding。
这里应该没人不会吧(?)不会可以看 metamiku 另一篇博客。
可行性验证
根据 PrivateSekai 总结的 skill,让 AI 分析并搓了一个小 demo(gpt 编造了好些资源,导致进度有点拖延了)
稍后会将代码整理发一下。

持续开发
基本交给 Sol 干了,纯 vibe 真的很爽。仓库地址不方便贴,就麻烦自己翻吧。