Android组件

2024-09-25

Android组件(共3篇)

Android组件 篇1

1 引言

随着智能手机市场的不断发展, 越来越多的智能手机代替原来的功能手机成为消费者的首选, 智能手机以其强大的功能和便捷的使用方式赢得了消费者的青睐。但是, 由于手机的智能性和功能性的增强, 智能手机用户也面对严重的安全问题和潜在的个人信息泄露风险。目前, 整个智能手机市场以Android操作系统的占有率最高, 相应的针对Android手机的恶意软件和系统漏洞的数量也遥遥领先。

本文首先介绍Android系统框架和使用的安全机制, 然后详细描述组件劫持漏洞造成的权限及能力泄露问题, 并根据问题的特点提出相应的解决方案, 实现对该类漏洞的静态检测。

2 Android 系统权限检查机制介绍

Android是一个“权限分离”的系统, 任何一个应用程序在使用Android受限资源 ( 网络、电话、短信、蓝牙、通讯录、SDCard等) 之前都必须以XML文件的形式事先向Android系统提出申请, 等待Android系统批准后应用程序方可使用相应的资源, 权限与Java的API是多对多的映射关系[9]。

3 Android 系统组件机制介绍

3. 1 四大组件介绍[1]

( 1) Activity界面。Activity为Android应用提供了可视化的用户界面, 它既可以显示控件也可以监听并处理用户的事件并做出响应。如果应用程序需要多个用户界面, 那么这个应用程序将会包含多个Activity, 多个Activity组成Activity栈, 当前活动的Activity位于栈顶。

( 2) Service组件。Service与Activity的地位是并列的, 它代表一个独立的Android组件。Service一般在系统后台运行, 不与用户交互。

( 3) Content Provider组件。Android平台通过Content Provider组件, 把一个应用程序的指定数据提供给其他应用程序。这些数据可以存储在文件系统或SQLite数据库中。该组件提供统一的数据访问方式。

( 4) Broadcast Receiver组件。BroadcastReceiver是Android应用中非常重要的一个组件, 从代码的角度看, 它类似于事件编程中的监听器。与普通事件监听器不同的是: 普通事件监听器监听的事件源是程序中的对象, 而BroadcastReceiver监听的事件源是Android应用中的其他组件。

3. 2 Activity 和 Service 的生命周期介绍[1]

Activity和Service的生命周期如图2所示。

( 1) Activity生命周期。

1整个的生命周期, 从on Create ( ) 开始到on Destroy ( ) 结束。Activity在on Create ( ) 设置所有的“全局”状态, 在on Destory ( ) 中释放所有的资源。

2可见的生命周期, 从on Start ( ) 开始到on Stop ( ) 结束。在这段时间, 可以看到Activity在屏幕上, 尽管有可能不在前台, 不能和用户交互。在这两个接口之间, 需要保持显示给用户的UI数据和资源等。

3前台的生命周期, 从onResume ( ) 开始到on Pause ( ) 结束。在这段时间里, 该Activity处于所有Activity的最前面, 和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换。

( 2) Service生命周期。

1通过调用startS ervice ( ) 启动一个Service, 执行start Service ( ) 一定会触发on Start ( ) , 但如果该Service已经在系统中存在, 则on Create ( ) 不会被再次调用, 它只在Service第一次启动时触发。通过start Service ( ) 启动的Service会一直运行, 直到停止它。多次通过start Service ( ) 启动某个服务并不会生成多个实例, 但会导致服务的on Start ( ) 被多次调用。

2通过bind Service ( ) 来获得一个服务的链接, 这个链接是一直会保持到通过unbind Service ( ) 断掉它。如果在连接时系统中还没有该服务, 则可能会新创建一个服务, 这时Service的on Create ( ) 函数也同样会被调用。一个Service如果是通过bind Service ( ) 启动的, 那么它会一直存在到没有任何客户端与它保持连接为止, 原因是可能有很多客户端与这个服务保持连接, 这时如果某个链接被客户端主动断掉只会是Service的链接数减1, 当减至0的时候这个Service就会被销毁。

