查看原文
其他

Android应用关于高敏感权限,应用未申请权限就安全?

哆啦安全 2022-07-23


1653918219(1).png

一个非系统的普通应用,通过手机的“应用管理”查看应用权限信息后,发现显示未申请任何权限,但这个应用由可能也是一个高危险的应用。本文介绍安卓里3个高敏感权限,但是申请后却不会显示在应用信息里。

前言

话说某天正在上班的时候,公司里的一位老员工找到我,让我帮看一下手机,说手机可能中病毒了,老是有很多弹窗广告和多了莫名奇妙的应用。有的应用还无法卸载!

一开始听【无法卸载】,我的想法是系统应用,但是他很肯定的告诉我说是最近才安装的应用。得到肯定回复后,我悟了,一定是激活了设备管理器!!!查看后果然是激活了设备管理器,取消激活后,顺利卸载了应用。

跟他进一步了解了整个事件过程:开始是收到了包含有链接的短信(大概是和5G有关的内容),他点了短信的链接,跳转了一个页面(浏览器),下载安装了应用,打开应用后,又跳转了其他页面,反正他看不懂,点了确认…经过几天的困扰后,才找到了我。

如果你看了此篇文章,不妨也帮家里老人看看手机上有没有异常应用,及时排除,避免信息泄露。当然这里分享的是特殊的权限,通常的就是检查应用有没有非必要但申请了通话记录、定位、通讯录、短信、电话等高危权限,有就关闭权限或卸载应用。

下面进入正题

一、设备管理器 DeviceAdmin

获取权限后,可以具有以下功能:
  • 删除所有数据

  • 更改锁屏密码

  • 设置密码规则

  • 监视屏幕解锁尝试次数

  • 锁屏:控制锁屏的方式和时间

  • 恢复出厂设置

  • 设置设备全局代理

  • 设置存储设备加密

  • 停用相机

d41bf446191b5a69d4b67192f3a628b.jpg

另外:权限激活后无法卸载应用,取消激活后可卸载


手机上如何查看

进入手机设置,在搜索框里搜索:设备管理

1653924928(1).png

华为手机搜索结果:

1653925020(1).png

小米手机搜索结果:

1653925120(1).png

点击进入后可查看那些应用激活了设备管理器

相关代码:

AndroidManifest.xml


1<!-- 设备管理器权限,注册权限监听器 -->
2<receiver
3    android:name=".receiver.AdminReceiver"
4    android:permission="android.permission.BIND_DEVICE_ADMIN"
5    android:exported="true">

6    <meta-data
7        android:name="android.app.device_admin"
8        android:resource="@xml/admin_manager_config" />

9
10    <intent-filter>
11        <action android:name="android.app.action.DEVICE_ADMIN_ENABLED" />
12    </intent-filter>
13</receiver>

配置文件,res/xml/admin_manager_config.xml


1<?xml version="1.0" encoding="utf-8"?>
2<device-admin xmlns:android="http://schemas.android.com/apk/res/android">
3    <uses-policies>
4        <!--停用相机 -->
5        <disable-camera />
6        <disable-keyguard-features />
7        <!--设置存储设备加密 -->
8        <encrypted-storage />
9        <!--设置锁定屏幕密码的有效期 -->
10        <expire-password />
11        <!--锁屏 -->
12        <force-lock />
13        <!--限制密码类型-->
14        <limit-password />
15        <!--重置密码-->
16        <reset-password />
17        <!--设置设备全局代理-->
18        <set-global-proxy/>
19        <!--监控屏幕解锁尝试次数 -->
20        <watch-login />
21        <!--恢复出厂设置-->
22        <wipe-data />
23    </uses-policies>
24</device-admin>


   

1/**
2 * 申请设备管理员权限
3 */

4private fun requestLockAdmins() {
5    //检查是否已经获取设备管理权限
6    val active: Boolean = mDevicePolicyManager!!.isAdminActive(adminReceiver!!)
7    if (!active) {
8        //打开DevicePolicyManager管理器,授权页面
9        val intent = Intent()
10        //授权页面Action -->  DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN
11        intent.action = DevicePolicyManager.ACTION_ADD_DEVICE_ADMIN
12        //设置DEVICE_ADMIN,告诉系统申请管理者权限的Component/DeviceAdminReceiver
13        intent.putExtra(DevicePolicyManager.EXTRA_DEVICE_ADMIN, adminReceiver)
14        //设置 提示语--可不添加
15        intent.putExtra(DevicePolicyManager.EXTRA_ADD_EXPLANATION, "DevicePolicyManager涉及的管理权限,一次性激活!")
16        startActivityForResult(intent, requestCode)
17    } else {
18        Toast.makeText(this"已经获取的DevicePolicyManager管理器的授权", Toast.LENGTH_LONG).show()
19    }
20}


   

