|
|
发表于
2026-5-16 11:37:15
|
显示全部楼层
来自 浙江
不用反编译就能初步判断,5分钟搞定:
============================
方法1: 断网测试 (10秒判断)
============================
关掉Wi-Fi+流量,完全断网,然后:
- 启动APP点VIP功能
- 还能用 → 99% 本地校验
- 转圈/报错/降级到普通用户 → 大概率服务器校验
============================
方法2: 抓包看VIP接口 (最准)
============================
用 HttpCanary / Reqable / Fiddler 抓:
- 启动APP后过滤包名
- 看有没有类似这种请求:
/vip/info, /user/profile, /api/getuser, /member/status
queryVip, getUserInfo, checkSign
- 响应里有 isVip / vipLevel / status 之类字段 → 服务器校验
- 完全没相关请求 / 只有上报埋点 → 本地校验
注: HTTPS 包要装证书。如果是 SSL Pinning 会抓不到, 这种也基本是服务器校验。
============================
方法3: MT直接搜关键字符串
============================
用MT打开APK → DEX编辑器 → 搜索字符串:
"isVip" "vipLevel" "checkVip" "uVipStatus"
"/vip" "queryUser" "verifyMember"
看引用方式:
- 字符串只在 SharedPreferences 的 getXxx/putXxx 里 → 本地缓存
- 字符串出现在 OkHttp / Retrofit / Wns / 网络请求构建处 → 服务器校验
============================
方法4: 看VIP判断方法的逻辑
============================
搜 isVip() / getVipStatus() 的实现:
- 直接 return mIsVip / SharedPreferences.getBoolean → 本地
- 走 callback / Observable / Coroutine / 接收 Response → 服务器
- 两个都有 → 通常是 "本地缓存 + 定时同步服务器" 模式
这种你hook本地缓存能短暂生效,但下次同步会被覆盖,需要把同步接口的回调也hook掉
============================
方法5: 看so有没有动作
============================
- 启动APP瞬间 ls /proc/<pid>/maps | grep .so
- 如果加载了 libxxx_check.so / libwns / libsec / libtmesec / libfireeye
这种基本是腾讯系的强校验,服务器+签名+反作弊三重
- 只有标准框架so的, 单机本地校验居多
============================
小结判断口诀
============================
- 单机/工具类APP → 80% 本地
- 大厂内容APP (视频/音乐/小说/游戏) → 99% 服务器
- 教育/办公/笔记 → 一半一半,看具体厂家
- 带AI/扣点数功能 → 100% 服务器 (扣费一定走服务端)
- 带"卡密激活/输入授权码" → 半本地 (校验在本地but密钥可能联网拉)
============================
真要hook前必做
============================
1. 抓一次包看完整流量
2. 找到 isVip 方法看实现
3. hook 之后断网/开启再开APP, 看VIP还在不在
4. 在不在 → 本地成功
开启网络后掉了 → 服务器同步覆盖了, 把同步接口回调也hook
一直没生效 → 大概率服务器校验, 死心吧
希望对楼主有帮助 (•̀ᴗ•́)و |
|