edit_note帖子
1,551
stars积分
20,071
event加入
2011-05-19
怀旧国机
Android 权限控制方法
schedule发表于 2013-01-11 23:42:00
visibility查看 221
chat_bubble回复 1
#1 楼主
1 为什么Android总是事无巨细地告
诉你应用索取的每一项权限?
相比Apple,Microsoft严格控制生
态系统(从苹果给开发者的“App
Store Guideline“可见一斑),只允
许通过官方应用商店安装应用,并
对每份上传进行仔细地审查而言,
Android的开放就意味着,Google
需要向用户提供一系列用于为自己
负责的流程、工具。所以在安装应
用前,Android总是要事无巨细地
告诉你,应用肯需要控制什么权
限。 同样,开发者也制作了一
系列易用的工具,用以鉴别可疑的
应用程序,或是控制权限。
Andoird哪里开放了 在
Android中,用户能自由从本地安
装应用,自由地对SD卡进行*作,自
由选择应用市场。 如果愿意放
弃保修,用户还能轻易地实行
root,解锁基带(baseband)。只有
一些产品会严密地锁定bootloader
(如摩托罗拉)。 最重要的是,因
为ASOP(Android源代码开放计划)
的存在,绝大部分的Android代码
都是开源的,开发者可以由此对
Android系统进行深入的修改,甚
至可以自行编写一个符合Android
规范的系统实例(如Cyanogen
Mod)。正是因为ASOP,这篇文章
才可能介绍多达5种原理不同的权限
控制方法。 开放的风险 不
考虑Symbian,Windows Phone
6.5(及以下)平台,那么几乎所有的
智能手机病毒都是Android平台
的,甚至官方Android Market也闹
过几次乌龙。在国内水货横行的市
场,情况更是火上浇油,不法业者
可以在手机的ROM,甚至是
bootloader中做好手脚,让用户有
病无法医。 在Android中,用
户可以允许系统安装来自“未知
源“(也就是非Google官方的,或手
机预置市场的)应用程序。于是,移
动平台最重要的门神------数字签名
就被绕过了。 出于Android的
开放性,也有不允许“未知源“的反
例:亚马逊的Kindle Fire平板使用
了深度定制的Android,它只允许
安装来自亚马逊官方商店的应用程
序。 2 Android有哪些“权限“
首先需要明确一下Android中的
种种“权限“。Android是在Linux内
核上建立一个硬件抽象层(Android
HAL),通过Dalvik以及各种库来执
行android应用的。在手机启动
时,首先需要由Bootloader(HTC手
机上称作Hboot)引导Linux及手机
上各个硬件设备的驱动程序,之后
才启动Android系统。所以其实我
们会涉及到四种不同涵义的权限:
Android权限(Permission)
这指Android中的一系
列“Android.Permission.*“对象,
是本文的中心内容。 Google在
Android框架内把各种对象(包括设
备上的各类数据,传感器,拨打电
话,发送信息,控制别的应用程序
等)的访问权限进行了详细的划分,
列出了约一百
条“Android.Permission“。应用程
序在运行前必须向Android系统声
明它将会用到的权限,否则
Android将会拒绝该应用程序访问
通过该“Permission“许可的内容。
比方说,搜狗输入法提供了一
个智能通讯录的功能,用户可以在
输入联系人拼音的前几个字符,或
首字母,输入法就能自动呈现相关
联系人的名字。为了实现这个功
能,输入法必须声明它需要读取手
机中联系人的能力,也就是在相关
代码中加上声
明“android.permission.READ_
CONTACTS“对象。 原生
Android只提供了对“一刀切“式的
管理,要么同意使(绝客网址为jkniu.com)用,否则就根本就不安装应用程
序。当用户遇到希望使用程序的同
时,又想禁止部分Permission的场
合,他就无路可走。 于是,不
少开发者就捣鼓出了“第三条道
路“;可惜的是,没有一种方法能同
时做到既不需要将手机固件Root,
又完全不涉及对原始应用程序进行
反向工程的方法。 Root
Root指获得Android所在的Linux
系统的Root(根)权限,有了根权
限,你才能对Linux做出任意的修
改。iOS中的越狱 (Jailbreak) 相当
于获得iOS系统的Root权限(iOS是一
种类Unix系统,和Linux都使用
Root的概念)。在已Root的设备中,
通常都是使用一个叫“Super*r“(简
称SU)的应用程序来向许可的程序授
以Root权限。 Bootloader的解
锁(Unlock) 利用数字签名,
Bootloader可以限定只有正确签名
的系统可以被引导。在修改固件以
获得Root以前,解锁Bootloader通
常是必须的。安装第三方修改、编
译的固件也需要解锁Bootloader。
基带(Radio)解锁 在
Android系统中,基带是上层软件
与手机中无线设备(手机网络,Wi-
Fi,蓝牙等)的驱动程序之间的中
介。国外的网络运营商很喜欢锁定
基带,从而保证用户只能使用运营
商自己指定的sim卡。在我国,锁定
基带是非法的,手机制造商、网络
运营商也不可以通过锁定基带的方
法对待违约客户。iOS的“解锁“就是
解锁iOS中的基带软件。 3 权限
控制的方法 这里开始介绍各种
控制Android权限的办法。可惜的
是,几乎所有的手段都需要对设备
进行Root,如果不这么做,则需要
付出不小代价。 App Shield(国
内常见的名字:权限修改器) 它是
一个需要付费的Android应用,其
原理是修改应用程序的apk安装包,
删除其中AndroidManifest.xml文
件内,用于声明权限的对
应“Android.Permission.*“条目,
然后再用一个公开的证书对安装包
重新签名(需要允许“未知源“),这样
一来,应用程序就不会向系统申请
原先所需的权限。当应用运行至相
应的流程时,系统将直接拒绝,从
而达到用户控制权限的目的。
对于已安装的应用,AppShield也
会按照同样方法制作好apk安装包,
然后让用户先卸载原始的应用,再
安装调整过的应用。除了该应用数
字签名外,用户可以随时通过执行
同样的流程,将吊销的权限恢复。
Apk文件的结构 Android
应用都是打包成以.apk扩展名结
尾,实际上是zip的文件格式。
一个合法的apk至少需要这些成分:
根目录下
的“AndroidManifest.xml“文件,
用以向Android系统声明所需
Android权限等运行应用所需的条
件。 根目录下的classes.dex
(dex指DalvikExceptionable),应
用(application)本身的可执行文件
(Dalvik字节码) 。 根目录下的
res目录,包含应用的界面设定。
(如果仅是一个后台执行
的“service“对象,则不必需)
Apk根目录下的META-INF目录也
是必须的,它用以存放应用作者的
公钥证书与应用的数字签名。
当应用被安装后,这个apk文件会原
封不动地移至设备的data/app目录
下,实际运行的,则是Dalvik将其
中Classes.dex进行编译后的
Classes.odex(存放在Dalvik缓存
中,刷机时的‘cache wipe就是清除
Dalvik的odex文件缓存‘)。
Permission Denied 这是可以
吊销任意Android应用(注意,不当地吊销
系统应用的权限可能会导致手机固
件损坏,无法启动)的任意权限,对
权限的修改在重启后生效。 实
现原理应该与Cyanogen Mod
7.1+完全相同,适用于任何已经
Root的系统,因为一般的Android
系统虽然事实上支持权限吊销,但
没有像Cyanogen Mod那样放置接
口,因此需要重启后才能应用权限
配置。同样也有系统出面拒绝权限
而导致的崩溃现象。 优点:
效果与Cyanogen Mod中的权限
吊销效果一致,且可吊销系统应用
的权限。同时提供了免费与收费版
本,免费版并没有基本功能的缺
失。适用于所有版本号不低于1.6的
Android设备。 问题: 调
整后的权限需要重启才能生效。设
计不良的应用会崩溃。不恰当的权
限修改会损坏系统,导致无法开
机。 为了避免Cyanogen Mod
7.1+权限吊销(Permission
revoking)导致的崩溃问题,以及后
台服务(如LBE,QQ手机管家等,
PDroid的作者认为通过后台服务拦
截权限并不是好办法),PDroid 并
不阻止应用程序声明权限,但会在
其实际索取相关信息时,予以阻
止。通俗地说,就是签署协议但不
执行。在PDroid的用户界面,用户
能随时精确地控制涉及隐私的各项
权限。对于某些内容,除了阻止
外,用户还可以伪造一个随机或指
定的数据。 可控制的内容包
括: IMEI(可伪造)、IMSI(可伪
造)、SIM卡序列号(可伪造)、手机
号码(可伪造)、来,去电号码、SIM
卡信息、当前蜂窝网络信息、
(以上七者均来自
Android.Permission.READ_
PHONE_STATE) GPS定位信息
(可伪造,来自
Android.Permission.FINE_
LOCATION) 基站定位 (可伪
造,来自
Android.Permission.COARSE_
LOCATION) 系统自带浏览器的
历史,书签(Android.Permission.
BOOKMARKS) 联系人
(android.permission.READ_
CONTACTS) 通话记录
(android.permission.READ_
CONTACTS) 系统日志
(android.permission.READ_
LOGS) 当前账户列表
(android.permission.GET_
ACCOUNTS) 当前账户的授权码
(android.permission.*_
CREDENTIALS) 短信,彩信
(可能与这5个权限有
关)android.permission.READ_
SMSandroid.permission.
RECEIVE_SMSandroid.
permission.SEND_SMSandroid.
permission.WRITE_SMSandroid.
permission.RECEIVE_MMS 日
历android.permission.READ_
CALENDAR PDroid的内核补丁
并不通用,每一个Rom都需要特定
的补丁。开发者除了提供了几个特
定机型下Cyanogen Mod,HTC
Sense修改版ROM的专用补丁外,
还推出了一个补丁生成工具(PDroid
Patcher),用户可以给自己的ROM
生成专用的内核补丁。使用该
Patcher需要安装JDK(java
Development Kit)。 优点:
PDroid避免了通过Android系统
进行权限吊销的导致的潜在崩溃问
题,也不需要后台服务。对隐私信
息的控制是最精细的。尽管设备必
须Root,但应用本身不需要Root权限。 问题: 安装过程是
最繁琐,最不可靠的,容易导致
ROM损坏,适用范围也小,需要用
户有相当的技能(能安装JDK,会刷
机)才可使用;只提供对隐私有关权
限的控制,不提供网络访问,的控
制。以这些为代价,它几乎没有其
它缺点。 LBE安全大师 实
际上最常用的是以LBE为代表的通
过一个Root权限的后台服务来拦截
相关行为的工具。除了LBE外,还
有QQ手机管家等应用。这里以LBE
安全大师为例介绍。 4 自启动
的控制 Android对后台服务有
着最好的支持。 在Android中
可以自由地开发一种称
为‘Service‘的后台运行的对象,加
上没有苹果公司对应用程序的严格
限制。诸如QQ挂机,即时调用第三
方应用程序之类的形式都可以轻易
实现。 为了全面支持后台服
务,也为了适应移动设备资源紧
张,不得不经常清理内存的问题,
应用可在系统中设置触发器,当系
统发生了某个特定特定事件时(系统
启动,拨打电话,收发信息,安
装、卸载应用,插上电源等,或应
用程序自行定义的事件),就会触发
启动应用程序。
诉你应用索取的每一项权限?
相比Apple,Microsoft严格控制生
态系统(从苹果给开发者的“App
Store Guideline“可见一斑),只允
许通过官方应用商店安装应用,并
对每份上传进行仔细地审查而言,
Android的开放就意味着,Google
需要向用户提供一系列用于为自己
负责的流程、工具。所以在安装应
用前,Android总是要事无巨细地
告诉你,应用肯需要控制什么权
限。 同样,开发者也制作了一
系列易用的工具,用以鉴别可疑的
应用程序,或是控制权限。
Andoird哪里开放了 在
Android中,用户能自由从本地安
装应用,自由地对SD卡进行*作,自
由选择应用市场。 如果愿意放
弃保修,用户还能轻易地实行
root,解锁基带(baseband)。只有
一些产品会严密地锁定bootloader
(如摩托罗拉)。 最重要的是,因
为ASOP(Android源代码开放计划)
的存在,绝大部分的Android代码
都是开源的,开发者可以由此对
Android系统进行深入的修改,甚
至可以自行编写一个符合Android
规范的系统实例(如Cyanogen
Mod)。正是因为ASOP,这篇文章
才可能介绍多达5种原理不同的权限
控制方法。 开放的风险 不
考虑Symbian,Windows Phone
6.5(及以下)平台,那么几乎所有的
智能手机病毒都是Android平台
的,甚至官方Android Market也闹
过几次乌龙。在国内水货横行的市
场,情况更是火上浇油,不法业者
可以在手机的ROM,甚至是
bootloader中做好手脚,让用户有
病无法医。 在Android中,用
户可以允许系统安装来自“未知
源“(也就是非Google官方的,或手
机预置市场的)应用程序。于是,移
动平台最重要的门神------数字签名
就被绕过了。 出于Android的
开放性,也有不允许“未知源“的反
例:亚马逊的Kindle Fire平板使用
了深度定制的Android,它只允许
安装来自亚马逊官方商店的应用程
序。 2 Android有哪些“权限“
首先需要明确一下Android中的
种种“权限“。Android是在Linux内
核上建立一个硬件抽象层(Android
HAL),通过Dalvik以及各种库来执
行android应用的。在手机启动
时,首先需要由Bootloader(HTC手
机上称作Hboot)引导Linux及手机
上各个硬件设备的驱动程序,之后
才启动Android系统。所以其实我
们会涉及到四种不同涵义的权限:
Android权限(Permission)
这指Android中的一系
列“Android.Permission.*“对象,
是本文的中心内容。 Google在
Android框架内把各种对象(包括设
备上的各类数据,传感器,拨打电
话,发送信息,控制别的应用程序
等)的访问权限进行了详细的划分,
列出了约一百
条“Android.Permission“。应用程
序在运行前必须向Android系统声
明它将会用到的权限,否则
Android将会拒绝该应用程序访问
通过该“Permission“许可的内容。
比方说,搜狗输入法提供了一
个智能通讯录的功能,用户可以在
输入联系人拼音的前几个字符,或
首字母,输入法就能自动呈现相关
联系人的名字。为了实现这个功
能,输入法必须声明它需要读取手
机中联系人的能力,也就是在相关
代码中加上声
明“android.permission.READ_
CONTACTS“对象。 原生
Android只提供了对“一刀切“式的
管理,要么同意使(绝客网址为jkniu.com)用,否则就根本就不安装应用程
序。当用户遇到希望使用程序的同
时,又想禁止部分Permission的场
合,他就无路可走。 于是,不
少开发者就捣鼓出了“第三条道
路“;可惜的是,没有一种方法能同
时做到既不需要将手机固件Root,
又完全不涉及对原始应用程序进行
反向工程的方法。 Root
Root指获得Android所在的Linux
系统的Root(根)权限,有了根权
限,你才能对Linux做出任意的修
改。iOS中的越狱 (Jailbreak) 相当
于获得iOS系统的Root权限(iOS是一
种类Unix系统,和Linux都使用
Root的概念)。在已Root的设备中,
通常都是使用一个叫“Super*r“(简
称SU)的应用程序来向许可的程序授
以Root权限。 Bootloader的解
锁(Unlock) 利用数字签名,
Bootloader可以限定只有正确签名
的系统可以被引导。在修改固件以
获得Root以前,解锁Bootloader通
常是必须的。安装第三方修改、编
译的固件也需要解锁Bootloader。
基带(Radio)解锁 在
Android系统中,基带是上层软件
与手机中无线设备(手机网络,Wi-
Fi,蓝牙等)的驱动程序之间的中
介。国外的网络运营商很喜欢锁定
基带,从而保证用户只能使用运营
商自己指定的sim卡。在我国,锁定
基带是非法的,手机制造商、网络
运营商也不可以通过锁定基带的方
法对待违约客户。iOS的“解锁“就是
解锁iOS中的基带软件。 3 权限
控制的方法 这里开始介绍各种
控制Android权限的办法。可惜的
是,几乎所有的手段都需要对设备
进行Root,如果不这么做,则需要
付出不小代价。 App Shield(国
内常见的名字:权限修改器) 它是
一个需要付费的Android应用,其
原理是修改应用程序的apk安装包,
删除其中AndroidManifest.xml文
件内,用于声明权限的对
应“Android.Permission.*“条目,
然后再用一个公开的证书对安装包
重新签名(需要允许“未知源“),这样
一来,应用程序就不会向系统申请
原先所需的权限。当应用运行至相
应的流程时,系统将直接拒绝,从
而达到用户控制权限的目的。
对于已安装的应用,AppShield也
会按照同样方法制作好apk安装包,
然后让用户先卸载原始的应用,再
安装调整过的应用。除了该应用数
字签名外,用户可以随时通过执行
同样的流程,将吊销的权限恢复。
Apk文件的结构 Android
应用都是打包成以.apk扩展名结
尾,实际上是zip的文件格式。
一个合法的apk至少需要这些成分:
根目录下
的“AndroidManifest.xml“文件,
用以向Android系统声明所需
Android权限等运行应用所需的条
件。 根目录下的classes.dex
(dex指DalvikExceptionable),应
用(application)本身的可执行文件
(Dalvik字节码) 。 根目录下的
res目录,包含应用的界面设定。
(如果仅是一个后台执行
的“service“对象,则不必需)
Apk根目录下的META-INF目录也
是必须的,它用以存放应用作者的
公钥证书与应用的数字签名。
当应用被安装后,这个apk文件会原
封不动地移至设备的data/app目录
下,实际运行的,则是Dalvik将其
中Classes.dex进行编译后的
Classes.odex(存放在Dalvik缓存
中,刷机时的‘cache wipe就是清除
Dalvik的odex文件缓存‘)。
Permission Denied 这是可以
吊销任意Android应用(注意,不当地吊销
系统应用的权限可能会导致手机固
件损坏,无法启动)的任意权限,对
权限的修改在重启后生效。 实
现原理应该与Cyanogen Mod
7.1+完全相同,适用于任何已经
Root的系统,因为一般的Android
系统虽然事实上支持权限吊销,但
没有像Cyanogen Mod那样放置接
口,因此需要重启后才能应用权限
配置。同样也有系统出面拒绝权限
而导致的崩溃现象。 优点:
效果与Cyanogen Mod中的权限
吊销效果一致,且可吊销系统应用
的权限。同时提供了免费与收费版
本,免费版并没有基本功能的缺
失。适用于所有版本号不低于1.6的
Android设备。 问题: 调
整后的权限需要重启才能生效。设
计不良的应用会崩溃。不恰当的权
限修改会损坏系统,导致无法开
机。 为了避免Cyanogen Mod
7.1+权限吊销(Permission
revoking)导致的崩溃问题,以及后
台服务(如LBE,QQ手机管家等,
PDroid的作者认为通过后台服务拦
截权限并不是好办法),PDroid 并
不阻止应用程序声明权限,但会在
其实际索取相关信息时,予以阻
止。通俗地说,就是签署协议但不
执行。在PDroid的用户界面,用户
能随时精确地控制涉及隐私的各项
权限。对于某些内容,除了阻止
外,用户还可以伪造一个随机或指
定的数据。 可控制的内容包
括: IMEI(可伪造)、IMSI(可伪
造)、SIM卡序列号(可伪造)、手机
号码(可伪造)、来,去电号码、SIM
卡信息、当前蜂窝网络信息、
(以上七者均来自
Android.Permission.READ_
PHONE_STATE) GPS定位信息
(可伪造,来自
Android.Permission.FINE_
LOCATION) 基站定位 (可伪
造,来自
Android.Permission.COARSE_
LOCATION) 系统自带浏览器的
历史,书签(Android.Permission.
BOOKMARKS) 联系人
(android.permission.READ_
CONTACTS) 通话记录
(android.permission.READ_
CONTACTS) 系统日志
(android.permission.READ_
LOGS) 当前账户列表
(android.permission.GET_
ACCOUNTS) 当前账户的授权码
(android.permission.*_
CREDENTIALS) 短信,彩信
(可能与这5个权限有
关)android.permission.READ_
SMSandroid.permission.
RECEIVE_SMSandroid.
permission.SEND_SMSandroid.
permission.WRITE_SMSandroid.
permission.RECEIVE_MMS 日
历android.permission.READ_
CALENDAR PDroid的内核补丁
并不通用,每一个Rom都需要特定
的补丁。开发者除了提供了几个特
定机型下Cyanogen Mod,HTC
Sense修改版ROM的专用补丁外,
还推出了一个补丁生成工具(PDroid
Patcher),用户可以给自己的ROM
生成专用的内核补丁。使用该
Patcher需要安装JDK(java
Development Kit)。 优点:
PDroid避免了通过Android系统
进行权限吊销的导致的潜在崩溃问
题,也不需要后台服务。对隐私信
息的控制是最精细的。尽管设备必
须Root,但应用本身不需要Root权限。 问题: 安装过程是
最繁琐,最不可靠的,容易导致
ROM损坏,适用范围也小,需要用
户有相当的技能(能安装JDK,会刷
机)才可使用;只提供对隐私有关权
限的控制,不提供网络访问,的控
制。以这些为代价,它几乎没有其
它缺点。 LBE安全大师 实
际上最常用的是以LBE为代表的通
过一个Root权限的后台服务来拦截
相关行为的工具。除了LBE外,还
有QQ手机管家等应用。这里以LBE
安全大师为例介绍。 4 自启动
的控制 Android对后台服务有
着最好的支持。 在Android中
可以自由地开发一种称
为‘Service‘的后台运行的对象,加
上没有苹果公司对应用程序的严格
限制。诸如QQ挂机,即时调用第三
方应用程序之类的形式都可以轻易
实现。 为了全面支持后台服
务,也为了适应移动设备资源紧
张,不得不经常清理内存的问题,
应用可在系统中设置触发器,当系
统发生了某个特定特定事件时(系统
启动,拨打电话,收发信息,安
装、卸载应用,插上电源等,或应
用程序自行定义的事件),就会触发
启动应用程序。
全部回复 (1)
2013-01-12 00:54:00
沙发
。。。
登录 后才能回复
flag举报帖子