高中生

- 金币
- 392
- 好评
- 5
- 信誉
- 100
|
基本信息
| 项目 | 内容 | | 应用名称 | 倒数日 (Days Matter) | | 包名 | com.clover.daysmatter | | 版本 | 2.0.57 (versionCode: 340) | | 目标SDK | 35 | | 修改DEX | classes.dex(修改了 2 个类) |
修改一:去除签名验证
原理
依旧MT管理器 去签bin.mt.signature.KillerApplication37
修改二:强制 Pro 标志为 True
原理
应用将 Pro/VIP 用户状态存储在 Z9(SharedPreferencesHelper)类的静态字段 OooO0o 中。初始化方法 OooO0o0() 从 SharedPreferences 读取 "pip" 键的值(默认 false)存入该字段。通过修改初始化方法,跳过 SharedPreferences 读取,直接写入 true。
修改位置
DEX: classes.dex
类: com.clover.daysmatter.Z9(SharedPreferencesHelper)
方法: OooO0o0(Landroid/content/Context;)V(静态初始化方法)
修改前代码(Smali)
- .line 58
- invoke-static {p0}, Landroid/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;
- .line 61
- move-result-object v1
- .line 62
- const-string v2, "pip"
- .line 64
- invoke-interface {v1, v2, v3}, Landroid/content/SharedPreferences;->getBoolean(Ljava/lang/String;Z)Z
- .line 67
- move-result v1
- .line 68
- sput-boolean v1, Lcom/clover/daysmatter/Z9;->OooO0o:Z
复制代码 修改后代码(Smali)
- .line 58
- invoke-static {p0}, Landroid/preference/PreferenceManager;->getDefaultSharedPreferences(Landroid/content/Context;)Landroid/content/SharedPreferences;
- .line 61
- move-result-object v1
- .line 62
- const/4 v1, 0x1 # ← 替换:直接赋值 true
- .line 68
- sput-boolean v1, Lcom/clover/daysmatter/Z9;->OooO0o:Z
复制代码 指令对比
| 修改前(5 条指令) | 修改后(2 条指令) | | const-string v2, "pip" | —(删除) | | invoke-interface {v1, v2, v3}, ...getBoolean(...) | —(删除) | | move-result v1 | —(删除) | | —(无) | const/4 v1, 0x1(新增) | | sput-boolean v1, ...Z9;->OooO0o:Z | sput-boolean v1, ...Z9;->OooO0o:Z(保留) |
效果
Z9.OooO0o 静态字段始终为 true,应用所有检查该字段的代码都会认为当前用户是 Pro 会员,无需实际购买。
修改三:强制 MessagePro.isPro() 返回 True
原理
MessagePro 是 EventBus 事件消息类,用于在组件间传递 Pro 状态变化。其 isPro() 方法原本读取 isPro 字段值。作为双重保障,将此方法改为直接返回 true,确保通过 EventBus 传递的 Pro 事件也始终为真。
修改位置
DEX: classes.dex
类: com.clover.daysmatter.models.MessagePro
方法: isPro()Z
修改前代码(Smali)
- .method public isPro()Z
- .registers 2
- .line 1
- iget-boolean v0, p0, Lcom/clover/daysmatter/models/MessagePro;->isPro:Z
- .line 3
- return v0
- .end method
复制代码 修改后代码(Smali)
- .method public isPro()Z
- .registers 2
- .line 1
- const/4 v0, 0x1 # ← 替换:直接返回 true
- .line 3
- return v0
- .end method
复制代码 指令对比
| 修改前 | 修改后 | | iget-boolean v0, p0, ...MessagePro;->isPro:Z | const/4 v0, 0x1 | | return v0 | return v0(保留) |
效果
MessagePro.isPro() 不再读取实例字段,直接返回 true。所有通过 @Subscribe(threadMode = MAIN) 监听 MessagePro 事件的组件都会收到 isPro() = true。
修改文件汇总
| 文件 | 类 | 方法 | 修改方式 | 操作类型 | | Z9.smali | com.clover.daysmatter.Z9 | OooO0o0(Landroid/content/Context;)V | 替换 5 条指令为 2 条 | 强制 Pro=true | | MessagePro.smali | com.clover.daysmatter.models.MessagePro | isPro()Z | 替换 1 条指令 | 强制返回 true |
解锁架构图
- ┌─────────────────────────────────────────────────────────────────────┐
- │ AppApplication.onCreate() │
- │ │
- │ const-class v9, Lbin/mt/signature/KillerApplication37; │
- │ │ │
- │ ▼ │ │
- │ Z9.OooO0o0(context) (SharedPreferences 初始化) │
- │ │ │
- │ ▼ │
- │ Z9.OooO0o = true ← 修改二:强制设为 Pro │
- │ │ │
- │ ├─ 检查 Z9.OooO0o 的代码 → 视为 Pro 用户 │
- │ │ │
- │ └─ 设置 Pro 时 → EventBus 发送 MessagePro(true) │
- │ │ │
- │ ▼ │
- │ MessagePro.isPro() → true ← 修改三:强制返回 true │
- │ │ │
- │ └─ onMessagePro(MessagePro) → 启用 Pro 功能 │
- └─────────────────────────────────────────────────────────────────────┘
复制代码
只提供思路...因为还未彻底解锁,事件颜色和选择图标还是未解锁状态...暂时就这样吧 |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
|