本帖最后由 不羁 于 2025-8-19 15:16 编辑
【预】待本篇逆向实战分析教程发出后,将正式启动针对@Temorry 同学提议的DroidPlugin项目技术分析内容。相关衔接文章链接见https://bbs.binmt.cc/thread-154724-1-1.html该项目分析计划通过上中下三篇连载形式系统呈现,目前已完成核心研究框架搭建,内容将涵盖项目背景、核心原理技术分析、局限性分析、Android兼容性评估及互动问答等九大环节。后续进展将持续同步,敬请各位坛友关注期待~
前言: “授人以鱼不如授人以渔”这句话在逆向学习中尤为关键。真正的逆向价值从不是拿到现成的破解成果,而是掌握分析逻辑、拆解难题的思维与能力 —— 这正是 “渔” 的核心意义。
本教程不会提供可直接复用的工具包或成品补丁,也不会走 “一步到位” 的捷径。将完整呈现从定位关键代码到验证方案的全流程,带你亲历每一次拆解与思考的细节。
每处内容都经反复打磨,力求讲透原理与排查思路。请沉下心跟随实操,不必急于求成。逆向的真本事,永远藏在独立解决问题的过程里,而非现成结果中。
一、应用概述 趣映AI是一款聚焦动画类垂直领域的视频编辑工具,为用户提供从创意构思到成片输出的全流程制作支持,涵盖海量动画模板、角色编辑等核心功能。其权限限制机制表现为:未开通VIP的用户无法解锁角色模板及核心编辑功能,操作受限功能时会触发 “开通趣映VIP”、“开通会员” 等付费提示,可以通过逆向技术可绕过该限制实现功能解锁。 二、环境与工具准备 (一)核心环境与工具清单 - 目标应用:趣映AI(应用商店下载)
- 逆向工具:MT 管理器(用于APK提取、签名校验处理、DEX文件编辑及重打包操作)
三、逆向全流程 (一)APK 提取与基础信息核验 - 安装包提取:通过 MT 管理器定位已安装的趣映AI应用,获取关键基础信息:
- 签名状态:V2+V3
- 加固状态:未加固(核心前提,支持直接对APK内部文件进行编辑)
- 原始APK存储:将提取的安装包导出至本地路径保存为 “趣映 AI_2.7.9.apk”。
(二)APK预处理:签名校验去除
- 签名校验处理:在 MT 管理器中打开原始 APK,选择 “功能→去除签名校验”,配置参数如下:
- 签名方案:V1+V2+V3(匹配应用原始签名方案)
- 签名密钥:默认(系统自动生成用于后续重签名)
2.目标APK生成:处理完成后,在本地目录生成修改后的安装包 “趣映AI_2.7.9_kill.apk”,大小为 173.77M,用于后续代码编辑。 (三)DEX 文件分析与关键逻辑定位 - APK 文件结构解析:在MT管理器中打开 “趣映AI_2.7.9_kill.apk”,核心文件结构如下:
- 资源文件:resources.arsc
- 代码文件:classes.dex至classes8.dex
- DEX 文件加载:选择“classes.dex”,通过“Dex 编辑器++” 功能全选所有 MultiDex 文件(classes1.dex 至 classes8.dex),确认加载进入代码编辑环境。
- 关键词定位核心逻辑:通过 “常量→过滤” 功能搜索关键词 “开通趣映 VIP”,定位至com.mxm.douying.main.ui.MineFragment类
该类包含 VIP 提示字符串定义及权限判断逻辑,关键代码片段如下: - line 107: invoke-virtual {v0}, Lcom/mxm/douying/bean/User;->getIs_vip()I # 调用VIP状态判断方法
- line 118: if-ne v4, v8, :cond_174 # 若VIP状态非1,则进入付费提示分支
- line 113: const-string v6, "开通趣映VIP" # VIP提示字符串
- line 117: const/4 v8, 0x1 # 1表示VIP状态
复制代码
(四)核心权限逻辑篡改
- VIP状态验证方法修改:导航至com.mxm.douying.bean.User类的getIs_vip()方法(该方法返回用户VIP状态,0为非VIP,1为VIP),原代码为:
- .method public getIs_vip()I
- .registers 2
- iget v0, p0, Lcom/mxm/douying/bean/User;->is_vip:I # 读取原始VIP状态
- return v0
- .end method
复制代码
修改为强制返回 VIP 状态(1): - .method public getIs_vip()I
- .registers 2
- const/4 v0, 0x1 # 强制返回VIP状态
- return v0
- .end method
复制代码
- VIP 有效期延长处理:通“导航” 功能定位User类的getVip_end_time()方法(返回VIP结束时间戳,类型为long)
原代码为: - .method public getVip_end_time()J
- .registers 3
- iget-wide v0, p0, Lcom/mxm/douying/bean/User;->vip_end_time:J # 读取原始结束时间
复制代码
修改为设置远期时间戳(如0xE8D4A51000L): - .method public getVip_end_time()J
- .registers 3
- const-wide v0, 0xE8D4A51000L # 强制设置远期结束时间
- return-wide v0
- .end method
复制代码
(五)重打包与功能验证
- 保存修改与重签名:完成代码修改后,保存DEX文件并退出编辑器,MT 管理器自动对 APK 进行重打包及签名(签名状态更新为 V1+V2+V3)。
- 安装测试:卸载设备上的原趣映 AI应用,通过 MT 管理器安装修改后的 “趣映 AI_2.7.9_kill.apk”。
- 功能验证结果:打开应用后,VIP状态显示为 “尊贵的VIP”,会员剩余时间更新为设定的远期时间(如“11553767”),角色模板及核心功能全部解锁,无付费提示弹窗,验证利用成功。
四、原理剖析 本次漏洞利用通过签名校验绕过→关键字符串定位→状态方法篡改→时间戳延长的流程实现权限解锁。核心原理是: - 应用通过User.getIs_vip()方法判断会员状态,篡改该方法使其强制返回 “已开通”;
- 通过修改User.getVip_end_time()的返回值,设置远期时间戳延长 VIP 有效期。
注:本逆向教程仅用于个人学习研究,请勿用于商业用途或侵犯应用开发者权益,一切后果与作者无关!
到这里,这次的逆向教程就暂告一段落了。每一处都尽量把原理讲清、把步骤铺实,毕竟比起 “给工具”,我更希望大家能练出自己拆解问题的底气。如果这套教程帮你跨过了逆向的入门坎、看懂了代码的关键逻辑,或者让你敢动手尝试实战案例,不妨各位观众们留个好评并打赏金币 —— 你的肯定会成为我打磨下一期内容的最大动力。咱们一起把逆向的基础打牢~ 感谢同行,下次教程再会!
|