基于《安卓逆向这档事》其三VIP破解的学习和总结
```toc```
# 描述
来源于吾爱破解论坛正己大佬的《安卓逆向这档事》三、初始 smali、vip 终结者课程,根据大佬的技术贴,个人的学习过程
<iframe src="//player.bilibili.com/player.html?bvid=BV1a8wKeeEzu&page=1" scrolling="no" border="0" frameborder="no" framespacing="0" allowfullscreen="true"> </iframe>
## 资源链接
相关软件:https://wwzc.lanzoub.com/b00efdpopi 密码:9y0w
视频链接:https://www.bilibili.com/video/BV1a8wKeeEzu/
正己《安卓逆向这档事》:[基于《安卓逆向这档事》其二APK双开、汉化、软件图标修改等问题的实现与总结 - 吾爱破解 - 52pojie.cn](https://www.52pojie.cn/forum.php?mod=viewthread&tid=2000479&page=1#pid52250745)
****
## 工具
1. 教程 Demo
2. 核心破解
3. MT 管理器
4. 界面分析
5. 雷电模拟器
****
## 课程任务
1. 完成关卡2
2. 掌握**修改判断、强制跳转、修改寄存器的值** 的基本原理
****
# 实现过程
## 前情提要
本次主要完成的任务,是正己大佬的教程 Dome 第二关 `初试smail语法&快速定位之id与字符`

****
### 快速定位
教程中讲述的两种快速定位方法:**id** 和 **字符**分别对应 **idHex 和 text** ,使用类似于界面分析 APP 带有布局分析功能的软件,就可以查看控件信息,然后使用 MT 管理器搜索定位

!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2014:48:11-513.webp)
****
### 初试 smali
不得不说,到了今天相比于17年18年,AI 对学习有了很大的便利
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2014:55:12-353.webp)
****
正己大佬在教程中对 smali 有解释学习,在这里就不过多阐述了,在 MT 管理器和 NP 管理器中都内置了 smail 指令查询
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:15:49-356.webp)
****
## 过程复现
首先会将两个定位方法复现一遍,然后进行三种修改方法
### 快速定位
#### 其一 文本定位
首先,观察界面,查看文字,任务要求是获取硬币并一键三连。主要的两个分别是 `获取硬币` 和 `一键三连`,回到 MT 管理器,搜索(PS:MT 管理器如何提取安装包定位位置就不细说了,具体可以看一下上期文章[基于《安卓逆向这档事》其二APK双开、汉化、软件图标修改等问题的实现与总结 - 吾爱破解 - 52pojie.cn](https://www.52pojie.cn/forum.php?mod=viewthread&tid=2000479&page=1#pid52250745))
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:37:49-965.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:45:29-812.webp)
****
搜索出了两个文件已知 `resource.arsc` 文件是一个资源 ID 映射表,那么把 `classes.dex` 用 dex 编辑器++,再搜索“一键三连”
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:45:57-813.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:48:18-439.webp)
****
这样就定位到了位置
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:48:52-732.webp)
#### 其二 id 定位
通过界面分析 APP,查看当前界面可查看的控件,比如“一键三连”的控件信息
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:50:32-851.webp)
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:51:44-432.webp)
****
获得 id 以后,再回到 MT 管理器中,搜索
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:54:00-269.webp)
当提示搜索无结果的时候,可以根据需要进入 dex 文件或者 arsc 文件查询,比如查资源就去 arsc,查代码就去 dex
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2015:54:39-006.webp)
本次主要是查代码,所以进 dex,然后一个一个查看就可以了
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2016:02:33-270.webp)
### 修改方法
首先打开根据前面交的定位法,找到包含会员的文件
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2016:52:35-138.webp)
****
打开第一个文件,我们会看到下面这些代码,smali 就指的是下面这些,在这里就需要一些基础知识
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2016:55:47-657.webp)
在这里,`.line {num}` 代表在源代码中的行数,也就是说可能7~8行在源代码中只有1行
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2016:58:14-786.webp)
反正也可以用查询,MT 管理器/NP 管理器都自带 smali 指令查询,但是在编辑器中不能用,可以复制到另一个软件进行查询
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2016:55:18-674.webp)
只不过,MT 管理器的会员可以安装插件,安装一个 smali 插件就可以了
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:05:40-272.webp)
好,基本的认知结束,下面开始实操
****
#### 修改判断
可以看到,如果当代码进入 `line 37` 的时候就代表会员破解完成,但是在他上一步的 `if-eqz p0,:cond_43` 代表 p0\==0的时候,跳转到 cond_43
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:07:58-466.webp)
跳转过来,就会发现,提示充值大会员
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:11:54-306.webp)
那么就可以修改 `if-eqz p0,:cond_43`,让 p0只有在不等于0的时候才会跳转
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:13:52-112.webp)
所以 **修改判断** 就可以把 `if-eqz` 改成下面任意一个就可以了
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:16:46-839.webp)
当然也可以直接注释掉
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:22:48-508.webp)
#### 强制跳转
强制跳转在这里需要用到一个命令 `goto`,代表无条件跳转
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:28:30-896.webp)
#### 修改寄存器
> [!在 smali 里的所有操作都必须经过寄存器来进行]
本地寄存器用 v 开头数字结尾的符号来表示,如 v0、 v1、v2。
>
参数寄存器则使用 p 开头数字结尾的符号来表示,如 p0、p1、p2。
>
特别注意的是,p0不一定是函数中的第一个参数,在非 static 函数中,p0代指“this",p1表示函数的第一个参数,p2代表函数中的第二个参数。而在 static 函数中 p0才对应第一个参数(因为 Java 的 static 方法中没有 this 方法)
首先我们可以看到, `isvip()` 这个函数反应大会员的情况 `Z` 表示返回布尔类型,放入代码中的逻辑就是,当 isvip 返回0的时候,跳转到 cond_43, 返回1的时候,继续往下
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:40:05-896.webp)
跳转到 `isvip ()` 查看赋值,可以看到给 `v0` 赋了十六进制的 `0`,返回出的结果是 `v0`,所以在这里修改为十六进制的 `1` 就可以了
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:46:00-582.webp)
#### 破解大会员完成
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:23:55-353.webp)
# 总结
问题只有一个,如何实现的解决方法却又无数个。比如强制跳转也不是非用 `goto`,也可以直接修改跳转对象
!(https://gitee.com/yuxin_wurenhui/tuchuang/raw/master/2025-01-18%2017:51:32-050.webp)
我也是个新手小白,接着放假在家的时候学习安卓逆向破解,希望能够给大家提供帮助,如果给您提供了帮助, 希望能够给我一个赞或者评论一下,希望能够帮助更多人谢谢大家!!!!! 非常棒,希望能继续更新下去!{:301_988:} 正己出现,还不快去更新;www 先顶一个,慢慢学习,拜楼主为师,我就跟你学啦~ 谢谢楼主了,慢慢学习,一定会有进步。 正己 发表于 2025-1-19 13:42
非常棒,希望能继续更新下去!
:lol嘿嘿,拜见大佬 感谢分享! 学习学习 写的真不错。学到了。感谢。
页:
[1]