Android 中的那些权限

Android 13 关于安卓判断通知权限 Android 13 推送权限申请详解 阅读详情

    随着智能手机的普及,越来越多各式各样的应用和服务出现在手机平台上。这些应用和服务要访问手机上的

资源,就牵涉到权限问题。手机又是一个非常敏感的平台,涉及到用户的很多个人信息,隐私等等,在这种背景

下权限控制显得非常有必要。

  

1.Android中已经定义了permission这个概念来管理系统中的权限,但是一个恶意程序可能会申请超过其需求不必要的权限,获取用户信息,对手机进行破坏等等,怎么样能够更严格的控制系统中的行为?有三个方案:

1)     Android不是定义了permission吗?我们可以通过去除恶意App的权限,达到控制的目的。但是这样会带来一个问题,当该App需要访问资源时AMS会checkPermission,如果它的permission被去除了,系统就会抛exception,app可能会crash。这样带来的用户体验不好,用户会说App正在运行怎么出错停止运行了?

2)    在系统中访问特定资源的地方加hook,如果不允许该app访问资源,返回无效值,使其得不到有用信息或者无法写入信息。 Hook通过root,进程注入的方式实现。此方案的缺点是系统需要root,而root会给手机带来很多风险,所有app都可以获取最高root权限。市面上的手机安全软件都是通过这种方式,不root就不能进行权限控制。

3)    如果系统本身已经拥有这样的hook点,则不需要root也可以实现权限控制。具体做法是单独运行一个安全进程,如果有访问资源的行为,从hook点发起IPC调用到安全进程,安全进程根据访问者的package name,uid,pid等信息决定允不允许访问。这是我们的方案,系统内部已经集成了安全机制,真正做到不root也安全的Android系统。

 

2.  那么我们就来看看哪些权限是用户关心的,怎么处理才可以满足权限控制需求并获得最佳体验。首先是一些敏感数据。

1)     数据库信息,比如联系人信息,通话记录,短信等。这些信息都是很重要的,而很多app在自己功能之外额外的申请访问这些资源。我们知道这些信息在Android中是以provider的形式存储,通过ContentResovler访问,可以拥有query,Insert,delete,update操作。不同信息在数据库中通过URL区分,每一条记录是一行,通过检测判断URL和App信息,决定允不允许读写。

                      a.    query操作

    通过特定URL查询,返回对应Cursor。如果禁止此次查询,可以返回一个WrapCursor,该Cursor是对原来信息的封装,App拿到之后获取不到里面的任何信息,没有行、列,任何操作都会返回无效值。

                      b.    insert操作

    往对应URL中插入一行,返回插入后的那一行。如果禁止此次写操作,返回null,不执行插入操作。

                      c.   delete操作

    将对应URL中删除若干行,返回删除行数。如果禁止删除,返回 -1 ,不删除任何内容。

                      d.    update操作

    更新URL中的若干行,返回更新行数。如果禁止更新,返回 -1 ,不进行任何更新。

 

2)    手机中有很多跟硬件相关信息,比如IMSI,IMEI,手机号码等。这些信息标示着这部手机在网络中的身份。通过TelephonyManger拿到手机信息PhoneSubInfo,再使用PhoneSubInfo的方法获取对应信息。不想让App获取这些有用信息,只要在PhoneSubInfo的这些方法中返回null就可以。

                       a.   IMEI: 国际移动设备身份码,与每台手机一一对应,而且该码是全世界唯一的。PhoneSubInfo的getDeviceId方法获取。

                       b.   IMSI: 国际移动用户识别码,区别移动用户的标志,储存在SIM卡中,可用于区别移动用户的有效信息。PhoneSubInfo的getSubscriberId方法获取。

            c.    手机号码: PhoneSubInfo的getLine1number方法获取。

 

3)    Android中有两种跟手机位置相关的信息,一种是通过GPS获取的精确位置信息(FINE_LOCATION) ,一种是通过基站获取的粗略位置信息(COARSE_LOCATION) 。具体实现是App通过LocationManager的requestLocationUpdate方法注册一个listener,当位置信息变化时通知App。用户可能不希望暴露自己的位置,那么可以在此方法中真正注册listener之前返回,使App无法获取手机位置信息。

 

3.  Android手机中的敏感行为:

1)     打电话

一个哪怕是后台的service都可以申请这个权限,并且偷偷的打电话,而用户只想让特定软件具有该功能,比如系统自带的phone。如何控制打电话权限呢?打电话实际上最终通过startActivity(Intent(ACTION_CALL))启动Phone App的呼叫界面,进行拨号。如果我们禁止打电话,只要在AMS中startActivity这个动作真正执行之前返回就可以了。

 

