|
|
本帖最后由 挽梦遗酒 于 2025-9-23 03:22 编辑
练手软件 趣打印12.18.4[帖底链接] 事情是这样的:
本以为我 上帖 的方法已经打遍天下无敌手了[自认为] 没想到今天就碰到一个棘手题
棘手在于:根本没有非会员,触发的弹窗、提示、回调以及混淆类名
尽管大佬已经给出代码点击跳转,但是并没有给具体思路,所以我琢磨了很久[可能对于大佬们都是洒洒水的吧] ,本帖更多为自己记录此时的思路服务,同时给小白一些启发
话不多说
No.1大致思路- 之前对此软件有过逆向经验
- 故而知道会员时UI的样子[核心]
- 通过逆向分析,追本溯源,明确设置相关UI的方法
- 从而顺藤摸瓜,找到存储会员判断的根本依据
No.2明确动态布局所在
进入主界面
长按"升级至高级版",明显看到是依托于"按钮"而存在的
因此要知道一点
接下来要处理的不是文字视图,而是按钮控件
[图1]
使用"开发助手"
选中按钮布局
记录控件ID
[图2]
在dex中搜索对应ID
结果有多种
可以一一点进去查看
- 要知道
- setVisibility(0)
- 表示的是将视图设置为"显示状态"
- 而
- setVisibility(8)
- 则是完全隐藏视图
复制代码
根据逻辑来说,我们去找"是谁操作了代码后,显示了'升级至高级版'"更为合适
[图3]
于是进入如图所示方法
转Java或许你更明白
另外,有些方法中会有- if (!i.b) {
- imageButton3.setVisibility(8);
- }
复制代码
的存在,大致为判断按钮上没字,就把按钮隐藏
爱学习的你可以自行研究
[图4]
No.3顺藤摸瓜
长按导航查找调用是无法搜到的
虽然能找到重写方法,但是我们无法判断谁才是具体要改的那个[对我来说是这样的,有好方法欢迎指出]
所以,借助坛友[滑稽]的工具,打印调用堆栈
插入调用
[图5]
导入dex,注意名字
[图6]
该软件出于文件权限原因
需注入"文件提供器"
完成后运行一次软件
[图7]
接着点击"数据目录2"后的路径
[图8]
找到日志输出文件
[图9]
橙色箭头所指为我们需要查找的被调用方法
红色方框则是执行它的类和方法
复制后打开对应方法
[图10]
转入对应方法后
转Java分析
j.c j类c方法 返回的是一个boolean数组
对该数组进行判断,如果数组内有任意一个为true,则执行 runnable2.run 方法
如果没有true则执行 runnable.run
这里提示一下 两个run我们不知道谁是我们不想执行的run[作用为显示"升级至高级版"]
所以可以删除这个方法中任意一个runnable*.run进行控制变量,排除一下
[图11]
No.4"修正"
已知我们要执行runnable.run
所以我们要把c返回的数组改成true
跳转c方法
[图12]
选中c方法
[图13]
粘贴成如图所示[这个不懂请AI]
- .method static synthetic c()[Z
- .registers 4
- .line 1
- const/4 v0, 0x3
- new-array v0, v0, [Z
- .line 2
- const/4 v1, 0x1
- const/4 v2, 0x0
- aput-boolean v1, v0, v2
- .line 3
- const/4 v2, 0x1
- aput-boolean v1, v0, v2
- .line 4
- const/4 v2, 0x2
- aput-boolean v1, v0, v2
- .line 6
- return-object v0
- .end method
复制代码
[图14]
No.End完结撒花
[图15]
据说每次看见都不一样
半夜三经
码字不易,看在你那么聪明的份儿上
能否给我一个不起眼的好评呢
万分感谢
|
-
查看全部评分
总评分:好评 +3
金币 +4
|