3一个Service既可以被启动 ( start) 也可以被连接 ( bind) , 当然, 在Service停止, 被销毁时, 会触发其on Destroy ( ) 函数, 在这里完成这个Service相关资源的清理, 比如停止其子线程, 注销监听器等等。

3. 3 组件配置不当带来的问题

Android四大基础组件Activity、Service、Receiver、Provider中均有属性permission和exported。permission属性表明了访问该组件所需要的权限, exported属性的值为true时, 该组件能被其他应用访问, 反之异然。exported缺省值需要根据组件是否有intent - filter决定 ( content providers组件除外, 该组件缺省值始终为true) , 当没有intent - filter时, 缺省值为false; 有intent - filter时, 缺省值为true。

程序中使用公开组件可以提高组件的重用, 优化代码结构, 其明显的缺陷是会带来权限泄露和权限传递。在图3中, 若程序A是恶意程序, 则通过调用程序B的组件B1实现隐私数据的窃取, 因此, 程序B存在权限泄露缺陷。另外, 多个共谋的程序可以利用其他程序的权限泄露缺陷来提升自身的能力。除了权限泄露外, Activity, Service和BroadcastReceiver三类组件可以被攻击者实施数据攻击和操作攻击。

4 解决方案 ( Solution)

对前文提到的问题, 本论文提出相应的解决方案, 该解决方案主要有三个部分:

( 1) 系统API特征库的建立。本解决方案重要的一部分就是特征库的建立。该特征库存储的是系统API和系统权限的对应关系, 由Android系统权限机制决定了这应该是一对多的关系。

本特征库的建立依赖于对Android API文档的解析, 而且一旦建立后, 对特征库的维护就尽可能的小了, 每次的改动也是静态的改动。表项发生错误或者有遗漏的时候。

( 2) 暴露组件的检测。由前文所述, 组件劫持漏洞存在的一个主要前提是: 存在暴露的组件。所以检测的第一步需要查找暴露的组件, 若存在则继续检测, 若不存在则无继续检测的必要。

由于组件的暴露与否, 是由Android Manifest. xml文件中每个组件的exported属性和 < intent - filter > 标签共同决定的, 所以, 在检测是否存在暴露组件的时候, 就需要分析Android Manifest. xml, 然后根据每个组件中相应的值来判断。例如, 一个Activity的exported的值为false, 则不管该组件是否有intent - filter标签都是未暴露的; 若exported的值为true, 则相反, 该组件一定暴露; 在没有exported的情况下, 若组件有intent - filter标签则说明该组件暴露, 若没有则未暴露。

( 3) 暴露组件是否存在权限和能力泄漏的检测。当暴露组件检测完毕, 并发现暴露的组件后, 就需要对照特征库来检测该组件是否存在权限和能力泄露的问题。

正常情况下, Android应用程序的组件若使用某项涉及敏感权限操作, 需要首先在Android Manifest.xml文件中声明, 而且会在使用到该权限的组件的描述中添加permission属性用来控制自己被调用时, 调用者同样具备相应的权限。

在检测是否存在权限和能力泄露的问题时, 应从暴露的组件入手。由本文第三部分中所讲到的Activity和Service的生命周期可知, 这两者的入口函数为on Creat ( ) 和on Start ( ) , 然后通过静态分析反编译后的代码, 使用递归的方式构造出暴露组件的函数调用图, 如图4所示。然后对整个流程图中用到的系统API和特征库中的系统API做匹配, 判断是否存在对敏感权限的使用。

5 实验结果

本文根据前述原理, 将第三部分的解决方案编程实现为自动化检测系统, 并用此系统对Android应用程序扫描测试生成了相应的测试结果, 测试结果包含两项内容, 第一项判断Android客户端程序是否存在暴露组件, 第二项判断如果Android程序存在暴露组件, 那么该组件是否涉及到权限。

作为测试样本, 本研究从国内近100家银行的门户网站下载最新的APK文件作为检测对象, 总共收集到的APK安装程序为99个; 然后由自动化检测系统对这99个APK程序做自动化的分析, 并生成了测试结果。

经过对这99家银行APK程序的自动化测试结果中上述两项内容的统计后发现, 存在组件暴露问题的银行APK客户端有57个, 其中发现权限或能力泄露问题的有39家银行客户端。计算后可知, 存在组件问题的银行Android客户端所占比例高达57% , 而存在权限及能力暴露的占总数的40% 。

