从零开始学Android应用安全测试(Part3)

操作方法

  • 01

    在本节中内容中,我们将看看如何对安卓应用程序中的组件进行攻击测试。阅读前两节 在此之前,你的理解安卓应用程序中的组件是何方神圣。安卓组件是构成安卓应用的基础,这些组件都可以在安卓manifest.xml文件中去配置。这里我们简单的介绍其中四种相对来说较为重要的组件。 组件描述 Activities控制用户UI,处理用户在智能手机屏幕上的交互 Services无须可视化界面,提供后台长时运行的功能 Broadcast Receivers处理安卓应用程序与安卓系统之间的通信 Content Providers处理数据与数据库之间的管理问题 Activities 一个Activity组件代表一个简单的用户界面。举例子说,Email应用可能有一个Activity组件用来显示新邮件列表,一个Activity组件用来写邮件,再有一个Activity组件用来读取邮件。一个Activity是一个界面,多个Activity表示多个界面。 一个Activity作为Activity class的子类执行,如下 public class MainActivity extends Activity { } Services Services是一个提供后台长时间运行的组件。比如当你在听音乐的时候你依旧可以正常使用其他应用,再或者你也能够打开网络连接上网,而不影响用户的交互行为。 一个Services作为Services Class的子类执行,如下 public class MyService extends Service { } Broadcast Receivers 广播只是回应来自系统或者其他应用的广播消息。比如,应用程序可以启动广播告知其他应用设备中已经存在的数据,以及可以使用的数据等等。 一个Broadcast Receivers作为Broadcast Receivers Class的子类执行,如下 public class MyReceiver extends BroadcastReceiver { } Content Providers Content Providers组件存储和取得数据,以及让它对所有应用程序可见。Android整理了一大堆content provider给公共数据类型(音频、视频、图像、联系人信息等等)。 一个Content Providers作为Content Providers Class的子类执行。必须使用一个标准的API,这样其他应用程序才能执行协议 public class MyContentProvider extends ContentProvider { } 附加组件 以下这些组件可能我们也会用到,这里暂且简单的介绍一下。 组件介绍 FragmentsFragment表现Activity中用户界面的一个行为或者是一部分。 Views是最基本的UI类,基本上所有的高级UI组件都是集成子View类的实现。 LayoutsLayout 是一个可横向和纵向排列布局的一个容器,布局组件。 IntentsIntent本身为一个数据载体,可以描述想要执行的操作以及用于这个操作的数据和其它属性 Resources外部元素,比如字符串,常量,图片等等。 Manifest应用配置文件 Android:exported 组件的中最重要的属性就是android:exported,以下文字来自于安卓官方文档 这个属性用于指示该服务是否能够被其他应用程序组件调用或跟它交互。如果设置为true,则能够被调用或交互,否则不能。设置为false时,只有同一个应用程序的组件或带有相同用户ID的应用程序才能启动或绑定该服务。 它的默认值依赖与该服务所包含的过滤器。没有过滤器则意味着该服务只能通过指定明确的类名来调用,这样就是说该服务只能在应用程序的内部使用(因为其他外部使用者不会知道该服务的类名),因此这种情况下,这个属性的默认值是false。另一方面,如果至少包含了一个过滤器,则意味着该服务可以给外部的其他应用提供服务,因此默认值是true。 这个属性不是限制把服务暴露给其他应用程序的唯一方法。还可以使用权限来限制能够跟该服务交互的外部实体。 因此,如果一个Activity属性为exported,那么他就可以调用外部应用程序。为了测试InsecureBank应用中的Activity,我们首先打开Genymotion模拟器中的InsecureBank应用并启动后端服务。 一旦我们启动这个应用,我们就可以看到这个登录界面。如果登录成功过后activity的属性为exported,我们就可以直接调用activity 接着我们来看看manifest文件,或许我们能够找到相关的activity。如下图所示,首先使用apktool解压应用 下面就是manifest文件的样子咯。正如你看到的,有一个名为.PostLogin的Activity组件属性为exported 我们可以在模拟器中使用activity manager工具直接调用这个activity,我们来看看吧 使用am tool启动一个activity,命令如下 adb shell am start -n com.package.name/com.package.name.ActivityName 在这个例子中,我们可以在manifest文件中看到这个包的名字为com.android.insecurebankv2 所以,我们使用如下所示命令来调用PostLogin activity 在这个应用中,你可以看到你已经成功绕过了登录页面 你也可以使用drozer调用Activity或者其他组件,下一节我们来介绍drozer。 这里有几个方法可以防止这类漏洞。 首先,除非真的有必要,请将android:exported 属性设置为FALSE 其次,如果应用需要调用特定的外部应用程序,你可以为activity组件增加自定义权限,仅仅允许应用程序请求权限调用activity组件。 在下一节开始之前,请大家预习一下安卓manifest文件,以及安卓应用程序中的不同组件。

