3.0 的安全更新
AxManager 以 ADB(或 root)的权限运行。3.0 改变了获取这些权限的方式:你从未允许过的应用无法触及它们,甚至无法得知 AxManager 的存在。请同时更新 AxManager 以及所有基于其 API 构建的应用。
3.0 之前基于 Axeron API 构建的应用无法连接
3.0 改变了应用连接服务的方式。使用 2.x axsh 库的应用找不到服务,需要使用 3.0.0 或更高版本。基于 Shizuku-API 构建的应用不受影响。
修复了什么
以下每一项都可能让某个应用或网站在你未允许的情况下触及 AxManager 的 shell,而且都不需要 root 或电脑。
| 3.0 之前 | 现在 |
|---|---|
| 应用可以冒用 Shizuku 应用的包名,被当作 AxManager 的管理器。 | 只有通过 Shizuku 兼容连接服务的 Shizuku 应用才拥有 Shizuku 应用的权限,而且只在那里有效。 |
| 获得已卸载应用 uid 的应用可能继承它的权限。 | 权限属于应用的签名证书,而不是 uid。其他应用,或由他人签名的同一应用,都会被重新询问。 |
| 从插件 WebUI 打开的网站可以运行命令。 | WebUI 页面只能是插件自己的;其他网站会在浏览器中打开,且无法被嵌入框架或接收表单提交。参见 WebUI API。 |
| 应用可以抢在服务之前监听 axsh 的 socket,接收终端的输入。 | axsh 只连接由 root 或 shell 持有的 socket,而且它的名称只告诉已获准的应用。 |
| 应用可以向其他应用冒充服务。 | 应用只接受能从 root 或 shell 证明自己、且只为自己这次连接作答的服务。 |
对你的影响
- 每个应用都有自己的访问。 服务从不把自己的连接交给其他应用。每个获准的应用得到只属于自己的连接,你撤销权限后立即失效。
- 重新安装的应用可能会再次请求。 如果应用以其他密钥签名重新安装(例如用调试版替换正式版),AxManager 会把它当作新应用。
- 应用通过 AxManager 的对话框请求。 尚未获准的应用可以打开 AxManager 的权限对话框;在你回答之前,它什么也得不到。
- 你可以隐藏 AxManager。 开启 AX-Stealth Mode 后,你未允许的应用既看不到对话框也得不到任何回应,就像 AxManager 未安装一样,Shizuku 客户端也包括在内。新应用改为在应用列表中允许。
AxManager 本身仍会显示在启动器中,也能被可列出所有已安装应用的应用看到:这些来自 Android,而不是 AxManager。
对应用开发者的影响
- 使用
3.0.0版本的axsh库。 - 你的应用不再从广播中读取服务。获准之后,服务会把只属于你的应用的连接交给它;
AxBroker会在第一条命令时等待它。 - 用
AxBroker.requestAccess(activity, requestCode)请求访问,用AxBroker.findManager(context)找到 AxManager:任何地方都不需要包名。
详情参见 与应用连接。