手机上有秘密不想被同事、朋友或爱人看到?现在各大主流的手机安全软件纷纷推出“私密空间”或“隐私信箱”等功能,用来存放私密文件。“私密空间”可隐藏你的短信、电话、照片等内容,甚至可以隐藏程序本身,使得该程序的图标从桌面上消失。这就引入了两个问题:
1、
2、
以“网秦安全”推出的一款“私密空间”为例,其可以设置隐身模式,隐身模式开启后,私密空间的图标将从手机中消失,这样别人就不知道您在使用私密空间了。在隐身模式下,可以通过拨打“##私密空间密码”快速进入私密空间。
首先回答上面提出的第一个问题。以私密空间为例,在“设置”->“应用”中可查到该
应用仍然存在,且正在运行。如下图所示。
我们来大胆分析“私密空间”的实现原理:
1、
2、
3、
存在缺陷:
1、
2、
而我们的目标是:能够随意地隐藏掉手机设备上的任意一个应用,而不需要该应用的配合,让它从launcher界面上消失,但又不影响它的运行,并通过合适的方式把它启动起来。
二、突破和改进
目前,我们的技术可以实现这一目标:对于所有出现在launcher界面的应用,让用户选择哪些需要被隐藏,对于被隐藏的应用,我们可以让用户通过一定的形式,直接启动该应用,退出应用后,该应用仍然处于“隐身”状态。若该应用被卸载再安装,仍不会出现在launcher界面。
我们不需要通过第三方应用实现,这样就避免了第三方应用申请root权限,从而导致系统因为root而造成的安全性降低。我们必须有手机厂商对Android系统进行定制化修改,添加一个具有root权限的service来管理设置被隐藏应用的包名(以下简称为黑名单)。其他进程可通过这个service获得黑名单。App应用则必须遵循一定的协议和授权才能和这个service沟通,以达到安全的目的。
1、
以下是我们提供的部分SDK API接口:
public boolean setHideAppPolicy(String pkgName, boolean flag);//设置被隐藏应用
public boolean getHideAppPolicy(String pkgName);//获取应用的隐藏状态
public List queryHideAppPolicy();//获取被隐藏应用黑名单
2、
3、
4、
public Map queryHideAppInfo();//获取被隐藏应用黑名单入口信息
我们从系统级入手,不依靠某一个应用程序来完成隐藏应用的功能,而是通过修改目标应用(用户希望隐藏的应用)的信息,使得即使更换桌面浏览器,也依然无法显示它们。同时,在用户不需要隐藏它们时,再将它们的信息还原,并且保证在这一系列操作中,不破坏或影响被隐藏应用的使用
当然,我们的实现方式并不是唯一的,也不是最全面的。由于隐藏应用程序这一功能尚未有明确的标准和定位,市场上的类似功能也不多见,因此存在着一定的争议:
1、对于被隐藏的应用,需不需要让其在设备上“彻底”消失?即:不管是普通用户通过手机上的“设置”->“应用”,还是开发工程师通过调用SDK API接口查询PackageInfo,都无法得到被隐藏应用的信息。只有设置隐藏应用这一操作的手机用户自己可以通过我们的一个加密入口,才能找到被自己隐藏了的应用,并可将它们启动起来。从技术上说,我们可以通过修改packageInfo来达到这个目的。
2、针对被隐藏的应用,在隐身状态下,需不需要仍在后台运行?
2.1) 若维持被隐藏应用在后台运行,其目的也就是手机用户希望手机上的某些应用虽然在运行,但不能被他人随便launch起来。这就牵扯到两点:
i) 被隐藏应用在后台运行,但不发送消息,比如通知栏消息,toast等。屏蔽通知栏消息,并在被隐藏应用取消隐藏状态后,重新恢复通知栏消息推送,这是技术可行的。我们目前并未实现这一点,是由于用户需求的不明确。
ii) 被隐藏应用在后台运行,但可以接收、发送消息。比如微信、陌陌、qq等在接收到新消息后,可以发送通知栏消息以提示用户,用户可以随时launch它们。又例如用户希望某些被隐藏应用在后台继续下载东西。我们已经实现了这一点。
2.2) 禁止被隐藏应用在后台运行。一旦某个应用被隐藏,则直接kill掉该process,停止其工作。这一举措可以节省系统资源、省电等,但用户在需要使用它们的时候必须重新启动这些应用程序。
用户的潜在需求是推动技术进步的动力,然而对于这样一个尚未成型的新技术,用户的潜在需求总是比我们能想到的多。若各位看官有独到的见解或特殊的需求,若大家对这一技术感兴趣,欢迎共同商讨,以寻找更有价值的解决方案。