search 登录 注册
arrow_back返回列表
ID:42313
light_modedark_modedark_modedark_modestarstar
Lv.2 独赏二月雪
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挂机,即时调用第三
方应用程序之类的形式都可以轻易
实现。  为了全面支持后台服
务,也为了适应移动设备资源紧
张,不得不经常清理内存的问题,
应用可在系统中设置触发器,当系
统发生了某个特定特定事件时(系统
启动,拨打电话,收发信息,安
装、卸载应用,插上电源等,或应
用程序自行定义的事件),就会触发
启动应用程序。

全部回复 (1)

ID:48681
light_modestarstarstar
Lv.2 独赏二月雪
2013-01-12 00:54:00 沙发
。。。
登录 后才能回复