2)     电话录音

这个权限比打电话还要危险,因为打电话还要弹出系统呼叫界面,而录音则可以静默执行。如果有恶意程序在后台录音,会造成用户隐私甚至是商业秘密等泄露。对通话进行录音要通过MediaRecorder对象来操作,设置录音来源为电话setAudioSource(VOICE_CALL)。如果要禁止,在其开始录音(MediaRecorder.start)真正执行之前返回,或者使其无法正常start。

 

3)     发短信

很多App都申请这个权限,大都是为了方便用户使用其服务,但是也不乏发短信扣费的服务,如果用户玩游戏时不小心点了某个窗口就有可能定制了某服务,几块钱就花出去了。更严重的是App可以悄悄地在后台发送短信,导致用户信息泄露。发送短信需要通过SmsManager提供的send方法,在真正开始发送之前检查发送发起者是否合法,如果禁止就返回,使发送动作没有真正执行。

 

4)      在通知栏弹通知

手机的屏幕本来就小,很多软件偏偏又要在通知栏弹很多广告之类的通知,让很多用户很苦恼。弹通知是通过NotificationManager的notify方法,最终在NotificationManagerService的enqueueNotificationInternal方法中加入通知队列。在此之前做检查,不希望弹的通知不准加入队列,就可达到控制弹通知的目的。

 

4.   综上,我们的方案是系统本身就提供权限检查机制,不需要将手机root。在App访问敏感资源或行为时,提示用户,阻止用户不希望的访问,让用户真正做手机的主人,使潜在的危险降低到最小。

 

linux echo命令以及linux echo命令提示权限不够的解决办法 linux的echo命令, 在shell编程中极为常用, 在终端下打印变量value的时候也是常常用到的, 因此有必要了解下echo的用法。下面通过本文给大家介绍linux echo命令以及linux echo命令提示权限不够的解决办法,感兴趣的朋友一起看看吧 立即下载

相关推荐

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码)

深度学习基于Resnet18的图像多分类--训练自己的数据集(超详细 含源码)

她是不会无条件的!! 2万+

Android中的那些权限

随着智能手机的普及,越来越多各式各样的应用和服务出现在手机平台上。这些应用和服务要访问手机上的 资源,就牵涉到权限问题。手机又是一个非常敏感的平台,涉及到用户的很多个人信息,隐私等等,在这种背景 下权限控制显得非常有必要。       1.       Android中已经定义了permission这个概念来管理系统中的权限,但是一个恶意程序可能会申请超过其需求不必要的权限,获取用户信

编程小栈 1968

2019年上交电院计算机直博保研经历

本人选报的是上交六月一日在武汉举办的直博选拔,五月三十一日到达酒店,地点在武汉大学旁边(PS:上交是不管住宿、来回车票的,~划重点~包括夏令营),入住后当然是紧张的准备英语面试等等内容了,当天我是排在了下午面试,感觉还很好,上午可以多睡一会,最好能够去踩踩点上午,然后下午面试一定要早去,说是一点开始,但是老师十二点半就开始让学生进去了,有一个同学排在第二个,但是当时叫到他时还不到一点,没到,最后据...

LifeMaker的博客 4898

android用户权限获取

一、关于android的用户机制          首先,Android不同的应用拥有不同的进程,进程有独立的地址空间,进程与进程间默认是不能互相访问的,是一种很可靠的保护机制。    Android通过为每一个安装在设备上的包(apk)分配唯一的linux userID来实现,名称为"app_"加一个数字,比如app_43不同的UserID,运行在不同的进程,所以apk之间默认便不能相互访问。...

845

高等数学/概率论/数理统计/线性代数/离散数学面试-核心概念-问题理解

特征值与特征向量是线性代数中的概念,它们与线性变换有关。在线性变换中,如果存在非零向量 v ,使得当该向量通过变换后,其方向不变,只是长度发生了变化,那么这个向量 v 就是特征向量。而这个长度变化的比例因子,即变换前后向量长度的比值,称为特征值。数学公式表示:通俗易懂的解释:想象一下,你有一个可以伸缩的橡皮筋,这个橡皮筋可以代表一个向量。现在,你有一个特殊的机器,它可以改变橡皮筋的形状,但不会改变它延伸的方向。当你把橡皮筋放入机器中,机器会拉伸或压缩橡皮筋,但橡皮筋的方向保持不变。

m0_64198455的博客 2293

生物信息学避坑指南:Scissor算法参数alpha和cutoff的黄金设置法则

