Matrix 首页推荐
Matrix 是少数派的写作社区,我们主张分享真实的产品体验,有实用价值的经验与思考。我们会不定期挑选 Matrix 最优质的文章,展示来自用户的最真实的体验和观点。
文章代表作者个人观点,少数派仅对标题和排版略作修改。
简介
这是「你的必要隐私手册」系列的第二章 —— 关于「联网控制」与「限制应用列表读取」。
如果你并未阅读过本系列的第一章,推荐先从那里开始:《你的必要隐私手册(一) —— 权限管控,存储空间隔离》。本章的许多内容将以那篇文章为基础展开。
为简洁起见,本文及以后的系列文章将不再重复实操条件与例行声明(除非相对之前的文章有变动。这种情况将另行声明)。取而代之,这篇文章(当然,后面的文章也是如此 😊)将直入主题,探讨在 Android 手机下,两个可以切实保护隐私的办法:
- 控制联网;
- 限制应用列表读取;
需要注意的是:本章需要你在 Magisk 的基础上,再额外安装一个框架:LSPosed1。这是一个现代化的 Xposed 实现。安装方式将与正文一同给出。
话不多说,让我们开始吧。
控制联网 —— AFWall+
⚠ 部分应用(如「某某运动健康」)可能会因长时间无法正常连接至互联网而停止运行。
⚠ 如设定「局域网限制」,部分需要「回环连接」的应用可能无法正常工作。
本章将要介绍的应用:AFWall+,是一个可以控制应用联网行为的「防火墙」。它可以管控某个应用与互联网或者本地其它应用的通信行为。
举个例子。你也许不希望这些应用能够访问互联网:
- 输入法。因为它可能忠实的记录了你在手机上的每一次输入;
- 通知收纳。因为它能拿到你所有的通知记录;
- 电子保险柜。因为它有能力读取非常重要的信息。
那么,不妨遵循「最小权限原则」,关上它们访问互联网的大门。
AFWall+ 是一款免费且开源的应用,你可以在 GitHub 找到它的源代码。它将需要 root 权限来设定拦截规则。
安装
你可以点击下面的卡片,或者在合适的渠道下载并安装 AFWall+。
下载并安装完毕后,应用可能处于英文状态。你可以通过录屏所示的步骤将其切换为中文:
下文将假设你的 AFWall+ 处于中文状态。之后,本文还会介绍 AFWall+ 的一个功能,叫做「局域网控制」。它将会在文章的后半部分用到,因此先在这里开启它:
- 点击「右上角三个点」、「首选项」、「规则/连接」;
- 选中「局域网控制」。
完整的操作录屏如下:
之后,回到应用首页,开始设置联网管控规则。
设置联网管控规则
迎面而来的,是一长串的列表。它代表着可以被施以联网规则的项目。也许你已经注意到了:开头的几个并不是应用,而是系统的一些组件等。它们不在本文的介绍范围内。你可以在之后自行了解每一项的作用。需要提醒的是:请不要在未明确作用的情况下修改这些「非应用的选项」,否则可能导致整个系统都无法正常连接到互联网。
与之同时,每个项目都有三个复选框,代表可以控制的联网行为。从左至右,分别是:
- 局域网;
- WIFI;
- 移动数据。
介绍到这里,你也许已经跃跃欲试,想要限制某些应用的联网行为了。如果现在就勾选一些项目的选项,并在开启防火墙的情况下点击「右上角三个点」、「应用规则」,你会发现:除开被勾选的应用,其它的应用都无法上网了。这是因为 AFWall+ 默认被设定为「白名单机制」:只有勾选的应用才允许连接对应的网络。你可以点击主界面的这个地方将 AFWall+ 设定为「黑名单模式」(阻止所选项):
这样,只有你勾选的项目才会被阻止,而其它未勾选项将默认放行。下文的介绍也以「阻止所选项(黑名单)」为前提。
为方便理解,举例说明用法:你想要阻止列表里的 Abstruct 应用连接到 WIFI。那么,只需要勾选 Abstruct 所在项的第二个复选框即可。
设定完成后,不要忘记点击「右上角三个点」、「启用防火墙」,来应用你的拦截规则。
需要额外说明的是:「启用防火墙」只在第一次应用规则时需要点击。之后该选项将变为「禁用防火墙」。后续请点击「应用规则」,以应用新设定的管控策略。
如果现在就打开应用,你会发现:在连接到 WIFI 的情况下,该应用无法加载出任何互联网的内容了。
这代表成功施加联网限制。当然,该限制目前只针对于 WIFI。如果需要,还可以勾选第三个复选框 —— 移动数据。这样,该应用就无法借助自己的力量,通过「WIFI」与「移动数据」发送任何数据到互联网了。
局域网
细心的你也许发现了:这里加上了一个值得注意的限定语:「借助自己的力量」。
难道说,应用可以借助别人的力量,以实现发送数据的目的?至少目前的设定下,是可以的。被限制的应用,理论上可以通过「局域网」将自己的数据传输给另一个应用,并以另一个应用作为代理,将数据发送至互联网。
幸运的是,要解决这个问题很简单,只需要同时勾选第一个选项即可。这样,这个应用就无法通过「局域网」与其它应用传输网络数据了。
也就是说,如果想要彻底限制应用在通常情况下2的联网行为,应该将三个勾都勾上:
同理,你可以针对需求,对特定的应用设定合适的管控规则。之后,这个应用就会安分的呆在本地,不会意外的和外面的网络世界有联系了。
因为该软件免费且开源,所以没有附上替代品。
隐藏应用列表
⚠ 会破坏应用的分享功能(相应应用无法得知被分享应用的存在)。但可以通过「保存副本」等应用进行「中转」,以变相达到分享的目的。
⚠ 如开启「白名单模式」,且未选择「排除系统应用」,请记得在模板中加入系统的 WebView 应用,否则被隐藏且依赖于 WebView 的应用会闪退。
⚠ Syscall 相关的拦截还未做出(截至写稿日)。但其它的检测方式可以成功拦截。
由于一些众所周知的原因,Magisk 等会修改系统的软件包名被列入了一些软件的反作弊清单内。尽管这在一定程度上帮助维持了软件行业的健康发展,但也误伤了众多以相同方式优化 Android 的用户。
与之同时,也有一些软件,会利用各式各样的系统漏洞,来试图获知手机上安装的应用程序列表,以期生成用户的数据画像。
因而,限制一些应用读取应用列表,就成为了平衡隐私与便利的重要方法之一。HideMyApplist 就是这么一个 Xposed 模块,可用于限定指定应用可以读取的应用列表。
为保证最佳体验,本文后面的内容将用 LSPosed 框架进行技术演示。其底层依赖于 Riru。如果不清楚 Riru 的用途,是什么以及如何安装,那么可以 点击这个链接 查看本系列第一章对它的介绍。如果不知道 Xposed 是什么的话,你可以将其看成一种「免刷 ROM 即可修改系统的框架」,或是到 XDA 查看对 Xposed 的详尽介绍。
安装
在开始之前,需要安装 LSPosed。这是一个现代化的 Xposed 实现。可以在 Magisk 仓库里下载到 LSPosed:
安装完成后,请重启手机。重启完毕后,应用列表里面应该会多出一个叫做 LSPosed 的应用。这代表安装完成,可以进行后面的步骤了。
点开 LSPosed,你应该可以看到类似绿色的「已激活」的画面:
需要说明的是:在未安装并激活任何「模块」的情况下,LSPosed 不会发挥任何作用。示意图中的「XX模块已启用」是针对已经设定好的情况,不代表初始效果。
如果能看到绿色的「已激活」,则代表 LSPosed 工作正常3,可以添加「模块」了。点击「仓库」,找到「隐藏应用列表 / Hide My Applist」,并右滑到「版本」栏中,点击「附件」以下载模块安装包。
安装完成后,请在 LSPosed 中激活该模块。步骤如下:
- 点击「模块」、「隐藏应用列表」;
- 打开顶部的「启用模块」。
最终效果图如下4:
之后,须重启手机。重启完毕后,打开「隐藏应用列表」,开始设置应用列表读取规则。当然,在未设定之前,「隐藏应用列表」不会真的拦截应用对列表的读取请求。请忽略示意图中的拦截情况。
设定拦截规则
为了拦截应用列表,需要定义「模板」。这是一串清单,其根据「白名单」或是「黑名单」的设定来拦截位于清单上应用的探测。当然,你也可以根据需求选择「白名单」模式。这里将使用「黑名单」机制进行演示。点击「模板管理」,并点击「创建黑名单模板」,开始设置模板。
这里有一些(可以设定的)选项,下面逐一介绍一下:
- 模板名称:标识符,方便管理。对实际拦截无影响;
- 被 X 个应用使用:不可设定。表示该模板被多少应用使用。由于还没有对任意应用应用该「模板」,这里的计数为 0。暂时忽略即可,对设定模板无影响;
- 隐藏 X 个应用:指定该模板需要拦截的应用列表。在这里被选中的应用,将无法被应用了「模板」的应用读取;
- 启用 X 条 maps 规则:本文将忽略它,因为默认的拦截规则已经能够挡住日常的读取请求。
为方便理解用法,先假定这么一个应用场合:
- 需要创建一个叫「隐藏 Magisk」的模板;
- 需要隐藏的应用是 Magisk。
那么,可以这么设定:
- 在「模板名称」填入「隐藏 Magisk」;
- 点击「隐藏 X 个应用」后的「编辑列表」,选中 Magisk。
完整的操作录屏如下:
不要忘记点击右上角的「软盘」图标以保存模板。保存完毕后,回到「模板管理」页面,你会发现刚刚创建的模板已经列出。
这样,就有了一个可以拦截读取 Magisk 应用的模板了。接下来,需要做的事情就是将该模板应用到「不希望读取到 Magisk」的应用上。为方便演示,这里以 LibChecker 作为示例。回到主页,点击「选择生效应用」,找到 LibChecker。
要启用限制,需要首先点击「启用隐藏」。这会使下方许多原本不可选择的选项变为可选。各选项的含义及(在这里)所需的设定如下:
- 工作模式:筛选要应用的模板类型。默认是黑名单。勾上就是白名单,不勾就是黑名单。由于需要的是「黑名单模式」,这里将不勾选此项;
- 启用所有隐藏模式:字面义。不勾的话,需要点击「选择隐藏方式」自行选择隐藏模式。为保证隐藏效果,这里将勾选此项;
- 选择隐藏方式:可选的隐藏方式。这里因选择了「启用所有隐藏模式」,忽略;
- 启用 X 个模板:对该应用施加的模板。由于在这里只需要「隐藏 Magisk」,因此选择「隐藏 Magisk」模板即可;
- 额外隐藏 X 个应用:字面义。这里不会用到,忽略;
- 额外启用 X 条 maps 规则:字面义。这里也不会用到,忽略。
字多不看?这里有完整的操作录屏:
不要忘了点击右上角的软盘图标来保存!🙋♀
如果这时强制停止5,并重新打开 LibChecker,你会发现:应用无法读取到 Magisk 了。
这代表拦截成功。自此以后,该应用就无法得知 Magisk 应用的存在了6。同理,你也可以对其它的应用施加这样的限制。这样,应用就无法读取到黑名单内的应用列表了。
验证拦截效果
不过,看到这里,你也许会思考这么一个问题:拦截真的生效了吗?要怎么知道它是不是真的生效了?不用担心,作者已经考虑到了这个问题。可以通过主页上的「检测测试」功能,来检测拦截是否真的生效。
使用方法如下:
- 给「隐藏应用列表」应用启用一个模板。这里将以「隐藏 Magisk」作为例子;
- 点击「设置」,开启「Hook 模块自身」;
- 强行停止「隐藏应用列表」;
- 长按删除掉除「com.topjohnwu.magisk」以外的包名(因为只做了拦截 Magisk 的设定。如不删除的话会影响到测试结果);
- 点击「检测测试」,进行测试。
完整的操作录屏如下:
最终的结果应该类似下面的截图:
如与上图一致,就可以证明「隐藏应用列表」确实已经生效7。
限于篇幅原因,展开介绍的内容就到这里了。但该应用还有许多高级的拦截功能,不妨一试:
- 除了黑名单,还可以用「白名单」限制特定应用「只能读取的应用列表」;
- 一个应用可以应用多个拦截「模板」。这在简化特定设定方面非常实用;
- maps 拦截;
- 该模块有一个配套的 Magisk 模块8,可以按需启用。
因为该软件同样免费且开源,所以没有附上替代品。
结语
以上就是两个保护隐私的方案介绍的全部内容了。
受制于 UI 设计的原因,这里介绍的两个软件上手起来会相对复杂一些。不过,在设定完成后,便不必始终操心。
也许你已经注意到了:这里介绍的内容操作起来比较局限,也许还会损伤到应用的正常功能。因此,下一期文章中,将介绍禁用应用组件的方法。这样,既可以尽量避免破坏应用的正常功能,又能在一定程度上保护隐私。
一如既往的,衷心希望这里的内容对你有所帮助,也衷心感谢 Unsplash 提供的无版权精致图片。本文的许多图片都来自于此。那么,下期见。
> 下载少数派 客户端 、关注 少数派公众号 ,了解更妙的数字生活 🍃
> 想申请成为少数派作者?冲!