1class AdminReceiver: DeviceAdminReceiver() {
2    /**
3     * 监听各种事件
4     */

5    override fun onLockTaskModeEntering(context: Context, intent: Intent, pkg: String) {
6        super.onLockTaskModeEntering(context, intent, pkg)
7    }
8}

二、无障碍 AccessibilityService

获取权限后,可以具有以下功能:
  • 读取屏幕上的内容和控制屏幕(可在其他应用上层显示内容,即悬浮窗)

  • 执行手势操作(点按、滑动、双指张合等手势)

非Root手机远程控制App就是基于此权限来实现手机手势操作的。

1653926092(1).png
手机上如何查看

进入手机设置,在搜索框里搜索:无障碍

相关代码:

AndroidManifest.xml

1<!-- 无障碍-->
2<service
3    android:name=".service.MyAccessibilityService"
4    android:description="@string/accessibility_describe"
5    android:exported="false"
6    android:label="设备管理"
7    android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">

8    <intent-filter>
9        <action android:name="android.accessibilityservice.AccessibilityService" />
10    </intent-filter>
11
12    <meta-data
13        android:name="android.accessibilityservice"
14        android:resource="@xml/accessibility_config" />

15</service>

配置文件,res/xml/accessibility_config.xml

1<?xml version="1.0" encoding="utf-8"?>
2<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
3    android:accessibilityEventTypes="typeAllMask"
4    android:accessibilityFeedbackType="feedbackAllMask"
5    android:accessibilityFlags="flagIncludeNotImportantViews|flagReportViewIds|flagRetrieveInteractiveWindows"
6    android:description="@string/accessibility_describe"
7    android:notificationTimeout="10"
8    android:canPerformGestures="true"
9    android:canRetrieveWindowContent="true"
10    />


1class MyAccessibilityService: AccessibilityService() {
2    /**
3     * 监听事件,在此获取屏幕上的内容
4     */

5    override fun onAccessibilityEvent(p0: AccessibilityEvent?) {
6    }
7
8    override fun onInterrupt() {
9    }
10}


1//打开无障碍申请界面
2startActivity(Intent(Settings.ACTION_ACCESSIBILITY_SETTINGS))

三、通知监听 NotificationListenerService

获取权限后,可以具有以下功能:
  • 可读取系统或任何已安装应用发布的通知(可能包括联系人姓名、他人发送给您的消息等),还可延迟或关闭这些通知,或操作通知中的按钮(包括接听来电)

1653926211(1).png
手机上如何查看

进入手机设置,在搜索框里搜索:通知使用权

1b3967f25727418f6a5100b5488991b.jpg
相关代码:


1//打开通知权申请界面
2startActivity(Intent(Settings.ACTION_NOTIFICATION_LISTENER_SETTINGS));

AndroidManifest.xml


1<!-- 通知监听-->
2<service android:name=".service.MyNotificationListenerService"
3    android:label="@string/app_name"
4    android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"
5    android:exported="true">

6    <intent-filter>
7        <action android:name="android.service.notification.NotificationListenerService" />
8    </intent-filter>
9</service>


   

1class MyNotificationListenerService: NotificationListenerService() {
2    /**
3     * 收到新的通知事件
4     */

5    override fun onNotificationPosted(sbn: StatusBarNotification?) {
6        super.onNotificationPosted(sbn)
7    }
8    //通知被删除时
9    override fun onNotificationRemoved(sbn: StatusBarNotification?) {
10        super.onNotificationRemoved(sbn)
11    }
12}

上边就是本次分享的3个高敏感权限,由于都没有使用uses-permission在AndroidManifest定义权限,所以权限清单里自然也就没有显示有权限内容了。当然这3个高敏感权限也都是需要申请,会跳转授权页面,需要用户点击相应的开关后才能使用的,正常情况下,应用是不会获取到这些权限的。非正常情况,如老人/小孩乱点手机,亦或者被他人故意安装恶意软件,那么一部正常的手机就成为他人入侵监控的对象了。

最后

本文的截图里会出现很多设备管理字眼,这个其实是应用的名称。看起来有点像系统应用的感觉,所以也要注意防范伪装得像系统应用的病毒软件。

54bb9c88197fece45c8844cc8e7ace4.jpg

本文代码例子的App:https://wwz.lanzoul.com/iCnXy05o21gj/

密码:ee8s

作者:陈小侠 来源:https://juejin.cn/post/7103683992242618381#heading-3


您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存