测试结果如图5所示。

6 结束语

Android组件机制有利于编程人员代码重用, 但是不谨慎的使用组件和对组件的错误配置会造成应用程序成为潜在的恶意程序帮手。对这一漏洞的检测, 本文通过静态代码分析, 从Android Manifest. xml文件中的组件声明入手, 分析其是否暴露, 然后再从暴露的组件的函数入口开始深度遍历, 以发现该组件存在的权限或能力泄露的问题。经过上述检测, 可以在程序测试阶段帮助测试人员提前发现应用程序中存在的这一问题, 并对此做出相应的补救措施。

参考文献

[1]董晓刚.浅析Android系统的四大基本组件[J].中国电子商务, 2013, (01) :39

[2]傅建明, 李鹏伟, 易乔, 黄诗勇.Android组件间通信的安全缺陷静态检测方法[J].华中科技大学学报 (自然科学版) , 2013, (S2) :259-264

[3]洪智勇, 张宁.移动终端软件开发技术课程教学改革研究与实践[J].软件工程师, 2014, (6) :46-48

[4]李鸥.Android安全机制分析及双用户安全保护模型的设计[J].保密科学技术, 2014, (03) :42-46

[5]钱宇虹.多线程环境下如何正确使用Java集合类[J].软件工程师, 2012, (10) :45-48

[6]符易阳, 周丹平.Android安全机制分析[C].第26次全国计算机安全学术交流会论文集, 2011.

[7]沈才樑, 唐科萍, 俞立峰, 樊甫伟.Android权限提升漏洞攻击的检测[J].电信科学, 2012, (05) :115-119

[8]Shabtai A, Fledek Y, Kanonov U.Google android:a comprehensive security assessment[J].IEEE Security and Privacy, 2010.

[9]Shabtai A, Kanonov U, Elovici Y.Detection, alert and responseto malicious behavior in mobile devices:knowledgebased approach[M].RAID, 2009.

[10]Jing, Yiming and Ahn, Gail-Joon and Zhao, Ziming and Hu, Hongxin.Risk Mon:Continuous and Automated Risk Assessment for Mobile Applications.Proceedings of 4th ACM Conference on Data and Applications Security (CODASPY) .

Android组件 篇2

1我来给讲解一下,画布的问题;首先onDraw提供一个默认的canvas;我们可以想象一下,这块画布就是手机屏幕,我们可以使用这块画布画背景色;

2我们的球形加速球,是通过两层图重叠取得重叠的部分

示意图如下

我们先画出了矩形,代码如下

path.reset; path.moveTo(600, courentProgress); path.lineTo(600, 600); path.lineTo(count, 600); path.lineTo(count, courentProgress);

然后画出了圆形,设置画笔,使得只显示两部分重叠的部分:

此处可参考上一篇:blog.csdn.net/taoolee/article/details/48527917

PorterDuffXfermode mode = new PorterDuffXfermode(PorterDuff.Mode.SRC_ATOP); paintRect.setXfermode(mode);

这样显示的效果就是

【3】实现点击加速球,加速效果

先要添加点击事件vcD4NCjxwcmUgY2xhc3M9”brush:java;“>private float x; private float y; @Override public boolean onTouchEvent(MotionEvent event) { x = event.getX(); y = event.getY(); switch (event.getAction()) {case MotionEvent.ACTION_DOWN: if (x>250&&x<550&&y>250&&y<550) { handler.sendEmptyMessage(0x11); return true; } } return super.onTouchEvent(event); }

然后使用handler处理改变当前水面高度,

我们先默认初始高度75%

Android组件 篇3

在现今的社会中,我们的生活中存在了一个不可或缺的东西—手机,利用手机我们可以QQ、微信聊天、看视频、打游戏,似乎连着网就可以做很多事情,包括不用拿着钱就可以买任何东西,因为有电子钱包。它让我们的日常变得更加便利,可是在享受这些方便的时候也承担着更多的隐私泄露风险。在智能终端系统上,Android操作系统占据着很大的比重,并有日趋加重的势头。因此,关于Android系统的应用程序的漏洞数目也是层出不穷。

