硕士生
 
- 金币
- 3833
- 好评
- 25
- 信誉
- 120
|
本帖最后由 tuandgame 于 2026-1-9 20:01 编辑
某爱某模拟器
1. 谁在决定“终身会员”
VIPDefaultFragment 的 N0() 方法先调用 UserEntity.getVipType()。
返回值等于 2 时,UI 直接把 R.string.xxx(0x7f1306dc)刷到 TextView,出现“你已成为终身会员”。
等于 1 显示到期时间,等于 0 显示“专属特权”。
因此只要让 getVipType() 永远返回 2,界面就终身高亮,服务端字段从此被架空。
具体修改还可以深挖几层,请自行试验
2. 广告配置同步流程
SettingsAdvertSecondFragment.l0() 启动协程,updateAdStatus1.invokeSuspend() 里调用 UserRepository.J(adId) 拿 BaseCodeEntity。
isResponseSuccess() 返回 true 走成功分支:自动 dismiss LoadingDialog 并 Toast“同步广告配置成功”。
返回 false 走失败分支:拼“同步广告配置失败:msg”并手动 dismiss。
把判断结果硬编码为 true 即可让提示永远绿灯。
3. 两条补丁的交集与盲区
补丁一(vipType=2)影响所有本地 UI 与部分客户端校验,但云端计费、播放鉴权、下单二次校验仍可能穿帮。
补丁二(广告同步恒成功)仅影响设置页提示,实际广告策略仍由服务端推送决定,下次冷启动若推送失败数据照样拉回本地。
4. 风险与收益
本地截图、录屏足够用;无需 root、无需 hook,一次重打包永久生效。
若服务端后续增加“订单/播放时再查 vipType”或广告配置二次校验,补丁即穿帮。
篡改签名分发可能触发风控、封号或法律风险。
5. 思路扩展
不想重打包:Frida 直接 hook getVipType() 和 isResponseSuccess(),各三行脚本。
想真正“终身”:唯有让服务端把 VipTypeId 写成 2,否则都是客户端自娱自乐。事实上还有个开屏广告还没有屏蔽。留下大家做作业好了。 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|