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代码:(注释较多)
// 开启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稳定版系统中的开发者选项限制解除相关推荐
- 红米k20pro可升级到鸿蒙系统,小米9系列Redmi K20 Pro迎MIUI 12稳定版更新
中关村在线消息:据悉,小米9.小米9 Pro.Redmi K20 Pro以及尊享版用户已经接收到MIUI 12稳定版更新推送. 4月27日MIUI 12发布,MIUI 12进一步改进了全局深色模式,包 ...
- miui12android11,基于安卓11正式版打造 MIUI 12稳定版内测 首批支持小米系列
9月9日凌晨,Android 11正式版上线.MIUI官方宣布,基于Android 11正式版打造的MIUI 12稳定版已经内测,首批支持机型为小米10.小米10 Pro.Redmi K30 Pro. ...
- 【root】小米稳定版系统添加小米官方root权限
小米稳定版系统如何获得官方root权限?相信这个问题有不少朋友都想知道,平时小米稳定版的系统只能通过刷机精灵等第三方软件获得root权限. 但是这次,我们来点别的.毕竟一方面加第三方虽然能用,但是有广 ...
- 小米9支持Android11吗,安卓 10 来了!小米 9 Pro 推送 MIUI 11 稳定版更新
IT之家5月31日消息 据IT之家网友反馈,小米9 Pro 5G手机开始推送基于安卓10的MIUI 11稳定版系统更新,本次为跨版本的安卓系统大升级,为降低风险,建议提前备份个人数据,部分第三方应用尚 ...
- 小米9se开发版系统回刷MIUI稳定版系统
小米9se开发版系统回刷MIUI稳定版系统 第一次写博客,如有错误不详敬请谅解. 之前也是想要抢鲜体验MIUI11,毕竟是从MIUI7用到MIUI11的忠实米粉.然后就去申请了MIUI11内测版,结果 ...
- 红米note4出厂系统版本_红米 Note 4 开始接收 MIUI 10 国际稳定版系统更新
IT之家11月15日消息 据91mobiles报道,去年1月,小米推出了 Redmi Note 4 (红米Note 4),这款手机发布后即成为印度最畅销的两款智能手机之一,另外一款是 Redmi ...
- miui 10 android 9,MIUI 10稳定版刚到 基于安卓9的MIUI10 8.9.7开发版也来了
经历了从5月底到现在小米陆续发布的多个MIUI 10的诸多开发版本后,日前,小米终于正式推送了MIUI 10的正式版,根据官方公布的信息显示,此次可以接到MIUI 10的小米机型共包括小米.红米旗下的 ...
- 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 ...
- MIUI10设置Android通知,MIUI10稳定版系统开始推送,附可升级机型及更新方法
MIUI10稳定版推送时间定档9月10日 经过3个月的等待,小米MIUI10稳定版系统正式在9月10日开始推送了.根据官方的介绍,MIUI10稳定版首批支持的机型有12款,具体为:小米8SE.小米MI ...
- miui11未升级android版本,MIUI 11稳定版正式推送,升级前你需要了解
原标题:MIUI 11稳定版正式推送,升级前你需要了解 10月18日,MIUI官网正式宣布MIUI 11 正式推送,这是在小米MIX Alpha发布会之时同时推出的,在经过内测.公测后正式面向大众消费 ...
最新文章
- 【 FPGA 】常数( localparam )和参数( parameter )
- 最新版本mysql jdbc驱动包获取表定义信息空指针异常处理方法
- 《系统集成项目管理工程师》必背100个知识点-87系统文档验收
- JQuery 网站换肤功能
- Android JNI编程(三)——C语言指针的初步认识、指针变量、互换两个数、函数返回多个值...
- bzoj 3489 A simple rmq problem——主席树套线段树
- 安装ORACLE 11。2.0.3 配置GRID执行脚本信息记录
- vba怎么安装_学VBA,这些最基础的概念一定要知道
- 【强化学习】可视化学习tensorboard
- Python读写文件的路径,关于os.chdir(path)位置对程序的影响,
- mysql with as 用法_英语语法丨英语中just的用法总结,你掌握了吗?
- 原型即对象(以及认识这点的重要性)
- java hibernate unable to read xml_各位大神,这是什么错误啊
- CentOS 6.9 下安装DB2
- Arcgis字段计算器实现自动编码
- 网上银行“安全登录控件”分析(zt)
- 下载Postman并且汉化使用
- win7下使用变色龙引导linux
- 华为云域名注册_华为云申请个人域名步骤
- 怎么把桌面计算机放到快速启动栏,快速启动栏,教您电脑快速启动栏不见了
热门文章
- 沃特玛采集均衡模块_采集均衡模块以及电池管理系统_2016212573884_说明书_专利查询_专利网_钻瓜专利网...
- App山寨疯狂 爱加密Apk加密平台防破解
- R语言 最新TwoSampleMR、MRInstruments包安装教程
- PS2019橡皮擦工具、背景橡皮擦工具、魔术橡皮擦工具
- 博途v14 加入C语言的方法,如何利用博途V14新建S7-1200项目?
- 一文速学-时间序列分析算法之一次移动平均法和二次移动平均法详解+实例代码
- 移动平均法,滑动平均模型法(Moving average,MA)
- Swing-图表(扇形图的绘制)
- BPSK调制与解调-MATLAB基带仿真
- matlab灰度直方图均衡化_图像的灰度直方图、直方图均衡化、直方图规定化(匹配)