由于众多Android安全漏洞的产生,Android平台的威胁也越来越大。众所周知,Android应用框架是基于组件的方式来实现代码重用,因此应用程序在进行程序设计时都是以组件为基本模块,在组件内存在许多对敏感资源访问的功能。如果编程人员对组件使用不够熟练就会造成组件漏洞。因此本文主要针对组件漏洞展开研究,对该漏洞的原理、应用场景做了深入的分析,并对漏洞的检测技术进行研究。

2 Android系统概述

2.1 Android体系结构

Android的架构采取堆栈式,层次之间分工明确又协同工作。整个系统的结构分为5个层次,从上向下依次为:应用程序层、应用程序框架层、系统运行时库以及Linux内核层。

2.2 Android系统的安全机制

Android系统设定了权限分离的安全机制,将安全设计体现在各个结构层次上。尽管如此,Android系统仍然存在诸多安全威胁。

沙盒技术、签名技术、权限的设置等都是Android的自我保护机制。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行,这就使得程序之间的代码和数据分开,不可以互相访问。一个应用程序在没有别的应用程序允许的时候只能访问自己的数据。Android程序是需要签名的,而且是通过验证证书来签名的。若是Android的应用程序需要调用私有权限譬如拍照、打电话、读取联系人信息,是利用系统的API申请相应的权限。

Android系统在AndroidManifest.xml中必须设置所需的访问权限,也必须声明组件访问的许可。在一个应用程序的内部,各个组件之间允许互相访问;在不同的应用程序之间则必须设定访问权限,只有申请权限才可调用该组件,以防恶意利用。

3 Android系统组件间的安全缺陷

Android系统主要有四大组件:Activity,Service,Broadcast Receiver和Content Provider。组件间的通信有三种:Intent、IPC Binding和ContentResolver。其中大多数是通过Intent通信。当不同的应用程序或者同一个应用程序的不同组件之间需要传输数据就需要Intent的帮助。Intent能够实现组件间的异步并且保存相应的“意图”。Intent也实现了通用组件的多次利用,减轻了编码的成本。但是方便的同时,组件的权限泄露就产生了。

权限泄露也即权限提升。它是组件的重用带来的威胁。如图1,程序M是恶意程序,希望获得私密信息而又没有得到权限许可,程序N得到了访问该私密信息的权限,M与N存在某个组件n1的重用,那么M就会通过调用N程序中该组件盗取私密信息,从而造成私有信息的泄露,造成安全隐患。

4 Android安全漏洞分析技术

Android漏洞的挖掘技术大体分为静态分析和动态分析。

4.1 静态分析技术

静态分析技术是指不运行代码,分析反编译生成的源码,从而找到漏洞的方法。静态分析的步骤:(1)反编译生成源码,对源码通过词法、语法分析,将其转化为映射关系的表现形式。(2)再在(1)中间表现形式上进行分析。中间形式通常是使用抽象语法树(AST),此方式是能够比较直接明了的展现出源码,是一种存储效果很好的语法表现形式,AST在查询的速度、操作、遍历等方面有很高的效率。

静态分析技术的优点是:查询代码的范围广、分析速率快,漏报率低。但是也有不足之处:查询的同时不能实际运行代码,因此会有大量的误报。

4.2 动态分析技术

动态分析是不用源代码,但是要通过实际运行代码观测运行结果以此来分析漏洞的具体位置。动态分析有两大技术:(1)数据流分析:利用半有效的数据去诱发软件中隐藏的漏洞,通过对运行结果分析来发掘漏洞。(2)动态跟踪技术:在运行代码中设置多个断点,对调用函数的正确性及数据流实行追踪,挖掘潜在的漏洞。

动态分析技术有漏洞率低、精确率高、不用反编译生成源代码等优点,通常情况下是不会有误报。可是在断点的确定上、技术人员以及检测框架上有局限性。Fuzzing技术(模糊测试技术)是主要的动态分析技术。

4.3 动静结合的安全漏洞分析技术

目前,软件漏洞挖掘技术大多不是单纯的静态或动态技术,而是结合多种挖掘方法的优点,从而得到高效、快速、准确的混合型漏洞发掘技术。