(0)

相关推荐

  • 怎样从零开始学编程

    现在,随着计算机的普及,越来越多的朋友开始踏上自学编程之路.那么,作为一个初学者,学习编程要如何入门,在学习过程中又应该注意些什么呢? 一.选择编程语言 01 从零开始学编程,第一关就是要选择你所要学 ...

  • 从零开始学电脑一步一步成为电脑高手

    本文从电脑的硬件.软件等电脑的方方面面为电脑初学者讲解了电脑入门知识,包括电脑硬件的组成.软件.电脑上网安全和操作系统等,从零开始学电脑,让你一步一步成为电脑高手. 操作方法 01 硬件篇:电脑硬件的 ...

  • 从零开始学刷机之九:如何刷官方升级包

    从零开始学刷机之九:如何刷官方升级包. 步骤/方法 01 其实要刷新官方的升级包,并不需要你的机器具备root或者S-OFF,出厂的原版机器,只要是找到对应的官方升级包,都可以去升级. 前面也提到了, ...

  • 小白如何从零开始学装机?

    对于新手学装机,首先你得认识电脑有哪机部分组成,接口有哪几种,下面我们就来了解下. 操作方法 01 CPU 首先我们的认识CPU的针脚跟主板的区别,我们主要讲解目前稳定性比较好的的英特尔(Intel) ...

  • 如何从零开始学数据可视化图表制作?

    当我们面临的数据量呈现指数级增长,当我们对数据的运用越来越重视,数据可视化图表可以帮助我们更准确而高效.精简而全面的理解数据,从而获得更有价值的洞见和价值.那么这一技能要如何掌握呢? 操作方法 01 ...

  • 网络摄像机的安装与调试(网络摄像机入门教程从零开始学)

    本篇文章给你准备了网络摄像机入门指南,看完这篇文章,哪怕你是新手,也能对网络摄像机调试配置快速上手~一.接入网络有线方式无线方式二.设备激活及IP修改作用:增加安全性能操作:设置管理用户的管理密码激活 ...

  • 从零开始学刷机之十一:如何刷新radio

    通常,刷新radio可以帮助我们改善信号问题,无论是电话信号,还是wifi信号,如果你对目前手机的信号不满意,可以尝试通过刷新radio来解决!下面介绍的这种方法,仅适用于通过ENG S-OFF方式解 ...

  • 从零开始学电脑,一步一步成为电脑高手

    操作方法 01 电脑硬件的组成: (菜鸟篇) CPU:目前常见的CPU主要是由2个厂家生产,一个是AMD公司的,高端产品是速龙系列,低端是闪龙系列,另外就是INTER公司 ,高端产品是奔4系列,低端是 ...

  • android真机调试出现offline解决方法

    当你的android设备接入pc端进行程序调试的时候是否出现state offline呢?无法进行真机调试,原因就是android 4.2以上的版本过高,sdk的adb驱动不匹配,需要升级.我原本的a ...