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代码:(注释较多)

// 开启USB安装 主动调用无效
// ss.set('persist.security.adbinstall', '1')
var cls = Java.use('com.miui.permcenter.install.AdbInstallVerifyActivity')
cls.onCreate.overload('android.os.Bundle').implementation = function (arg) {this.onCreate(arg)var AdbInstallVerifyActivity$a = Java.use('com.miui.permcenter.install.AdbInstallVerifyActivity$a')AdbInstallVerifyActivity$a.onPostExecute.overload('java.lang.Object').implementation = function () {// console.log('onPostExecute')this.onPostExecute(null) //强制指定值为null让他走v0.c()函数继续启用ADB// a函数原型//protected void a(String arg4) {//  AdbInstallVerifyActivity v0 = (AdbInstallVerifyActivity)this.a.get();//  if(v0 == null) {//      return;//  }////  if(arg4 == null) {//      v0.c(); //走这里//  }//  else if(!TextUtils.isEmpty(arg4)) {//      Toast.makeText(v0.getApplicationContext(), arg4, 1).show();//  }//  v0.finish();//}}
}
cls.c.value = false //让程序强制完成判断
// protected void c() {
//     if(this.c) {
//         AdbInputApplyActivity.a(true);
//         return;
//     }
//
//     this.a(true); //执行启用ADB代码
// }
// 函数原型
cls.c.overload().implementation = function (params) {console.log(this.c.value) //打印日志 无作用this.c()
}
cls.a.overload('boolean').implementation = function (a) {console.log('我被调用了') //打印日志 无作用this.a(true) //这里True是MIUI固定的
}
//最后执行
// public void a(boolean arg2) {
//     b.b("security_adb_install_enable", ((boolean)(((int)arg2))));
//     SystemPropertiesCompat.set("persist.security.adbinstall", arg2 ? "1" : "0");
// }

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秒提示。

var SystemPropertiesCompat = Java.use('com.miui.permcenter.compact.SystemPropertiesCompat')
SystemPropertiesCompat.set.overload('java.lang.String', 'java.lang.String').implementation = function (a1, a2) {console.log('SystemPropertiesCompat', a1, a2)return this.set(a1, a2)
}
//由于该操作会断开frida与手机连接,此处做一个判断,若未开启(0)则设置为1开启该功能。
var adbinput = SystemPropertiesCompat.getInt('persist.security.adbinput', 0)
if (adbinput === 0) {console.log('persist.security.adbinput 开始设置')SystemPropertiesCompat.set('persist.security.adbinput', '1') //手机设置中成功开启
}
// 开启USB调试(安全设置)
// ss.set('persist.security.adbinput','1')

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不受限制的目的。

看代码:

var AdbInstallActivity = Java.use('com.miui.permcenter.install.AdbInstallActivity')
// 方法1 全自动版 自动运行后关闭
AdbInstallActivity.onCreate.overload('android.os.Bundle').implementation = function (arg){this.onCreate(arg) // 给他初始化的机会this.onClick(null, -2) //主动调用函数,-2与-1是同意和拒绝按钮this.finish() //自动同意后执行进程自杀
}
AdbInstallActivity.$init.overload().implementation = function () {this.$init();//执行完初始化函数后设置this.l的新值this.l.value = 999999console.log('构造函数', this.l.value)
}// 方法2 手动点击版(似乎没有必要) 点击任意按钮即可继续运行
AdbInstallActivity.onClick.overload('android.content.DialogInterface', 'int').implementation = function (a1, a2) {// this.onClick(a1,a2);a2 = -2;this.onClick(a1, a2)console.log('onClick', a2)
}

0x03 结果


App也直接成功直接安装进入debugger模式。

MIUI 12稳定版系统中的开发者选项限制解除相关推荐

  1. 红米k20pro可升级到鸿蒙系统,小米9系列Redmi K20 Pro迎MIUI 12稳定版更新

    中关村在线消息:据悉,小米9.小米9 Pro.Redmi K20 Pro以及尊享版用户已经接收到MIUI 12稳定版更新推送. 4月27日MIUI 12发布,MIUI 12进一步改进了全局深色模式,包 ...

  2. miui12android11,基于安卓11正式版打造 MIUI 12稳定版内测 首批支持小米系列

    9月9日凌晨,Android 11正式版上线.MIUI官方宣布,基于Android 11正式版打造的MIUI 12稳定版已经内测,首批支持机型为小米10.小米10 Pro.Redmi K30 Pro. ...

  3. 【root】小米稳定版系统添加小米官方root权限

    小米稳定版系统如何获得官方root权限?相信这个问题有不少朋友都想知道,平时小米稳定版的系统只能通过刷机精灵等第三方软件获得root权限. 但是这次,我们来点别的.毕竟一方面加第三方虽然能用,但是有广 ...

  4. 小米9支持Android11吗,安卓 10 来了!小米 9 Pro 推送 MIUI 11 稳定版更新

    IT之家5月31日消息 据IT之家网友反馈,小米9 Pro 5G手机开始推送基于安卓10的MIUI 11稳定版系统更新,本次为跨版本的安卓系统大升级,为降低风险,建议提前备份个人数据,部分第三方应用尚 ...

  5. 小米9se开发版系统回刷MIUI稳定版系统

    小米9se开发版系统回刷MIUI稳定版系统 第一次写博客,如有错误不详敬请谅解. 之前也是想要抢鲜体验MIUI11,毕竟是从MIUI7用到MIUI11的忠实米粉.然后就去申请了MIUI11内测版,结果 ...

  6. 红米note4出厂系统版本_红米 Note 4 开始接收 MIUI 10 国际稳定版系统更新

    IT之家11月15日消息 据91mobiles报道,去年1月,小米推出了  Redmi Note 4 (红米Note 4),这款手机发布后即成为印度最畅销的两款智能手机之一,另外一款是  Redmi ...

  7. miui 10 android 9,MIUI 10稳定版刚到 基于安卓9的MIUI10 8.9.7开发版也来了

    经历了从5月底到现在小米陆续发布的多个MIUI 10的诸多开发版本后,日前,小米终于正式推送了MIUI 10的正式版,根据官方公布的信息显示,此次可以接到MIUI 10的小米机型共包括小米.红米旗下的 ...

  8. mix2 android 公测,小米 6/MIX 2/Note 3 等正式停止 MIUI 12 开发版内测公测

    原标题:小米 6/MIX 2/Note 3 等正式停止 MIUI 12 开发版内测公测 IT之家6月21日消息 小米社区MIUI近期发布公告,为小米6.红米Note5.小米6X.小米Note3.小米M ...

  9. MIUI10设置Android通知,MIUI10稳定版系统开始推送,附可升级机型及更新方法

    MIUI10稳定版推送时间定档9月10日 经过3个月的等待,小米MIUI10稳定版系统正式在9月10日开始推送了.根据官方的介绍,MIUI10稳定版首批支持的机型有12款,具体为:小米8SE.小米MI ...

  10. miui11未升级android版本,MIUI 11稳定版正式推送,升级前你需要了解

    原标题:MIUI 11稳定版正式推送,升级前你需要了解 10月18日,MIUI官网正式宣布MIUI 11 正式推送,这是在小米MIX Alpha发布会之时同时推出的,在经过内测.公测后正式面向大众消费 ...

最新文章

  1. 【 FPGA 】常数( localparam )和参数( parameter )
  2. 最新版本mysql jdbc驱动包获取表定义信息空指针异常处理方法
  3. 《系统集成项目管理工程师》必背100个知识点-87系统文档验收
  4. JQuery 网站换肤功能
  5. Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...
  6. bzoj 3489 A simple rmq problem——主席树套线段树
  7. 安装ORACLE 11。2.0.3 配置GRID执行脚本信息记录
  8. vba怎么安装_学VBA,这些最基础的概念一定要知道
  9. 【强化学习】可视化学习tensorboard
  10. Python读写文件的路径,关于os.chdir(path)位置对程序的影响,
  11. mysql with as 用法_英语语法丨英语中just的用法总结,你掌握了吗?
  12. 原型即对象(以及认识这点的重要性)
  13. java hibernate unable to read xml_各位大神,这是什么错误啊
  14. CentOS 6.9 下安装DB2
  15. Arcgis字段计算器实现自动编码
  16. 网上银行“安全登录控件”分析(zt)
  17. 下载Postman并且汉化使用
  18. win7下使用变色龙引导linux
  19. 华为云域名注册_华为云申请个人域名步骤
  20. 怎么把桌面计算机放到快速启动栏,快速启动栏,教您电脑快速启动栏不见了

热门文章

  1. 沃特玛采集均衡模块_采集均衡模块以及电池管理系统_2016212573884_说明书_专利查询_专利网_钻瓜专利网...
  2. App山寨疯狂 爱加密Apk加密平台防破解
  3. R语言 最新TwoSampleMR、MRInstruments包安装教程
  4. PS2019橡皮擦工具、背景橡皮擦工具、魔术橡皮擦工具
  5. 博途v14 加入C语言的方法,如何利用博途V14新建S7-1200项目?
  6. 一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
  7. 移动平均法,滑动平均模型法(Moving average,MA)
  8. Swing-图表(扇形图的绘制)
  9. BPSK调制与解调-MATLAB基带仿真
  10. matlab灰度直方图均衡化_图像的灰度直方图、直方图均衡化、直方图规定化(匹配)