本文深入解析了生物信息学中Scissor算法的关键参数alpha和cutoff的黄金设置法则,帮助研究者有效整合bulk RNA与单细胞数据,识别单细胞亚群。通过实战验证的调参策略,避开常见陷阱,获得可靠的生物学发现,特别适用于肿瘤异质性研究和免疫细胞分型等场景。

weixin_33734785的博客 451

移动安全-安卓权限获取

Android的系统权限 Android的系统权限不是由用户控制,而是由开发者根据开发的需要控制相关权限的开放与否,权限控制主要放置在AndroidManifest.xml文件中。将如下的权限控制属性写入AndroidManifest.xml文件就可以获取相应的系统权限。如果在开发中遇到一些调试的问题很可以就是权限的原因。 Android常见的权限 访问登记属性:android.permission.ACCESS_CHECKIN_PROPERTIES ,读取或写入登记check-in数据库属性表的权限   

写代码的小阿帆的博客 542

速腾聚创多激光雷达点云采集,并用RVIZ进行显示

在ubuntu20.04系统下,使用速腾聚创官方提供的软件RSView,对激光雷达的默认IP地址、MSOP 包端口号、 DIFOP包端口号和时间模式等配置进行查看和修改。使用交换机对两个激光雷达进行组网,实现多激光雷达数据采集,并用RVIZ同时显示两个雷达点云。使用wireshark对比两个雷达数据包。

abanchao的博客 5889

Android 权限管理

1.权限分级 Android中权限分为四类,不同级别的权限对应不同的认证方式。 ①normal:低风险权限 只要申请了就可以使用(在AndroidManifest.xml中添加< uses-permission>标签),安装时不需要用户确认; ②dangerous:高风险权限 安装时需要用户的确认才可使用; ③signature: 只有当申请权限的应用程序的数字签名与声明此权限的应用程序的数字签名相同时(如果是申请系统权限,则需要与系统签名相同),才能将权限授给它; ④signatureOrSy

zenmela2011的专栏 4446

JAVA:Spring Boot 集成 Baidu UID-Generator ID 生成器

百度UID-Generator是一款高性能分布式ID生成器,支持600万QPS,提供Snowflake扩展版和Cache模式两种实现方式。文章详细介绍了如何在Spring Boot项目中集成该组件,包括Maven依赖配置、MySQL表结构初始化、Spring Boot数据源配置、WorkerId分配策略实现以及UID生成器的核心配置。该方案具有无中心依赖、ID单调递增、支持集群部署等特点,适用于订单号、用户ID等分布式场景。通过缓存模式(Cache-Buffer)可进一步提升性能,满足高并发业务需求。

木头 487

【Python音频处理】syncstart 计算媒体文件同步时间偏移

syncstart是一个强大的工具,它简化了多媒体文件的音视频同步过程,特别适用于多设备录制的媒体内容。在使用命令行工具时,可以根据实际需求灵活调整参数,如归一化、降噪、低通滤波等,以提高同步的精度和效率。通过本文介绍的基本操作和应用示例,可以快速掌握syncstart的使用方法,并将其应用到日常的音视频处理工作中。

Mr数据杨 817

iphone获取android号码,如何通过adb获取Android手机的电话号码?

