AppOps应对Android应用流氓权限行为及肆无忌惮的后台服务

AppOps是Android 自4.3加入的应用权限授权管理框架,虽然到了后来6.0引入了另外一套方案Android Runtime Permission,但是 AppOps并没有被废弃掉,它依然存在于系统框架内,只不过没有图形管理入口而已,但是依然保留并增加了API,而且AppOps命令行管理工具依然可用。我们所用到的就是AppOps Command line utility。

所有的OP(Operations),即操作权限列表

appops 命令是Android系统的可执行程序,我们要运行,需要使用电脑USB连接手机并开启开发者调试,使用 adb shell [-e escape] [-n] [-Tt] [-x] [command] 运行远程shell命令(如果没有给定命令则开启交互的shell终端) 在Android系统内执行shell命令。

现在,我们就要拿微信来举个例子,微信中文版在Android 6.0下强制要求读取电话状态信息定位读取写入外置存储权限,否则应用强制无法正常使用。我不知道大家怎么看待,我个人认为这三个权限都是可选的权限,微信就是在耍流氓。而我们就可以使用AppOps将其某项强制要求权限忽略掉,注意这里说的是忽略掉而不是禁用,如果单纯禁用在Android Runtime Permission内即可做到,但是微信可以感知到自己的权限被禁用,就会流氓的提示你应用无法使用。而AppOps可以忽略应用的权限申请,但是这个应用本身是无法感知判断的。在这里我们尝试禁用微信的读取电话状态信息权限、位置定位权限和后台服务运行权限(这个导致无法后台收消息):

通过上面的操作,微信已经无法获取上述权限,而且再退出微信应用后,几分钟后微信后台服务(注意Foreground Service不会被关掉)都会被系统关掉,但是微信应用本身的主进程依然是作为空进程缓存在内存中,而不是被整个杀掉。

作为Android开发者,真心希望大家能够尽可能的克制规范自己的行为,少申请一些非必要权限,少运行一些后台活跃唤醒服务。

 

  1.  AppOpsManager.java

“AppOps应对Android应用流氓权限行为及肆无忌惮的后台服务”的6个回复

  1. 权限列表可以参考http://security.nknu.edu.tw/publications/201511IMP111.pdf
    第8夜 表3
    7.1.1 微信 6.5.23关不掉 高精度定位……

  2. adb shell appops set com.tencent.mm FINE_LOCATION ignore

    然后get op 后,没有成功,而且维信还能找到位置

  3. 上面的命令执行了感觉没有作用啊,微信一样能感知到权限没被赋予,仍然会拒绝运行然后退出。

  4. adb shell appops set com.tencent.mm RUN_IN_BACKGROUND ignore
    Error: Unknown operation string: RUN_IN_BACKGROUND

发表评论

电子邮件地址不会被公开。