【Android 原创】MIUI 12稳定版系统中的开发者选项限制解除 | 您所在的位置:网站首页 › 小米电视登录设备上限怎么解除 › 【Android 原创】MIUI 12稳定版系统中的开发者选项限制解除 |
以下MIUI 12限制解除: 1.开发者选项中的USB安装必须插入SIM卡2.开发者选项中的USB调试(安全设置)25秒窗口绕过3.通过ADB命令行安装APK时提示小窗口“是否继续安装”0x00 定位第一个限制代码实际控制权限App:com.miui.securitycenter过程摘要: 一开始以为在com.android.settings包App里面,经过界面定位发现竟然在MIUI手机管家。 解包,JEB 3.24 Decompiler之后迅速定位相关Activity: com.miui.permcenter.install.AdbInstallVerifyActivity 该Activity寻找的办法是:点击开启USB安装后,利用“开发者助手”的界面分析器看到栈顶界面有一闪而过的com.miui.permcenter,由于是一闪而过的小窗口,他显示的是“正在开启...”,然后迅速提示我”请插入SIM卡“,截图来不及,就不上图了. 随后找到com.miui.securitycenter,利用AdbInstallVerifyActivity类名迅速定位,详细寻找过程不再赘述。 查看OnCreate函数,可以看到 直接在启动了一个后台网络线程,请求网络,查看q.a后发现是检查用户是否有权限解锁: 此处不提,往下看可知 又执行了一个b函数,检查是否登录小米账号。我这里已经登录所以没有报错。如果想在不登录账户的情况下解锁,可以考虑回溯该处堆栈信息以进行判断Hook,让他直接走this.a()函数。 我们继续查看this.a函数: 可以看到开始进入布局界面inflate,做开发的看到这个函数一定很熟悉了,界面加载。 setupAlert函数没什么看头,目测是打开提示窗口。 我们直接看d函数 d函数很有意思,先进行了网络判断,如果没网会提示你开网再玩.有网的话它会执行一个后台任务. 我们到new a这里看。 a是一个内部静态异步任务 里面持有了一个弱引用上下文防止内存泄漏。 既然是Asynctask那么我们就关注一下两个特殊函数 doInBackground是优先于onPostExecute执行的,是进行网络访问等耗时操作,然后把结果传回UI线程函数onPostExecute。 也就是说,我们只需要直接看结果接受函数:onPostExecute. doInBackground是返回了错误信息,用于this.a函数接受,如果不符合解锁条件那么a函数将会吐司它的String信息。 点开this.a(((String)arg1));我们看下a函数是干嘛的: 直接预览一看,v0不用看了 是上下文 不会出现null指针,所以第一个判断直接忽略,看第二个:arg4 == null那么执行v0.c()函数。 c函数又是干嘛的?我们预览一下: 这个没什么好说的了,InputApplyActivity不是我们的界面,略过,所以this.c一定是false才对。 又执行了this.a(true)函数,我们看一下: 好,最后执行了最终操作函数:d.a(clazzInstance).a(Boolean) 跳过去一看: 对头了,终于找到控制adb安装的选项。 重新梳理逻辑: this.onPostExecute(null)参数必须为null,然后cls.c.value = false直接判断为false走this.a(true)函数,最后执行了a(true)函数,整个Hook就完成了。剩下的工作MIUI已经做好了,我们Hook的只有两个地方。 解除限制SIM卡的FrIDA Hook代码:(注释较多) 0x01 寻找解除USB调试(安全设置)25秒窗口 实际控制权限App:com.miui.securitycenter过程摘要:类似0x00节,这里是弹出窗口后用“开发者助手”查看栈顶Activity,得到当前界面:com.miui.permcenter.install.AdbInputApplyActivity 根据类名迅速定位: 既然是两个按钮,直接定位相关onClick代码 看到图中有一个0x7F090017和0x7F090502,一个ID是Accept和Reject,此处不难理解。 有趣的是ID:reject处调用了一个a函数。我们看: 那么如果我们设置它参数为true,会怎么样呢?答案是会重启手机adbd,成功开启该选项,从而绕过25秒提示。 0x02 寻找解除是否继续安装限制实际控制权限App:com.miui.securitycenter过程摘要:还是在MIUI手机管家里。MIUI真厉害! 简单分析,拒绝和继续安装还是按钮。 直接从activity找相关执行函数: 可以看到,有一个arg3和arg4. 通过frida下log断点得出 当用户点击拒绝时arg4为-1,否则为-2. 我们看下a.a函数验证猜想: 果然,只有-2时参数arg3才是false,即allowed_pkg. 所以我们可以这样写:主动调用onClick(null,-2),然后finish()让窗口自己消失,这样就达到了不用点击全自动安装App不受限制的目的。 看代码: 0x03 结果App也直接成功直接安装进入debugger模式。 原文链接:https://www.52pojie.cn/thread-1274517-1-1.html |
CopyRight 2018-2019 实验室设备网 版权所有 |