Android的静态和动态相结合的挖掘技术有许多的优点。在静态分析技术上采取类型推断与约束分析相结合的方式获得漏洞点,这种方式综合分析了漏洞点处各信息间的约束关系。再运用漏洞约束算法得到漏洞点处的测试用例,减少了测试用例的个数,并提升了精确度。结合Android漏洞库对测试用例实行变异处理,最后运用Fuzzing技术,从而得到漏洞。

这类漏洞挖掘技术一般是动态分析对静态分析结果进行更深入的解析,静态分析为动态分析生成需要的测试用例,大大减少了测试用例,也降低了Fuzzing的漏报率。

5 解决方案

通常,Android应用程序的组件若是想调用某项与隐私权限有关的组件,是必须在AndroidManifest.xml文件中进行声明设置,而且在被调用组件的设置里增加permission属性用来操纵自身被调用时,调用者同样具备相有该权限。研究前文的漏洞检测技术,本文就权限泄露提出解决方案,主要包括四个部分:

(1)Android API(应用程序接口)与permission映射集合。首先需要建立特征库。通过Android API的文档,创建系统权限与调用方法的映射关系。一个权限对应了多个方法,可以运用对应的方法去调用相应的系统权限资源。这个特征库一旦建立后,只需要在表项有遗漏或者错误的时候对其做微调,不需要太多的维护。

(2)暴露组件的检测。组件权限漏洞产生的首要条件是:存在公开的组件。所以检测首先必须排查公开的组件,如果有就继续检查,若没有就不需要继续。

组件是否公开进行重用,是由AndroidManifest.xml文件中每个组件的exported属性和<intent-filter>标签协同决定的,因此在检测有无暴露组件时,首先必须对AndroidManifest.xml文件进行分析,然后按照各个组件中对应的值进行判定。

(3)在检测有无权限泄露时,必须着重考虑公开暴露的组件。在(2)的基础上,需要对暴露的组件的权限泄漏进行检测。首先按照函数调用图(FCG)分析组件入口点和存在危险API的路径,采集这个组件相关的权限表;然后通过组件调用图(CCG),解析该组件调用其他组件的路径,收集该组件与其他组件相联系的权限表。

(4)当检测到暴露组件并且发现可疑的路径后,比对(1)所建立的特征库,以此来检测该组件有无权限泄露的问题。

6 结论

Android系统的开源特性深受大家喜爱,但也因为该特性使得越来越多的危险愈发严重,因此引发的组件间的漏洞数目和种类也层出不穷。通过漏洞检测技术可以检查出程序安全漏洞,防止造成用户的信息泄露。

摘要:Android系统上的应用程序主要是由各个组件组成的,而组件的公开使用又会造成组件的权限泄露。针对这种危险提出了一种静态检测方法。重点研究权限泄露的检测,运用静态代码的分析技术,建立API特征库,其次遍历AndroidManifest.xml文件中的组件声明设置,检测该组件的公开性,再跟踪公开组件的函数入口以及函数的调用流程,从而检测出权限泄露问题。

关键词:Android组件,权限泄露,API特征库

参考文献

[1]Mariantonietta La Polla,Febio Martinelli,Daniele Sgandurra.A Survey on Security for Mobile Devices[J].IEEE Communications Surveys&Tutorials,2013,15(1):446-471.

[2]Nwokedi Idika,Aditya P,Mathur.A Survey of Malware Detection Techniques[DB/OL].http://www.serc.net,2012,(11).

[3]William Enck,Machigar Ongtang,Patrick McDaniel.Understanding Android Security[J].IEEE Security and Privacy,2009,7(1):50-57.

[4]张文,严寒冰,文伟平.一种Android恶意程序检测工具的实现[J].信息网络安全,2013,(1):27-32.

[5]杨珉,王晓阳,张涛等.国内Android应用商城中程序隐私泄露分析[J].清华大学学报(自然科学版),2012,52(10):1420-1426.

【Android组件】推荐阅读:

Android框架05-30

Android教学07-28

Android技术07-31

Android手机08-13

组件系统05-21

组件材料06-21

软件组件06-25

组件测试08-15

电池组件08-20

光伏组件08-24

上一篇:新型农业体系下一篇:软地基建设