美国。
1998年,拉里佩奇和谢尔盖布林在美国斯坦福大学的学生宿舍内共同开发了谷歌在线搜索引擎,并迅速传播给全球的信息搜索者;8月7日,谷歌公司在美国加利福尼亚州山景城以私有股份公司的型式创立。同年,发明GooglePageRank专利。
谷歌是一家位于美国的跨国科技企业,业务包括互联网搜索、云计算、广告技术等,同时开发并提供大量基于互联网的产品与服务,其主要利润来自于关键词广告等服务。2018年1月,腾讯和谷歌宣布双方签署一份覆盖多项产品和技术的专利交叉授权许可协议。2018年5月29日,《2018年BrandZ全球最具价值品牌100强》发布,谷歌公司名列第一位。12月18日,世界品牌实验室编制的《2018世界品牌500强》揭晓,Google排名第2位。2019年度全球最具价值100大品牌榜第二位。
本教程操作环境:HarmonyOS 2系统,HONOR V30手机。
手机操作系统主要应用在智能手机上。
智能手机就是“掌上电脑+手机”,除了具备普通手机的全部功能外,还具备了个人数字助理(Persional Digital Assistant,PDA)的大部分功能,特别是信息管理以及基于无线数据通信的网络功能。随着移动通信技术的飞速发展和移动多媒体时代的到来,手机作为人们必备的移动通信工具,已从简单的通话工具向智能化发展, 演变成一个移动的个人信息收集和处理平台。借助操作系统和丰富的应用软件,智能手机成了一台移动终端。
操作系统是计算机系统的核心控制软件,是计算机用户和计算机硬件之间的接口程序模块,其功能是管理和控制计算机硬件与软件资源。智能手机操作系统即移动终端操作系统 ,是在嵌入式操作系统基础之上发展而来的专门为手机设计的操作系统 ,为用户使用手机提供统一的接口和友好的交互界面 ,也为手机功能的扩展 、第三方软件的安装与运行提供平台。
应用在手机上的操作系统主要有Android(谷歌)、iOS(苹果)、windows phone(微软)、塞班系统(诺基亚)、BlackBerry OS(黑莓)、web os、windows mobile(微软)、Harmony(华为鸿蒙系统)、卓易操作系统 [4] (Freeme OS) 等。
Harmony OS
华为鸿蒙系统(HUAWEI Harmony OS),是华为公司在2019年8月9日于东莞举行华为开发者大会(HDC2019)上正式发布的操作系统。
华为鸿蒙系统是一款全新的面向全场景的分布式操作系统,创造一个超级虚拟终端互联的世界,将人、设备、场景有机地联系在一起,将消费者在全场景生活中接触的多种智能终端实现极速发现、极速连接、硬件互助、资源共享,用合适的设备提供场景体验。
鸿蒙OS是华为公司开发的一款基于微内核、 耗时10年、4000多名研发人员投入开发、 面向5G物联网 、面向全场景的分布式操作系统。鸿蒙的英文名是HarmonyOS,意为和谐。不是安卓系统的分支或修改而来的。 与安卓、iOS是不一样的操作系统。性能上不弱于安卓系统,而且华为还为基于安卓生态开发的应用能够平稳迁移到鸿蒙OS上做好衔接——将相关系统及应用迁移到鸿蒙OS上,差不多两天就可以完成迁移及部署。 这个新的操作系统将打通手机、电脑、平板、电视、 工业自动化控制、无人驾驶、车机设备 、智能穿戴统一成一个操作系统,并且该系统是面向下一代技术而设计的,能兼容全部安卓应用的所有Web应用。若安卓应用重新编译,在鸿蒙OS上,运行性能提升超过60%。 鸿蒙OS架构中的内核会把之前的Linux内核、鸿蒙OS微内核与LiteOS合并为一个鸿蒙OS微内核。创造一个超级虚拟终端互联的世界,将人、设备、场景有机联系在一起。同时由于鸿蒙系统微内核的代码量只有Linux宏内核的千分之一,其受攻击几率也大幅降低。
分布式架构首次用于终端OS,实现跨终端无缝协同体验;确定时延引擎和高性能IPC技术实现系统天生流畅; 基于微内核架构重塑终端设备可信安全; [31] 对于消费者而言,HarmonyOS通过分布式技术,让8+N设备具备智慧交互的能力。在不同场景下,8+N配合华为手机提供满足人们不同需求的解决方案。对于智能硬件开发者,HarmonyOS可以实现硬件创新,并融入华为全场景的大生态。对于应用开发者,HarmonyOS让他们不用面对硬件复杂性,通过使用封装好的分布式技术APIs,以较小投入专注开发出各种全场景新体验。
iOS
iOS是由苹果公司开发的移动操作系统。 苹果公司最早于2007年1月9日的Macworld大会上公布这个系统,最初是设计给iPhone使用的,后来陆续套用到iPod touch、iPad上。iOS与苹果的macOS操作系统一样,属于类Unix的商业操作系统。原本这个系统名为iPhone OS,因为iPad,iPhone,iPod touch都使用iPhone OS,所以2010年苹果全球开发者大会上宣布改名为iOS(iOS为美国思科公司网络设备操作系统注册商标,苹果改名已获得Cisco公司授权)。
Android
安卓(Android)是一种基于Linux内核(不包含GNU组件)的自由及开放源代码的操作系统。主要使用于移动设备,如智能手机和平板电脑,由美国Google公司和开放手机联盟领导及开发。Android操作系统最初由安迪·鲁宾开发,主要支持手机。
Android 平台最大优势是开发性,允许任何移动终端厂商、用户和应用开发商加入到Android 联盟中来,允许众多的厂商推出功能各具特色的应用产品。平台提供给第三方开发商宽泛、自由的开发环境,由此会诞生丰富的、实用性好、新颖、别致的应用。产品具备触摸屏、高级图形显示和上网功能,界面友好,是移动终端的Web 应用平台。
基于Android
Smartisan OS
Smartisan OS是由罗永浩带领的锤子科技团队基于Android深度定制的手机操作系统。
2015年1月18日,在2015极客公园创新大会上,锤子科技(北京)有限公司的Smartisan OS智能手机操作系统获得“2014 中国互联网年度创新产品大奖”和“最佳用户体验奖”两个奖项。
SmartisanOS和其他第三方ROM相比变革最大的是在UI交互设计方面,Smartisan OS与其他定制UI最大的不同之处是Smartisan OS的视觉美感。视觉美感分为很多层面:图标设计、交互设计、字体选用等等。
在图标设计方面,现今扁平化的风潮让用户产生了审美疲劳,而Smartisan OS的工程师们重绘了大量第三方应用图标,以拟物化为主,这与市场上所有的其他安卓系统有着明显的区别,Smartisan OS的图标重绘水平在全世界范围内,也属顶尖。
此外,Smartisan OS的交互动画非常精致,充满了拟物化的设计元素。
Smartisan OS的字体渲染做得非常漂亮。据官方的说法,他们是改进了安卓的底层渲染机制,这才让字体渲染能够达到他们满意的效果。
“多宫格”模式找应用是Smartisan OS最大的卖点,其独有的各种“宫格”显示模式,使得移动图标很方便,也更多地用于查找应用程序。相比于大部分ROM找应用必须要滑来滑去,Smartisan OS直接按菜单键即可呼出“多宫格”模式,可以预览所有的App。而且由于Smartisan OS采用的是拟物化的图标设计,所以即使是缩小到81宫格模式下,各个图标的视觉特征也十分明显,很方便查找。
IUNI OS
IUNI OS最早的内部代号叫Aurora, 英文里的“极光”一词。负责人刘世超表示,IUNI OS中的OS主要是指“OUR SERVICE”,其本义是通过深度定制的安卓操作系统,为用户提供独特的体验与服务。这种独特性主要体现在四个方面,即优雅文艺的设计风格、精简轻快的实用功能、精致悦动的交互体验以及纯净精良的服务传递。
HTC Sense
HTC自主研发的Sense,是一款基于Android系统研发的智能手机系统。
LG Optimus
基于标准Android修改的LG Optimus系统
CyanogenMod
CyanogenMod是一个基于开源Android系统,供某些手机使用的二级市场固件。它提供一些在官方Android系统或手机厂商没有提供的功能 ,例如:支持Free Lossless Audio Codec- FLAC (无损音频压缩编码)音频格式的音乐,多点触控, 从SD外置存储器运行程序,压缩缓存,大量APN的名单,重新启动功能,Wi-Fi无线网络支持,蓝牙,USB网络分享等。CyanogenMod也是第一个使用BFS作任务管理器的操作系统。CyanogenMod声称提供比官方固件版本更高性能和更可靠。
Funtouch OS
Funtouch OS是一个Vivo基于Android系统进行定制的第三方手机操作系统。从2013年10月发布,始终坚持以用户体验为核心、以“简约乐趣智慧”理念为设计导向。历经数年的迭代更新,现已成为用户喜爱、综合体验优秀的智能手机操作系统,是vivo智能手机为用户提供高品质服务的坚固基石。
ColorOS
ColorOS是一个OPPO基于Android系统进行定制的第三方手机操作系统,直观、轻快、简约而富有设计感 。ColorOS也是OPPO公司力求软硬结合,开拓移动互联网市场的长线产品。
小米MIUI系统
MIUI是小米公司旗下基于Android系统深度优化、定制、开发的第三方手机操作系统,能够带给国内用户更为贴心的Android智能手机体验。从2010年8月16日首个内测版发布,MIUI已经拥有国内外1亿的发烧友用户,享誉中国、英国、德国、西班牙、意大利、澳大利亚、美国、俄罗斯、荷兰、瑞士、巴西等多个国家。MIUI是一个基于CyanogenMod而深度定制的Android流动操作系统,它大幅修改了Android本地的用户接口并移除了其应用程序列表(Application drawer)以及加入大量来自苹果公司iOS的设计元素,这些改动也引起了民间把它和苹果iOS比较。MIUI系统亦采用了和原装Android不同的系统应用程序,取代了原装的音乐程序、调用程序、相册程序、相机程序及通知栏,添加了原本没有的功能。由于MIUI重新制作了Android的部分系统数据库表并大幅修改了原生系统的应用程序,因此MIUI的数据与Android的数据互不兼容,有可能直接导致的后果是应用程序的不兼容。 MIUI是一个由中国一班爱好者一起开发的定制化系统,根据中国用户的需求而作出修改,现正处于Beta测试阶段,在收集用户意见后每逢周五均会提供OTA升级。现时MIUI系统由小米科技负责开发,而小米科技在2011年8月发布推出一部预载MIUI,名为小米手机的智能手机,2012年5月15日发布“青春版小米手机。
Emotion UI
Emotion UI是华为基于Android进行开发的情感化用户界面。独创的Me Widget整合常用功能,一步到位;快速便捷的合一桌面,减少二级菜单;缤纷海量的主题,何止让你眼花缭乱。触手可及的智能指导,潇洒脱离小白状态。贴心的语音助手,即刻解放你的双手。随时随地,尽情愉悦体验。
支持厂商:华为
Blur
Blur是摩托罗拉(Motorola)基于谷歌Android平台开发的应用界面,除了基本的Android特性之外,Blur最突出的特色是注重网络社交功能。Blur已经集成了很多国外知名社交网络的组件,包括Facebook、Twitter、Gmail、MySpace、Yahoo、Picasa 等,只要用户将Email与社交网络账户绑定,来自于这些社交网络的信息就会自动推送到手机当中。
支持厂商:摩托罗拉
Flyme OS
魅族手机操作系统,旨在为用户提供优秀的交互体验和贴心的在线服务。
Flyme作为业内领先的定制安卓系统,凭借强大全面的功能、人性化的操作方式和简约素雅的界面风格,一直被公认为是最优秀的手机操作系统之一。
Flyme是魅族为其智能手机倾力开发的创新之作,凝聚了魅族多年来对智能手机用户体验的深度发掘和在其历代操作系统上演进优化的经验和技术实力,力求为魅族手机提供更强大的应用功能和操作感受。最初的Flyme 10将提供逻辑更清晰、操作线程更短的用户交互,令功能一目了然、易用顺手,而系统应用也将结合各项快速操作方式而更加智能贴心。
Flyme系统秉承化繁为简,纯简绝俗的设计理念,针对国人使用习惯,将原本复杂的手持终端智能系统,用极简的界面,实现最少步骤内,行云流水般的功能操作。
Windows Mobile
Windows Mobile(简称:WM)是微软针对移动设备而开发的操作系统。该操作系统的设计初衷是尽量接近于桌面版本的Windows,微软按照电脑操作系统的模式来设计WM,以便能使得WM与电脑操作系统一模一样。WM的应用软件以Microsoft Win32 API为基础。新继任者Windows Phone操作系统出现后,Windows Mobile系列正式退出手机系统市场。2010年10月,微软宣布终止对WM的所有技术支持。
Windows Phone
Windows Phone(简称为WP)是微软于2010年10月21日正式发布的一款手机操作系统,初始版本命名为Windows Phone 70。基于Windows CE内核,采用了一种称为Metro的用户界面(UI),并将微软旗下的Xbox Live游戏、Xbox Music音乐与独特的视频体验集成至手机中。
Windows Phone具有桌面定制、图标拖拽、滑动控制等一系列前卫的操作体验。其主屏幕通过提供类似仪表盘的体验来显示新的电子邮件、短信、未接来电、日历约会等,让人们对重要信息保持时刻更新。它还包括一个增强的触摸屏界面,更方便手指操作;以及一个最新版本的IE Mobile浏览器——该浏览器在一项由微软赞助的第三方调查研究中,和参与调研的其它浏览器和手机相比,可以执行指定任务的比例超过48%。很容易看出微软在用户操作体验上所做出的努力,而史蒂夫·鲍尔默也表示:“全新的Windows手机把网络、个人电脑和手机的优势集于一身,让人们可以随时随地享受到想要的体验”。
Windows Phone,力图打破人们与信息和应用之间的隔阂,提供适用于人们包括工作和娱乐在内完整生活的方方面面,最优秀的端到端体验。
Symbian
Symbian(塞班)是一个实时性、多任务的纯32位操作系统,具有功耗低、内存占用少等特点,非常适合手机等移动设备使用,经过不断完善,可以支持GPRS、蓝牙、SyncML、以及3G技术。最重要的是它是一个标准化的开放式平台,任何人都可以为支持Symbian的设备开发软件。与微软产品不同的是,Symbian将移动设备的通用技术,也就是操作系统的内核,与图形用户界面技术分开,能很好的适应不同方式输入的平台,也可以使厂商可以为自己的产品制作更加友好的操作界面,符合个性化的潮流,这也是用户能见到不同样子的symbian系统的主要原因。为这个平台开发的java程序已经开始在互联网上盛行。用户可以通过安装这些软件,扩展手机功能。
BlackBerry OS
BlackBerry OS是Research In Motion专用的操作系统,第三方开发 。
第三方软件开发商可以利用APIs以及专有的BlackBerry APIs写软件,但任何应用程式,如需使它限制使用某些功能,必须附有数码签署(digitally signed),以便用户能够联系到RIM公司的开发者的帐户。这次签署的程序能保障作者的申请,但并不能保证它的质量或安全代码。
1 为什么Android总是事无巨细地告诉你应用索取的每一项权限?
相比Apple,Microsoft严格控制生态系统(从苹果给开发者的“App Store Guideline”可见一斑),只允许通过官方应用商店安装应用,并对每份上传进行仔细地审查而言,Android的开放就意味着,Google需要向 用户提供一系列用于为自己负责的流程、工具。所以在安装应用前,Android总是要事无巨细地告诉你,应用肯需要控制什么权限。
同样,开发者也制作了一系列易用的工具,用以鉴别可疑的应用程序,或是控制权限。
图1 Android 官方市场会强制提醒用
Andoird哪里开放了?
在Android中,用户能自由从本地安装应用,自由地对SD卡进行操作,自由选择应用市场。
如果愿意放弃保修,用户还能轻易地实行root,解锁基带(baseband)。只有一些产品会严密地锁定bootloader(如摩托罗拉)。
最重要的是,因为ASOP(Android源代码开放计划)的存在,绝大部分的Android代码都是开源的,开发者可以由此对Android系统进行 深入的修改,甚至可以自行编写一个符合Android规范的系统实例(如Cyanogen Mod)。正是因为ASOP,这篇文章才可能介绍多达5种原理不同的权限控制方法。
图2 Android开源计划的标志
开放的风险
不考虑Symbian,Windows Phone 65(及以下)平台,那么几乎所有的智能手机病毒都是Android平台的,甚至官方Android Market也闹过几次乌龙。在国内水货横行的市场,情况更是火上浇油,不法业者可以在手机的ROM,甚至是bootloader中做好手脚,让用户有病无法医。
在Android中,用户可以允许系统安装来自“未知源”(也就是非Google官方的,或手机预置市场的)应用程序。于是,移动平台最重要的门神------数字签名就被绕过了。
图3 Android 允许未知安装未知来源的应用程
出于Android的开放性,也有不允许“未知源”的反例:亚马逊的Kindle Fire平板使用了深度定制的Android,它只允许安装来自亚马逊官方商店的应用程序。
图4 亚马逊的 Kindle Fire 仅允许通过自带的市场安装应用
2 Android有哪些“权限”
首先需要明确一下Android中的种种“权限”。Android是在Linux内核上建立一个硬件抽象层(Android HAL),通过Dalvik以及各种库来执行android应用的。在手机启动时,首先需要由Bootloader(HTC手机上称作Hboot)引导 Linux及手机上各个硬件设备的驱动程序,之后才启动Android系统。所以其实我们会涉及到四种不同涵义的权限:
Android权限(Permission)
这指Android中的一系列“AndroidPermission”对象,是本文的中心内容。
Google在Android框架内把各种对象(包括设备上的各类数据,传感器,拨打电话,发送信息,控制别的应用程序等)的访问权限进行了详细的划 分,列出了约一百条“AndroidPermission”。应用程序在运行前必须向Android系统声明它将会用到的权限,否则Android将会 拒绝该应用程序访问通过该“Permission”许可的内容。
比方说,搜狗输入法提供了一个智能通讯录的功能,用户可以在输入联系人 拼音的前几个字符,或首字母,输入法就能自动呈现相关联系人的名字。为了实现这个功能,输入法必须声明它需要读取手机中联系人的能力,也就是在相关代码中 加上声明“androidpermissionREAD_CONTACTS”对象。
图5 搜狗输入法的智能联系人功能
原生Android只提供了对“一刀切”式的管理,要么同意使用,否则就根本就不安装应用程序。当用户遇到希望使用程序的同时,又想禁止部分Permission的场合,他就无路可走。
于是,不少开发者就捣鼓出了“第三条道路”;可惜的是,没有一种方法能同时做到既不需要将手机固件Root,又完全不涉及对原始应用程序进行反向工程的方法。
Root
Root指获得Android所在的Linux系统的Root(根)权限,有了根权限,你才能对Linux做出任意的修改。iOS中的越狱 (Jailbreak) 相当于获得iOS系统的Root权限(iOS是一种类Unix系统,和Linux都使用Root的概念)。在已Root的设备中,通常都是使用一个 叫“Superuser”(简称SU)的应用程序来向许可的程序授以Root权限。
Bootloader的解锁(Unlock)
利用数字签名,Bootloader可以限定只有正确签名的系统可以被引导。在修改固件以获得Root以前,解锁Bootloader通常是必须的。安装第三方修改、编译的固件也需要解锁Bootloader。
基带(Radio)解锁
在Android系统中,基带是上层软件与手机中无线设备(手机网络,Wi-Fi,蓝牙等)的驱动程序之间的中介。国外的网络运营商很喜欢锁定基带,从 而保证用户只能使用运营商自己指定的sim卡。在我国,锁定基带是非法的,手机制造商、网络运营商也不可以通过锁定基带的方法对待违约客户。iOS的“解 锁”就是解锁iOS中的基带软件。
为什么要控制Android权限
鱼和熊掌不可兼得,Android的世界有很多自由,坏人也能自由地做坏事。它的生态系统很强调自主:用户可以自主地减小风险,仅使用官方市场的应用程序,也可以自主地解除安全限制,从而获得更多自由。因此,在遇到坏事的时候,用户也不得不自主一下:
1, 抵制不道德,乃至非法行为
几乎所有的Android安全软件都能对来电、信息进行控制,以减少骚扰。
另一方面,很多应用都会要求它们实际功能以外的权限,表现在非(主动)告知地搜集设备序列号,位置信息,诱使用户默认地上传联系人列表等方面。
更坏一点的应用程序,则会踏入犯罪的范畴,比如能偷偷发出扣费信息,或是作为黑客的偷窥工具。
2, 减少恶意软件的损害
恶意软件即便潜伏成功,也难以获得权限,从而减少损失。
3, 用户有权自主地在抑制应用程序的部分权限时,继续使用该应用程序,而只承担由于自行设置不当而带来的后果。
用户拥有设备的所有权,因此有权自主控制设备上的内容、传感器等对象的访问;同时有权(不)运行,(不)编译设备上的应用程序。
大多数应用程序在运行时,并未达成主动告知的义务,是失误;然而即使主动告知,用户还是可以不理会。
为什么Android官方市场的强制提醒权限的行为不属于主动告知:
通过Android官方市场,“打包安装器”安装应用程序时,所显示的“权限”仅是在安装包内AndroidManifestxml声明的值,而非应 用程序实际上会调用的内容。该值仅用来表明Android系统能向应用授予的最大可能的权限。即便一个“Hello World”式的应用程序,也可以在AndroidManifestxml中声明所有可能的Android Permission。
这就是说,在AndroidManifestxml中声明的值与应用程序实际调用的权限有关联,但不等同,且这种提示是由Android系统负责实施的强制行为。
正确的理解是:“应用程序(被迫地)让Android系统告知用户,它在AndroidManifestxml中所声明的事项。”
这意味着应用程序在使用重要权限前,依然需要自行、主动地通知用户相关事宜。
图6 应用程序须要AndroidManifestxml中声明调用到的权限
然而,即便只是让一半的应用程序达到以上的标准,也是不可能的。应用程序需要通过收集用户信息,程序的错误日志。从而统计用户的喜好,改进程序。另一方 面,这也是发送精确广告但不追溯到用户身份信息的方式,这一点对于免费应用而言,是极其重要的。我们之所以能知道不同型号手机的占有率,应用软件的流行 度,是与这样的统计不可分离的。
一旦每个应用程序都专业地主动发出提醒,不专业的用户(大多数用户都是不专业的)通常会将之视为如同海啸警报一般的危机。
这么做对谁都没有好处------用户方的隐私权是毋庸置疑的,然而应用程序方面的获取信息记录的需求也是无可阻挡的。如果每个用户都打算阻止,只会落得被迫接受不平等条约的下场,在温饱以前,不会有人考虑小康的问题。
于是,现状就变得有趣:用户人享受着相同的服务;其中大部分用户出于不知情/好意,默默地向开发者、广告商提供了信息,剩下的少数用户则能阻断这种劳务。而作为维持Android平台的信息商人Google,只确保在它的地盘里,不会发生触碰底线的事情。
一句话总结:
设备是我的,不管你怎么说,反正我说了算,但我说的话大多是不算数的。
3 权限控制的方法
这里开始介绍各种控制Android权限的办法。可惜的是,几乎所有的手段都需要对设备进行Root,如果不这么做,则需要付出不小代价。
App Shield(国内常见的名字:权限修改器)
它是一个需要付费的Android应用,其原理是修改应用程序的apk安装包,删除其中AndroidManifestxml文件内,用于声明权限的 对应“AndroidPermission”条目,然后再用一个公开的证书对安装包重新签名(需要允许“未知源”),这样一来,应用程序就不会向系 统申请原先所需的权限。当应用运行至相应的流程时,系统将直接拒绝,从而达到用户控制权限的目的。
对于已安装的应用,AppShield也会按照同样方法制作好apk安装包,然后让用户先卸载原始的应用,再安装调整过的应用。除了该应用数字签名外,用户可以随时通过执行同样的流程,将吊销的权限恢复。
图7 AppShield
Apk文件的结构
Android应用都是打包成以apk扩展名结尾,实际上是zip的文件格式。
一个合法的apk至少需要这些成分:
根目录下的“AndroidManifestxml”文件,用以向Android系统声明所需Android权限等运行应用所需的条件。
根目录下的classesdex(dex指Dalvik Exceptionable),应用(application)本身的可执行文件(Dalvik字节码) 。
根目录下的res目录,包含应用的界面设定。(如果仅是一个后台执行的“service”对象,则不必需)
Apk根目录下的META-INF目录也是必须的,它用以存放应用作者的公钥证书与应用的数字签名。
当应用被安装后,这个apk文件会原封不动地移至设备的data/app目录下,实际运行的,则是Dalvik将其中Classesdex进行编译后 的Classesodex(存放在Dalvik缓存中,刷机时的‘cache wipe就是清除Dalvik的odex文件缓存’)。
优点:
完全不需要Root,适用于所有版本的Android设备。不会损坏系统,可以吊销任意一项Android权限。
问题:
1,需要重新安装应用,该行为可能会丢失应用的配置、历史记录。
2,执行权限吊销的应用的数字签名会被更改,无法直接更新。对于那些设计不良(没有意料到‘不声明权限’情况的),或有额外自校验的应用,可能会无法运行。
3,无法用于设备上的预装应用,除非制造商好心地将该应用设置为“可以删除”的状态。
4,这个方法修改了apk包中的内容------尽管实际上AndroidManifestxml和数字签名并不算是应用程序的本身,但修改它们可能引发著作权的问题。
5,需要开启“未知源”。
6,这是一个收费应用。
CyanogenMod 71(及以上版本)
Cyanogenmod是一款著名的第三方编写的开源Android ROM。
CM71加入了控制权限的开关,官方的名称是“Permission Revoking”,任何非系统/保护应用在安装后,可直接吊销任意一项权限,其效果等价于直接删除apk包中AndroidManifestxml的 对应条目,但不会引发自校验的问题。CM的权限工具的作用等同于AppShield,无非是在Android自身的权限系统中添加了一个开关。
图8 Cyanogen Mod 71中的权限吊销(Permission Revoking)设定
优点:
免费,使用简便,可随时,任意地吊销、恢复非预装应用的任意一项权限;不存在数字签名的问题,因而不影响使用自校验的应用程序。
问题:
此功能仅在Cyanogen Mod 71及以上版本提供,无法用于其它rom。因为是由Android系统出面吊销权限,其实现原理与App Shield完全相同,同样的,应用程序会因为设计不良而出现崩溃。
Permission Denied
这是可以吊销任意Android应用(注意,不当地吊销系统应用的权限可能会导致手机固件损坏,无法启动)的任意权限,对权限的修改在重启后生效。
实现原理应该与Cyanogen Mod 71+完全相同,适用于任何已经Root的系统,因为一般的Android系统虽然事实上支持权限吊销,但没有像Cyanogen Mod那样放置接口,因此需要重启后才能应用权限配置。同样也有系统出面拒绝权限而导致的崩溃现象。
图9 Permission Denied免费版吊销应用程序权限的场景
优点:
效果与Cyanogen Mod中的权限吊销效果一致,且可吊销系统应用的权限。同时提供了免费与收费版本,免费版并没有基本功能的缺失。适用于所有版本号不低于16的Android设备。
问题:
调整后的权限需要重启才能生效。设计不良的应用会崩溃。不恰当的权限修改会损坏系统,导致无法开机。
PDroid
PDroid实际上是一个Android内核补丁加上一个用于管理的外部应用。补丁需要在Recover环境中刷入系统,也可以由开发者自行移植入系 统。该软件在Android ASOP 234代码基础上开发,仅适用于没有改动内核的Android 23系统,目前还未支持Android 4。
图10 PDroid的界面
为了避免Cyanogen Mod 71+权限吊销(Permission revoking)导致的崩溃问题,以及后台服务(如LBE,QQ手机管家等,PDroid的作者认为通过后台服务拦截权限并不是好办法),PDroid 并不阻止应用程序声明权限,但会在其实际索取相关信息时,予以阻止。通俗地说,就是签署协议但不执行。在PDroid的用户界面,用户能随时精确地控制涉 及隐私的各项权限。对于某些内容,除了阻止外,用户还可以伪造一个随机或指定的数据。
可控制的内容包括:
IMEI(可伪造)
IMSI(可伪造)
SIM卡序列号(可伪造)
手机号码(可伪造)
来,去电号码
SIM卡信息
当前蜂窝网络信息
(以上七者均来自AndroidPermissionREAD_PHONE_STATE)
GPS定位信息 (可伪造,来自AndroidPermissionFINE_LOCATION)
基站定位 (可伪造,来自AndroidPermissionCOARSE_LOCATION)
系统自带浏览器的历史,书签(AndroidPermissionBOOKMARKS)
联系人 (androidpermissionREAD_CONTACTS)
通话记录 (androidpermissionREAD_CONTACTS)
系统日志 (androidpermissionREAD_LOGS)
当前账户列表 (androidpermissionGET_ACCOUNTS)
当前账户的授权码 (androidpermissionUSE_CREDENTIALS)
短信,彩信 (可能与这5个权限有关)
androidpermissionREAD_SMS
androidpermissionRECEIVE_SMS
androidpermissionSEND_SMS
androidpermissionWRITE_SMS
androidpermissionRECEIVE_MMS
日历 androidpermissionREAD_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安全大师为例介绍。
图11 LBE安全大师
LBE是国内一个叫“LBE安全小组”开发的工具,支持Android20~40。它的核心功能是像杀毒软件一般,通过一个需要Root权限的后台 服务,劫持所有调用权限的行为,并放行用户许可的部分(其官方宣传为‘API级别拦截’)。它和PDroid一样几乎不会引发应用程序崩溃,它支持拦截几 个涉及用户的关键权限(LBE手机管家31/32):
读取短信 (androidpermissionREAD_CONTACTS)
联系人记录 (androidpermissionREAD_CONTACTS)
通话记录 (androidpermissionREAD_CONTACTS)
定位 (AndroidPermissionCOARSE_LOCATION
AndroidPermissionFINE_LOCATION)
手机识别码 (与AndroidPermissionREAD_PHONE_STATE有关)
通话状态 (与AndroidPermissionREAD_PHONE_STATE有关)
发送短信(具体原理不明,同样类似于禁止这五个权限
androidpermissionREAD_SMS
androidpermissionRECEIVE_SMS
androidpermissionSEND_SMS
androidpermissionWRITE_SMS
androidpermissionRECEIVE_MMS)
拨打电话 (androidpermissionCALL_PHONE)
通话监听 (androidpermissionPROCESS_OUTGOING_CALLS)
除此以外,LBE还可以分别控制应用在Wifi,手机网络的联网权限,其原理是依靠IPtables防火墙,而非通过Android的“Internet”权限。
此外LBE手机管家还提供基于智能内容审查的短信拦截、来电归属地显示,以及禁用系统(保护)应用,进程管理,杀毒等功能。
LBE提供两个版本,一个叫“LBE安全大师”,是一个全面的手机管家类应用,更新比较频繁,另一个版本(LBE手机隐私卫士,LBE Security lite)仅提供权限方面的管理。
考虑到主要市场在国内,LBE的发行策略看上去有些奇怪,它在Google的官方市场并不发行最新版。通常只能只能在LBE的官方网页,以及国内的应用市场获得最新版本。
优点:
使用非常简单,功能强大而全面,风险很小,可以控制系统应用。适用范围广,有很多替代产品。
问题:
需要后台服务 (尽管蚕豆网有个评测,认为它对能耗几乎没有影响),不能控制所有的Android权限。
4 自启动的控制
Android对后台服务有着最好的支持。
在Android中可以自由地开发一种称为‘Service’的后台运行的对象,加上没有苹果公司对应用程序的严格限制。诸如QQ挂机,即时调用第三方应用程序之类的形式都可以轻易实现。
为了全面支持后台服务,也为了适应移动设备资源紧张,不得不经常清理内存的问题,应用可在系统中设置触发器,当系统发生了某个特定特定事件时(系统启动,拨打电话,收发信息,安装、卸载应用,插上电源等,或应用程序自行定义的事件),就会触发启动应用程序。
AutoStarts 自启动管理
AutoStarts是一个收费应用,通过它,用户能了解系统中每一项程序会在什么场合下被触发运行。如果提供Root权限,则还能禁止这样的行为。
这里以Google Maps应用62版为例。默认情况下,这款应用总是会保持后台运行,并每小时向Google发送一次当前用户的位置信息。为了阻止这样的行为,需要联合 使用AutoStarts与任意一款进程管理应用:在AutoStarts中,阻止Google Maps的自行启动(如图),在每次使用完后,把Google Maps的进程杀掉。
图12 AutoStarts可以对自启动项目进行修改
5 其他
Root带来的风险
有一个钻牛角尖的说法认为,一旦对设备进行了Root,便无安全一说,只要恶意程序一旦偷偷获得Root级别,一切都是空谈。
这种说法之所以钻牛角尖,是因为:一方面Android中的Root权限通常都是需要用户通过Superuser应用进行授权的,这已经够用,虽然不能 指望Superuser无懈可击;另一方面,控制Android权限主要是为了让应用程序在“灰色地带”的行为收敛一些,它们实际显然不是病毒等犯罪软 件。
著作权的问题 (作者不是法律方面的专家,以下言论仅供参考)
我们知 道,Android中的应用程序是基于Java语言编写的。而为了达到跨平台的目的,Java软件是以字节码(或叫中间代码,bytecode),而非计 算机能直接执行的机器码(Machine Code,有时也叫作Binary)的形式存在。因此执行Java软件时,需要一个Java虚拟机(Android系统中的Java虚拟机就是 Dalvik)负责解释运行,有的时候,虚拟机还会通过即时编译(JIT)的方法将字节码编译为机器码后再运行,以提高程序的执行效率。
这就出现一个很有趣的现象:
除非另行规定,作为设备的拥有者,用户总是可以自行决定如何使用软件,能自行决定程序能否访问用户自己的计算机(移动设备亦然)里面的各个内容、对象。
由此衍生出,在需要对代码编译、解释的场合,用户也能通过对编译器(解释器)的干预,来影响代码的执行效果。在Android中,用户还可以在Dalvik解释、编译的时候动手。
这是因为,著作权仅保护了软件代码不受到非授权的反向工程,未授权传播等侵犯。另一方面,对于Android上的Java,网页中的 javascript程序,赋予用户解释、编译的权利是程序能执行的先决条件;同时,软件发行者发通常也会主动提出放弃这种权利(表现为‘软件按原样提供 ’、‘不对使用软件造成的后果负责’等条目)
在编译、解释的过程中,需要通过汇编(Assemble),连接(Link)等方法将编译 好的对象(Object)、方法(Function)联系起来。默认情况下,这些行为是由原始的代码(源代码、中间代码)与编译器(解释器)决定的,但是 用户可以通过制约编译器(解释器)的设置,从而影响到最终代码。这么做是没有问题的。
还有一种,应用程序在安装后,会在系统中产生一些 缓存,或注册一些信息。当其中的内容有关用户数据时,读取或修改它们也是没有问题的。这就是所谓“只要是你的东西总是你的”;也是Cyanogen Mod、Permission Denied不会涉及版权问题的原因所在。
总之,一个Android应用之所以能运行的前提是:
1,首先,用户允许使用这个应用
这也可以理解成:用户安装了应用(以及因此设定的后台对象),购买了预装应用的手机。这一点即不影响应用程序的主动通知义务,也不影响用户事后的干预。
2,接下来,用户允许Dalvik对该应用使用“解释”,“JIT”的方法,从而该应用程序得以执行。
3,用户随时可以对该应用作出任意不违反版权的干预。
所以,在没有另行规定的前提下,用户总是可以自行决定,通过给应用程序分配自定义的权限;或是在应用程序调取内容,对象时予以阻断。同时,用户也需要自行承担因不当操作产生的后果。
附录:
1、 数字签名
数字签名是一种使用了公钥加密领域的技术实现,用于鉴别数字信息的方法。一套数字签名通常定义两种互补的运算,一个用于签名,另一个用于验证。数字签名可以轻易地验证完整性(正确性),合法签署的数字签名具有不可否认性。 (摘录自维基百科“数字签名”条目,有修改)
2、 版权声明
文章中引用的图标,或的部分,以及部分文字的引用,仅出于合理使用的目的,可能是持有人版权所有的。
3、 一些行为的说明
不道德行为
应用程序在启动时,或在主动告知以前,试图索取、收集电话号码、邮箱地址、位置信息等与个人身份直接关联的内容。如果是与个人关联,但不能直接联系到个人信息的IMEI等设备、SIM卡的串号,则稍微好一些。
附图1,不道德的应用程序在启动的第一时间就试图获取隐私信息
(新浪微博28),无论用户是否绑定了手机,应用都会第一时间记录当前手机的号码
(UC浏览器,快拍二维码),应用总是会不主动通知地记录设备的位置信息
没有实行主动通知的例子
附图2 这个应用程序在第一次启动时便开始收集位置信息,用户需要切换六次屏幕才能看到有关位置信息的提示。这项提示还有意忽略应用程序本身就会记录用户位置信息,即便用户并不使用需要位置信息的服务
主动通知的例子
附图3 主动通知就是在第一屏的醒目处,或用醒目的对比色等强调方式进行通告
首先了解下buildprop文件的部分参数。
# begin build properties (开始设置系统性能)
# autogenerated (通过设置形成系统信息)
ro=GRI40 (版本ID)
robuild=GRJ22 (版本号)
robuildversionincremental=engbuildbot20110619060228 (版本增量)
robuildversionsdk=10 (sdk版本)
robuildversioncodename=REL (版本代号)
robuildversionrelease=234 (Android 234系统)
robuilddate=Sun Jun 19 06:02:58 UTC 2011 (制作者及制作时间)
robuilddateutc=0
robuildtype=user (编译模式,如user,userdebug,eng,test模式)
robuilduser=buildbot (编译账户)
robuildhost=bb1 (编译主机系统)
robuildtags=test-keys (编译标签)
roproductmodel=HTC Wildfire (HTC内部手机代号)
roproductbrand=htc_wwe (手机品牌)
roproductname=htc_buzz (手机正式名称)
roproductdevice=buzz (采用的设备)
roproductboard=buzz (采用的处理器)
roproductcpuabi=armeabi-v6j (cpu的版本)
roproductcpuabi2=armeabi (cpu的品牌)
roproductmanufacturer=HTC (手机制造商)
roproductlocalelanguage=zh (手机默认语言)
roproductlocaleregion=CN (地区语言)
rowifichannels= (WIFI连接的渠道)
roboardplatform=msm7k (主板平台)
# robuildproduct is obsolete; use roproductdevice (旧代码robuildproduct,使用代码roproductdevice)
robuildproduct=buzz (建立产品)
# Do not try to parse robuilddescription or fingerprint (不要试图修改description和fingerprint)
robuilddescription=passion-user 233 GRI40 102588 release-keys (用户的KEY)
robuildfingerprint=google/passion/passion:233/GRI40/102588:user/release-keys (系统指纹)
# end build properties (性能代码完毕)
#
# systemprop for buzz (系统技术支持由BUZZ提供)
#
# Density in DPI of the LCD of this board This is used to scale the UI (高密度的液晶的DPI板。这是用来大规模UI的)
# appropriately If this property is not defined, the default value is 160 dpi (appropriately如果这个属性没有定义,缺省值是160 dpi的分辨率)
rosflcd_density=240 (显示屏分辨率,数值越大分辨率越底,240就是800480的)
# View configuration for QVGA (屏幕的设置)
viewfading_edge_length=8
viewtouch_slop=15 (触摸屏灵敏度,数值越大越灵敏)
viewminimum_fling_velocity=25 (滑动速度)
viewscroll_friction=0008 (滑动误差)
# RIL specific configuration (特定设置)
rildlibpath=/system/lib/libhtc_
rorileccHTC-WWE=999
rorileccHTC-ELL=92,93,94
rorilenablea52HTC-ITA=1
rorilenablea53HTC-ITA=1
rorilenablea52=0
rorilenablea53=1
rorilvmail23415=1571,BT
rorilhsdpacategory=8 (hsdpa全称High Speed Downlink Packet Access中文意思:高速下行分组接入,设置的数越大传输越快)
rorilhtcmaskw1bitmask=429496
rorilhtcmaskw1=14449
rorildefagpsmode=2 (打开AGPS服务支持,可改为rorildefagpsmode=0 改后能省电但GPS定位速度会变慢)
rorilgprsclass=12 (GPRS设置)
# For HSDPA low throughput (HSDPA低输量)
rorildisablepowercollapse=1 (关闭电源)
# Modify MMS APN retry timer from 5s to 2s (修改短信的APN设置5秒为2秒)
rogsm2nd_data_retry_config=max_retries=3, 2000, 2000, 2000
# Time between scans in seconds Keep it high to minimize battery drain(扫描在几秒之内,可降低用电量)
# This only affects the case in which there are remembered access points, (这个修改仅能影响此文件)
# but none are in range(但是没有一项是在范围内的)
wifiinterface=eth0 (WIFI界面)
wifisupplicant_scan_interval=45 (WIFI扫描间隔时间,这里设置是45秒。把这个时间设置长点能省电)
# Mobile data interfaces (移动数据的接口)
mobiledatainterfaces=rmnet0,rmnet1,rmnet2
# Allow or deny tethering (允许和拒绝绑定)
rotetherdenied=false
# Default network type (默认的网络类型)
# 0 => WCDMA Preferred (0=WCDMA优先)
rotelephonydefault_network=0
# Enable Google-specific location features, (谷歌特定地点的设置)
# like NetworkLocationProvider and LocationCollector(如网络服务器提供商和服务器位置)
roc o mgooglelocationfeatures=1
# The OpenGL ES API level that is natively supported by this device (开放式绘图介面)
# This is a 1616 fixed point number (界面有16个点,16个不动点数量)
roopenglesversion=65536 (开放式绘图介面参数)
# Disable fs check on boot by default (开机时默认禁用FS检查)
syscheckfsfat=false
# Performance settings (性能设置)
dalvikvmexecution-mode=int:jit
dalvikvmheapsize=24m (虚拟内存大小,可设置为16m或24m或32m或48m)
persistsysuse_dithering=1
persistsyspurgeable_assets=1
# Increase SKIA decode memory capability for progressive jpg file
romediadecjpegmemcap=20000000
#
# ADDITIONAL_BUILD_PROPERTIES (其他性能设置)
no_require_sim=true (手机卡保护设置)
rorommanagerdeveloperid=cyanogenmodnightly (固件管理器开发者是CM大神)
rourllegal=http://www/intl/%s/mobile/android/basic/phone-legalhtml
rourllegalandroid_privacy=http://www]/intl/%s/mobile/android/basic/privacyhtml
ro comgoogleclientidbase=android-google (谷歌客户身份)
ro comandroidwifi-watchlist=GoogleGuest (WIFI用户名单)
rosetupwizardenterprise_mode=1 (默认情景模式)
ro comandroiddateformat=MM-dd-yyyy (默认时间格式,改为yyyy-MM-dd,显示效果就是XXXX年XX月XX日)
ro comandroiddataroaming=false (漫游设置)
roconfigringtone=Playaogg
(默认铃声设置,文件在/system/media/audio/ringtones 把喜欢的铃声放这里,比如123
MP3放入ringtones文件夹中,这里代码改为roconfigringtone=123 mp3)
roconfignotification_sound=regulusogg (默认提示音,文件在/system/media/audio/notifications 修改方法同上)
roconfigalarm_alert=Alarm_Beep_03ogg (默认闹铃,文件在/system/media/audio/alarms 修改方法同上)
romodversion=CyanogenMod-7-06192011-NIGHTLY-buzz (版本信息,改这个能让你大名出现系统关于中,改为romodversion=xxxxx)
rosetupwizardmode=OPTIONAL (安装向导模式)
net bt name=Android (系统名称)
dalvikvmstack-trace-file=/data/anr/tracestxt
步骤阅读
欢迎分享,转载请注明来源:品搜搜测评网