============================================================
 工具对比分析报告
 dex_vip_hunter.py vs jadx 深度分析（X站 APK）
============================================================
APK: X站（解锁去VIP功能）.apk
包名: u0sy4.ziw19.ijky3y.rzguo.d1774843631040120711
版本: 1.6.0
大小: 29.5 MB
分析时间: 2026-07-08

============================================================
一、两套工具的发现对比
============================================================

【jadx 深度分析的发现】

优势: 完整反编译为 Java 源码，可读性强，能理解完整业务逻辑

发现1: UserInfo.isVIP() 核心判断
  文件: com/androidx/lv/base/bean/UserInfo.java:555
  源码: return this.vipType > 1;

发现2: 广告系统架构
  AdNewUtils.java - 广告数据管理（SharedPreferences + 服务器下发）
  AdViewUtil.java - 广告点击跟踪
  广告位: START_POP_UP（启动弹窗）、LONG_VIDEO_PLAY_START（视频前广告）

发现3: 具体广告跳过逻辑
  VideoPlayActivity.initPopAdDialog() - VIP跳过启动弹窗
  VideoPlayActivity.setFullAd() - VIP跳过视频前全屏广告

发现4: VIP调用链（6处调用点）
  VideoPlayActivity.java x3
  CommunityPlayerView.java x1
  CdnDialog.java x1
  MineFragment.java x1
  ExternalDetailsActivity.java x1

发现5: 无签名校验

【dex_vip_hunter.py 的发现】

优势: 快速扫描所有 smali 文件，自动关联 VIP/权限/广告关键词

发现1: UserInfo.isVIP() Smali真实代码
  文件: smali/com/androidx/lv/base/bean/UserInfo.smali:1094
  Smali:
    .method public isVIP()Z
      .locals 2
      iget v0, p0, Lcom/androidx/lv/base/bean/UserInfo;->vipType:I
      const/4 v1, 0x1
      if-le v0, v1, :cond_0
      goto :goto_0
      :cond_0
      const/4 v1, 0x0
      :goto_0
      return v1
    .end method
  分析: 条件分支=True, 强制返回true=False

发现2: VideoBean.isCanWatch() - jadx 未发现！
  文件: smali/com/androidx/lv/base/bean/VideoBean.smali:1135
  Smali:
    .method public isCanWatch()Z
      .locals 1
      iget-boolean v0, p0, Lcom/androidx/lv/base/bean/VideoBean;->canWatch:Z
      return v0
    .end method
  分析: 独立的视频可观看判断，直接返回字段值

发现3: CanWatchBean.getCanWatch() - jadx 未发现！
  文件: smali/com/androidx/lv/base/bean/CanWatchBean.smali:33
  独立的可观看状态Bean

发现4: CdnBean.isVip() - jadx 已发现
  文件: smali/com/androidx/lv/base/bean/CdnBean.smali:69
  Smali:
    .method public isVip()Z
      .locals 1
      iget-boolean v0, p0, Lcom/androidx/lv/base/bean/CdnBean;->vip:Z
      return v0
    .end method

发现5: UserInfo.isRecharge() - jadx 未发现！
  文件: smali/com/androidx/lv/base/bean/UserInfo.smali:1074
  Smali:
    .method public isRecharge()Z
      .locals 1
      iget-boolean v0, p0, Lcom/androidx/lv/base/bean/UserInfo;->recharge:Z
      return v0
    .end method
  分析: 是否充值判断，影响充值相关UI

发现6: VIP相关API接口（UrlManager中）- jadx 未发现完整列表！
  getRechargeList      - 充值列表
  getVipGirlClassify   - VIP分类
  photoVideoCanWatch   - 图片视频可观看
  unlock               - 解锁
  userUnLockList       - 用户解锁列表
  videoCanWatch        - 视频可观看
  vipCardList          - VIP卡列表

发现7: VIP图片加载 - jadx 未发现！
  GlideUtils.loadPicVip - VIP专属图片加载

发现8: 额外VIP字段 - jadx 未全部发现
  getFreeVip()         - 免费VIP
  getExpiredVip()      - 过期VIP
  getCinemaExpiredVip() - 影院过期VIP
  getCinemaVipType()   - 影院VIP类型

============================================================
二、两套工具的互补性分析
============================================================

| 维度 | jadx | dex_vip_hunter.py |
|---|---|---|
| 分析速度 | 慢（需完整反编译） | 快（直接扫描smali） |
| 可读性 | 高（Java源码） | 中（Smali代码） |
| 业务逻辑理解 | 强（完整调用链） | 弱（孤立方法） |
| 核心方法定位 | 需人工搜索 | 自动关键词匹配 |
| API接口发现 | 弱 | 强（扫描UrlManager等） |
| 隐藏字段发现 | 弱 | 强（扫描所有get/set） |
| Smali修改参考 | 需转换 | 直接可用 |
| 适合场景 | 深度理解业务 | 快速定位修改点 |

结论: 两套工具互补，组合使用效果最佳！

============================================================
三、结合两套分析的修正修改方案
============================================================

原方案（仅jadx）: 只改 UserInfo.isVIP()

修正方案（jadx + dex_vip_hunter）:

【修改1】UserInfo.isVIP() - 核心（两套工具都确认）
影响: 广告跳过、VIP权限、CDN选择、界面状态
Smali:
  .method public isVIP()Z
    .locals 1
    const/4 v0, 0x1
    return v0
  .end method

【修改2】VideoBean.isCanWatch() - 辅助（dex_vip_hunter发现）
影响: 部分视频的可观看判断
Smali:
  .method public isCanWatch()Z
    .locals 1
    const/4 v0, 0x1
    return v0
  .end method

【修改3】CdnBean.isVip() - 辅助（两套工具都发现）
影响: CDN线路VIP限制
Smali:
  .method public isVip()Z
    .locals 1
    const/4 v0, 0x1
    return v0
  .end method

【修改4】UserInfo.isRecharge() - 可选（dex_vip_hunter发现）
影响: 充值相关UI显示
Smali:
  .method public isRecharge()Z
    .locals 1
    const/4 v0, 0x1
    return v0
  .end method

说明:
- 修改1是核心，改一处全局生效（去广告+VIP破解）
- 修改2-4是辅助，确保没有遗漏的权限判断
- 修改2-4的原始代码更简单（直接返回字段值），比修改1更容易改

============================================================
四、最佳实践建议
============================================================

分析阶段组合拳:
  1. 先用 dex_vip_hunter.py 快速扫描，定位所有VIP/权限/广告相关方法
  2. 再用 jadx 深入分析核心方法的调用链和业务逻辑
  3. 最后用 dex_vip_hunter.py 的 --analyze 模式查看Smali代码，直接用于修改

修改阶段:
  1. MT管理器 DEX编辑器
  2. 优先修改 isVIP()（核心）
  3. 再修改 isCanWatch()、isVip()（辅助）
  4. 保存、签名、测试

============================================================
报告结束
============================================================
