2026年11月1日 · 今日 0 帖 · 会员 6.1万 · 主题 17.4万
登录 · 注册 · 游客,欢迎随便逛逛
返回版块
只看作者:洞房 查看全部
1000
Lv9有为九子能等级图标
勋章勋章勋章勋章勋章
帖子
9.3万
回复
2,089
积分
60.3万
注册
2006-12-06
[怀旧国机]

Android 权限控制方法

[复制链接]
查看 222 回复 0
楼主 发表于 | 查看全部

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挂机,即时调用第三

方应用程序之类的形式都可以轻易

实现。  为了全面支持后台服

务,也为了适应移动设备资源紧

张,不得不经常清理内存的问题,

应用可在系统中设置触发器,当系

统发生了某个特定特定事件时(系统

启动,拨打电话,收发信息,安

装、卸载应用,插上电源等,或应

用程序自行定义的事件),就会触发

启动应用程序。

登录回复

登录后可以回复这个帖子。旧账号可使用原密码登录。

登录 注册新号
← 返回版块