iphonesubinfo服务“跟踪”订户信息,包括电话号码.不幸的是iphonesubinfo服务没有实现dump()方法所以dumpsys什么都没显示.您将不得不使用service call命令来调用IPhoneSubInfo.getLine1Number()或IPhoneSubInfo.getMsisdn()根据Android版本和您的操作符,以下一个或两个命令将告诉您电话号码(服务呼叫命令...

weixin_35182991的博客 1095

提示词工程中的上下文隔离

已经进入context的prompt是没有办法让大模型真正的忘记的,但是可以通过prompt技巧强约束模型的后续推理中“不再使用、不再提及、不再引用”某部分提示词,这其实是一种行为抑制(behavior suppression),并不是删除。

Criss@陈磊 234

Android 申请权限,安卓11、安卓12文件权限,RxPermissions使用,android.permission.WRITE_SETTINGS

1.需要用户手动赋予的权限( Dangerous Permissions) 所属权限组 权限 日历 READ_CALENDAR 日历 WRITE_CALENDAR 相机 CAMERA 联系人 READ_CONTACTS 联系人 WRITE_CONTACTS 联系人 GET_ACCOUNTS 位置 ACCESS_FINE_.........

meixi_android的博客 5920

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

安卓10 Android Q 权限申请遇到的坑——更严格的动态权限申请和存储权限

安卓10 File类新建文件操作失败的解决方案问题描述具体创建文件方法如下 问题描述 本人刚入安卓app开发的大门,安卓10的File类就把我拒之门外。 我使用了File.makedir()和file.createnewfile()方法,首先申请了权限(这可以肯定),在我的安卓6.0上完美运行,创建了logger.log文件和所需文件夹。然而到了安卓10这里费了一番周折,总是无法建立,方法调用返回...

qq_34352612的博客 8050

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

delphi android动态权限,DELPHI安卓动态权限申请

DELPHI安卓动态权限申请安卓8.0以前的版本,只需要给静态权限就可以了,但安卓8.0及以后的版本,还需要运行期用代码动态申请权限。下面以《蓝牙权限》为例,其他权限类似。Delphi 10.3 社区版,提供的 Sample 里面有一个例子程序在:C:\Users\Public\Documents\Embarcadero\Studio\20.0\Samples\Object Pascal\Mult...

weixin_26874745的博客 330

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

android蓝牙动态权限,安卓蓝牙动态权限

安卓蓝牙动态权限安卓7.0及以下版本在 IDE 的 Project - Options 菜单弹出来的窗口里面,找到左边树结构的: Application -- Uses Permissions 项目,则右边会出来一堆权限让你打勾。这里要勾选上 Bluetooth 和 Bluetooth admin 两项。老的安卓版本,勾选这两项就可以了。安卓8.0及以上版本,还需要运行期用代码动态申请权限。代码里...

weixin_29014237的博客 2737

android位置权限动态申请,DELPHI安卓定位权限申请

DELPHI安卓定位权限申请安卓8及以后版本的权限分为静态和动态申请2部分,而之前的安卓版本只需要静态申请权限。1)静态申请定位权限:2)动态申请定位权限:usesSystem.Permissions,{$IFDEF ANDROID}Androidapi.Jni.Os,Androidapi.Helpers,{$ENDIF}...FPermissionCoarseLocation: string;F...

weixin_33895652的博客 884

安卓手机权限总结安卓权限列表

1.android.permission.WRITE_USER_DICTIONARY允许应用程序向用户词典中写入新词 2.android.permission.WRITE_SYNC_SETTINGS写入Google在线同步设置 3.android.permission.WRITE_SOCIAL_STREAM读取用户的社交信息流 4.android.permission.WRITE_SMS允许程序写短信 5.android.permission.WRITE_SETTINGS允许程序读取或写入系统设..

amaoatao的博客 3647

delphi android动态权限,delphi 安卓蓝牙动态权限

安卓蓝牙动态权限安卓7.0及以下版本在 IDE 的 Project - Options 菜单弹出来的窗口里面,找到左边树结构的: Application -- Uses Permissions 项目,则右边会出来一堆权限让你打勾。这里要勾选上 Bluetooth 和 Bluetooth admin 两项。老的安卓版本,勾选这两项就可以了。安卓8.0及以上版本,还需要运行期用代码动态申请权限。代码里...

weixin_39552768的博客 293

Android安卓增加应用读写权限

在你请求权限之前,最好提供给用户一个合理的解释,说明为什么你的应用需要这些权限以及如何将其用于应用中。要确保用户隐私和应用的正常运行,始终提供清晰的解释,并考虑在用户拒绝权限时的适当操作。当在你的 Android 应用中需要访问设备上的敏感数据、执行危险操作或与设备资源交互时,你需要在应用清单文件中声明权限,以及在运行时请求并处理这些权限。在 Android 6.0 及更高版本中,你需要在运行时请求一些危险权限,而不仅仅依赖于清单文件中的声明。你可以在需要权限的地方调用系统提供的权限请求方法。

m0_63324772的博客 4140

安卓定位权限

随着安卓系统版本的变动,定位权限也多次被修改。随着变动次数的增多,但是对于不同的版本,不同的机型差异越来越大,在处理定位权限时,需要注意的地方就变多了。本篇主要记录对不同安卓版本,不同厂商机型定位权限的适配。

EleganceKing的博客 1万+

Android开发中的权限声明

在安卓开发中,必须在文件中声明应用需要的所有权限。对于普通权限,系统会在安装时自动授予权限;对于危险权限,需要在运行时请求用户授权。从 Android 6.0(API 23)开始,危险权限需要动态申请,用户可以在应用运行时选择是否授予权限。

2301_80267599的博客 2824
上一篇: 不完美的软件锁
下一篇: 系统安全原则:最小特权
鲶鱼团队
博客等级 码龄14年 36粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值