从此功能在Android4.2以上无效来看,应该是利用MasterKey,以下为回答原文,为了保持纯技术性,删除原作最后一段的主观评论:
先回答提问者的问题。众所周知,要卸载系统应用,需要 ROOT 权限。实际上,只是需要 system 文件夹的操作权限而已,ROOT 的第三方应用获取系统目录操作权限的最基本条件。到现在也是。那我们来看一下 LEB 这次更新是通过什么手段来实现的不 ROOT 也可以卸载系统应用的。
新版 LEB 如果要解锁应用卸载的话,需要开启主动防御。主动防御有两种方式,免ROOT启动和ROOT授权启动。ROOT授权启动这里就不提了。我们来说一下免ROOT启动。点击免ROOT启动,会提示先修复 MaterKey 漏洞。我们点击获取系统补丁。会下载一个安装包并且进入安装模式。
使用过 Android 手机的同学这时候应该会注意到什么。没错,这是更新。而不是重新安装。有同学就问了,我之前没有安装过一个叫做 “LBE Master Key漏洞补丁” 的东西啊,怎么会是更新呢?没错,这就是 LBE 利用 Master Key 漏洞 实现的更新系统应用。安装之后就会重启,重启之后就可以开启安全防御了。这时候什么卸载系统应用,权限管理等操作都可以实现。这些我们不关心。我们去看看“LBE Master Key漏洞补丁”这货到底是个什么。为什么安装了它就可以实现 免ROOT 模式。我们去系统设置,应用里面找到它。如图。
事实再一次证明我们是正确的。有一个卸载更新的按钮,这个时候应该一部分同学知道了。只有更新的系统应用才会有卸载更新,否则只有卸载。那我们来卸载更新来看看它到底替换了哪个应用。卸载之后露出了真身。Icon 和 VersionName 都没换,只是加了自己的代码。换了 APP 的名字。
所以,LEB 的 免 ROOT 的实现原理就是,通过利用 Master Key 漏洞替换系统本身应用而实现加载自己的代码。这个时候自己的代码拥有最高权限。便可以实现卸载系统应用,权限管理等操作。
我们再说一下为什么 LBE 要替换 Settings Storage 这个应用。简单的说 Settings Storage 是一个 Android 内部程序,在 Android 开机时就会加载,这也是 LBE 要在开机时把自己的代码 HOOK 到系统上的必要条件。
那为什么 LBE 可以替换系统内部应用呢。其实就是利用了 Master Key 漏洞。在不修改 APP 签名的同时可以修改 APP 的代码。LBE 拿到 Settings Storage 这个 APP。反编译,修改代码,重新打包。就可轻易实现了。而关于 Master Key 漏洞,下面的 Android 的源码应该可以说明了。这里就不详解。