什么是安卓应用组件?

应用组件是组成安卓应用的关键部分。每个应用都是由一个或者多个组件组成,并且每个都是单独调用。这里主要分为4个主要的组件,介绍如下:

Activity: 是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务(例如打电话,发短信等)

Service(服务): 在后台提供持续性服务,并不需要一个用户界面

Content Providers(内容提供者): 以表格的形式把数据展现给外部的应用。换句话来说Content Providers可以被认为是连接两个处理器的之间的接口。

Broadcast Receivers(广播接收器): 广播接收器是一个接受系统级广播的组件,(例如电量低,重启,耳机插入等)尽管大部分广播都是由系统发出,应用本身也可以发起广播。

背景知识:

####################

相关代码下载(http://yunpan.cn/cfs8zHiW8rf5g  提取码:20c3)

如下图展示,这个应用有两个Activity。第一个Activity接受一个密码输入,如果用户输入了正确的密码他就能够进入“私有区域”,否则他会收到一个密码错误的警告。本文中使用的密码为”password”。我们这里使用黑盒测试的方法来尝试突破密码保护。

安卓-1-应用组件攻防-JE2Se ' Blog
安卓-1-应用组件攻防-JE2Se ' Blog

准备工作:

安装安卓SDK

一个没有root的安卓手机

信息收集:

1.使用APK tool反编译应用

2.分析AndroidManifest.xml文件中的Activity组件

每一个安卓应用都有一个包名称,每一个Activity都有对应的类名称。第一步就是找到包的名称和敏感的类名称。尽管有其他的方法获得这些信息,AndroidManifest.xml是好方法之一。我们可以通过反编译应用来获得这个文件。

1.下载APKTOOL (https://code.google.com/p/android-apktool/downloads/list)

2.把程序放置在跟APKTOOL同级目录中

3.使用以下命令来反编译apk文件:

apktool d testapp.apk

安卓-1-应用组件攻防-JE2Se ' Blog

反编译完毕,我们可以看到一个”testapp”目录,其中有一个AndroidManifest.xml文件

安卓-1-应用组件攻防-JE2Se ' Blog

现在我们需要搜索包名称和Activity组件

所有的Activity都会显示在<activity></activity>标签当中,因此在这些标签中的内容就是一个Activity。查看这个AndroidManifest.xml文件,我们可以找到两个Activity组件:

安卓-1-应用组件攻防-JE2Se ' Blog

通过分析AndroidManifest.xml,我们获得了以下信息。

com.isi.testapp 是包的名称

com.isi.testapp.Welcome 是正确登录后的界面

攻击脆弱的Activity组件:

我们的目标是:绕过密码进入登录后的界面

未实现目标,现在有几个途径:

1.使用Activity Manager启动敏感的Activity

2.使用一个恶意的应用调用其他应用的Activity

3.使用Mercury框架来发动这种攻击,此框架会在之后的文章中使用

使用Activity Manager启动敏感的Activity

Activity Manager是一个安卓SDK中附带的工具,这个工具可以被用来调用应用的Activity或者服务。我们也可以使用它来绕过。

1.把设备连接到电脑上,使用”adb shell”获得一个shell

2.使用” am start –n com.isi.testapp/.Welcome”来启动Welcome Activity

我们现在就可以看到Welcome Activity而不需要密码。

使用一个恶意的应用调用其他应用的Activity

另一个调用其他应用的Activity的方法是写一个恶意的应用,让它通过包名称和Activity名称来调用。下图展示了程序部分代码。在我们这个案例中,恶意程序不需要申请额外权限来调用Welcome Activity。

安卓-1-应用组件攻防-JE2Se ' Blog

使用Mercury框架

这中攻击也可以使用Mercury框架来实现,我们在之后的课程中还会再介绍。

保护应用程序组件

1.设置android:exported属性为false

在AndroidManifest.xml文件中,我们应该设置下面的属性来保护应用。在我们的案例中com.isi.testapp.Welcome是我们要保护的Activity

安卓-1-应用组件攻防-JE2Se ' Blog

上面的代码限制了其他应用或者系统组件调用这个Activity。只有拥有和这个应用相同的user id才能够访问这个Activity。

2.通过权限控制限制访问

android:exported属性不是唯一的限制措施。我们还可以通过基于权限的方法来定制一个Activity的权限。这个可以限制应用之间的访问权限。

注意:以上讨论的安全措施适用于安卓的其他应用组件。

参考:

http://developer.android.com/guide/components/index.html

原文地址:

http://resources.infosecinstitute.com/android-hacking-security-part-1-exploiting-securing-application-components/