移动智能终端安全课件:移动智能终端应用软件及面临的安全威胁_第1页
移动智能终端安全课件:移动智能终端应用软件及面临的安全威胁_第2页
移动智能终端安全课件:移动智能终端应用软件及面临的安全威胁_第3页
移动智能终端安全课件:移动智能终端应用软件及面临的安全威胁_第4页
移动智能终端安全课件:移动智能终端应用软件及面临的安全威胁_第5页
已阅读5页,还剩69页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

移动智能终端应用软件

及面临的安全威胁5.1应用软件体系结构5.2开发过程概述5.3应用软件权限的获取5.4面临的安全威胁小结

5.1应用软件体系结构

5.1.1Android应用软件的体系结构每个Android应用软件都是由若干个具有不同特点的组件组成的,组件之间相互依赖、相互补充、相互调用。这些组件是Android应用软件的基本构建单元。Android系统的组件有Activity、Service、BroadcastReceiver和ContentProvider四类。

1.

Activity组件

每个Activity组件对应一个UI界面,该界面是用来实现程序与用户进行交互的,由不同控件组成,例如列表(ListView)、文字(TextView)、图像(ImageView)、输入框(EditText)、多选框(CheckBox)、单选框(RadioButton)、按钮(Button)等。同一应用中的每个Activity之间是相互独立的。在Android应用程序的AndroidManifest.xml文件中有一个程序入口,该入口指定了用户在打开应用程序后加载的第一个界面。View是典型的具有层次化的结构,每个View对象控制窗口内的一个矩形空间,每个矩形空间及其子View对象都具备与用户交互的能力。视图关系继承图如图5-1所示。

图5-1视图关系继承图

MVC(ModelViewController)是模型、视图与控制器的缩写,它是框架模式,是一种软件设计的典范。它可以将业务逻辑、数据、界面显示分离开并进行代码组织编写,把业务逻辑放到一个部件里,当用户根据新的需求对程序UI进行修改时,可以直接使用原有逻辑模块,减少了开发和维护难度。

Android系统中的界面部分采用了MVC模式,具体表现如下:

(1)

M(Model):应用软件的主体部分,即业务逻辑层。

(2)

V(View):应用软件中的用户界面部分,与用户进行交互,接收用户输入的信息,显示处理后的结果。

(3)

C(Controller):应用软件中Activity的各种事件处理代码,用于读取并控制视图层中用户输入的数据,并将处理后的结果返回到视图层,也可向逻辑业务层发送数据请求,如网络请求等,起到了中间桥梁的作用。

2.

Service组件

每个服务都继承自Service基类,能够长时间运行在后台,运行时间可以从应用软件启动到关闭。Service不具备自启动能力,需要使用Context(上下文对象)调用bindService()或startService()方法启动。Service服务没有可视化的用户界面,Service可以在主线程运行且可在不阻止Activity用户界面的情况下使用。

3.

BroadcastReceiver组件

BroadcastReceiver即广播接收器,它没有界面显示,只负责监听、过滤接收及相应广播通知。在Android系统中,广播体现在开机、网络状态改变、电池电量不足等情况下。普通应用程序可以通过广播接收器来响应某一事件的广播,可以启动Activity、Service或使用NotificationManager(通知管理器)创建状态栏通知来提示用户。Android提供的广播机制可以让程序开发变得更简单方便,某些需要程序开发者执行的复杂逻辑,可以通过广播的通知功能来实现,提高了应用软件的稳定性。

4. ContentProvider组件

ContentProvider即内容提供者,又称为数据包装器,主要用于在不同的进程之间实现信息共享。例如Android中的SQLite数据库就是数据源,开发者将该数据源封装到ContentProvider中,就可以为其他应用提供信息共享服务。其他应用软件在访问ContentProvider时,可以使用系统提供的一组URI操作数据,使信息的读写得到简化。

5.1.2

iOS应用软件的体系结构

iOS应用软件的开发语言为ObjectiveC,是一种类C、C++的开发语言,语法和C语言类似,使用和C++相同概念的面向对象的编程方法,并在其基础上添加了“类别”“协议”等新概念,iOS应用软件的开发工具为XCode。从开发者的角度来看,iOS应用软件体系结构如下:

1.页面详细设计

在iOS应用软件开发中,页面被称为view,用户看到的是一个个“页面”或“窗口”,这些都是一个个的view展现出来的。

2.页面相关类的设计

若要页面(view)中的控件发挥作用,就需要为页面写相关的类。大多数情况下,页面中有多少控件,就在类中定义多少个相关的属性,类型要统一且一定要加前缀“IBOutlet”。如果该控件需要实现一些功能,比如点击该控件后有下一个动作或响应一个事件,就要在类中加入相关的方法,该方法必须要加前缀“IBAction”。

3.关联页面控件与类中属性、方法

要让页面中的控件与类的属性或方法能够关联在一起(即控件的动作可以触发类中的属性或方法),就需要打开XCode的“storyboard”面板,打开左侧的类列表。在类列表中找到保存好的类的具体方法是:选中页面“view”,打开右侧的“customclass”窗口,在class列表中,选择相关类,就可以将类与页面关联。

4.

iOS应用数据库编程

iOS系统中常用的数据库管理系统是SQLite。SQLite的简单设计是通过在开始一个事务的时候锁定整个数据文件而完成的。开发者可以通过下载SQLite源数据包,并编写SQLite数据库的操作类,来实现对数据库的操作,并将数据存储在移动设备中。

5.

iOS应用网络编程

应用软件通常需要连接服务器,上传或下载一些数据或更新程序。iOS应用软件开发中的网络部分常用到HTTP协议与服务器互连,在服务器端做一个服务端程序,可实现通过URL连接到服务器且可提交数据给服务器端页面,或通过访问服务器端页面返回数据,数据可规范化为json格式。通常服务器端程序可用php、asp、jsp网络程序来实现。

5.2开发过程概述

无论是Android应用软件开发还是iOS应用软件开发,开发的过程都可分为以下几个步骤:

1.需求整理分析项目是为了解决用户或行业的需求。

2.预算评估通过对需求文档进行分析,较精确地估算出项目需要投入的预算。

3.原型设计

根据具体需求文档,设计原型图,包括功能的结构性布局、各分页面的设计、页面间业务逻辑的设计,最终输出每个足够示意出页面所包含功能的原型设计图。

4.

UI设计

(1)

AppUI:原型图设计完成后,进行与UI界面相关的配色设计、功能具象化处理、交互设计,以及各种机型、系统的适配。

(2)后台UI:大部分App项目有相应的管理后台,合理的后台UI设计可以让后台管理人员快速上手。

5.开发

(1)服务器端:编写接口协议文档,架设服务器环境,设计数据库,编写API接口等。

(2)

App端:根据UI设计图进行界面开发,UI完成后和服务器端接口对接,通过服务器端的接口获取数据,编写功能上的逻辑代码。

(3)

Web管理端:根据前端的业务逻辑,后台会有相应的功能与之匹配,需要编写功能上的逻辑代码。

6.测试调试

测试人员对整个项目进行系统性测试,在测试调试过程中,最重要的是问题的管理、追踪各个bug的进度以及状态等。

7.发布到应用市场

应用软件测试调试结束后,可发布到应用市场上架,其中有:

(1)

Android:主流市场是应用宝、360手机助手和小米商城等应用市场。

(2)

iOS:AppStore。

8.运营迭代

产品正式投放到市场之后,得到用户和市场的反馈,从而能够修正和调整运营策略。当目前系统的功能无法满足项目需求时,则需要规划下一版本功能的迭代问题。

9.日常维护

当应用软件中出现问题的时候,就需要技术人员对问题作出及时的修复。

5.2.1

Android应用软件开发过程

本小节以一个简单的Android应用软件为例,讲解应用软件的开发过程,该AndroidApp会显示学生们的姓名信息,效果如图5-2所示。

图5-2

App效果图

1.建立开发环境

在计算机中配置集成开发环境(IDE),IDE是用来开发和部署软件的工具的集合。接着配置Java开发环境,Android使用Java语言开发App,因此要在计算机上配置Java的开发环境。最后安装AndroidStudio,AndroidStudio是Google指定的集成开发环境,其中包含基于AndroidIDE的AndroidSDK工具和Android模拟器。

2.创建项目

启动AndroidStudio。在AndroidStudio中创建新的开发项目并设置项目名称、存储位置、未来部署平台等信息,如图5-3及图5-4所示。

图5-3设置项目的名称、存储位置等信息图5-4设置项目未来部署平台

向项目中增加空白的Activity,如图5-5所示。

图5-5增加一个空白Activity

设置Activity的属性,如图5-6所示。

点击【Finish】,创建项目完毕。

图5-6设置Activity的属性

3.项目结构

现在已经创建了一个基本的Android应用,其中包含了AndroidStudio帮助我们生成的文件,在默认的Android视图中,文件结构如图5-7所示。

图5-7

Android文件结构图

该布局简单地在屏幕上显示了一条消息——Helloworld!其他几个重要的文件如下:

(1) AndroidManifest文件用来描述Android应用的基本信息,并定义了应用中的各个组件(Activity是一种组件)。

(2)

app/src/main/res目录下包含了应用所需要的资源文件:

①drawable<density>/:图片资源文件。

②layout/:用户界面布局描述文件。

③menu/:应用的菜单布局。

values/:常量值,例如字符串、颜色数值等。

4.运行应用

在AndroidStudio菜单中打开“Tools”→“Android”→“AVDManager”,选择“CreateVirtualDevice”创建模拟器,创建完成后,模拟器列表如图5-8所示。

图5-8模拟器列表

在手机上运行应用需要进行如下设置:

①将手机通过USB线缆连接到开发机,如果在Windows上开发,需要选择合适的USB驱动;

②在手机系统中打开USB调试选项;

③在AndroidStudio中运行应用时,方法和在模拟器中相同,区别是在“ChooseDevice”窗口中选择需要USB连接的手机。

5.展示列表

打开“activity_main.xml”布局文件,在Design视图下,将“HelloWorld!”标签删掉。我们准备在这个屏幕中显示学生的列表,而一个列表就是一个ViewGroup,内部包含了其他视图。在显示手机屏幕的预览区的左侧可以看到大量视图组件,视图组件是用来构建App外形的基本元素。选中“ListView”,将其拖入预览区内,前后拖动使其布满屏幕,也可以切换到Text视图来编辑XML,XML进行修改之后,切回Design视图即可看到效果。

最终activity_main.xml中的内容如下:

6.简化的学生列表

简化的学生列表有学生们的名字。

首先创建一个Student类。选中java目录下的a314lab.innovationcourse包,创建一个新的类,输入类名为“Student”,并给Student类增加获取所有学生姓名的方法,方法如下:

7.设置Adapter

用来将数据传递给ListView的适配器是ArrayAdapter,此处传入的是字符串的数组,因此创建ArrayAdapter<String>类。

观察到一个简单的学生列表,运行效果如图5-9所示。至此,一个简单的AndroidApp开发完成。

图5-9运行结果

5.2.2

iOS应用软件开发过程

本节将以一个简单的iOS应用软件为例,讲解应用软件的开发过程。在开发过程中,我们将熟悉iOSIDE集成环境,创建一个项目,整理项目结构,增加“HelloWorld!”文本标签,设置应用方向以及了解隐藏状态栏的方法。

1.熟悉iOSIDE集成环境

XCode集成环境如图5-10所示。

图5-10XCode集成环境

2.创建一个项目

(1)打开XCode,选择“File”→“NewProject”,再选择“iOS”→“Application”→“SingleViewApplication”,接着点击【Next】。除“OpenGLGame”模板外,其他模板的程序都非常简单。在本项目中,将选择“SingleViewApplication”模板作为示例模板。

(2)在弹出的页面中,在ProductName项输入“HelloWorld”(即项目名),如图5-11所示。

图5-11项目设置

其他设置项介绍如下:

①CompanyIdentifier:公司标识,此处输入唯一标识即可,也可以在项目中统一进行修改。

②ClassPrefix:默认类前缀。为了避免与其他类混淆,默认使用全大写字母,也可以保留为空,本示例使用JOY作为类的前缀名称。

③DeviceFamily:设备类型,可以选择iPhone、iPad或Universal。

另外,在XCode4.X新增的特性中,Storyboard可以让程序的UI设计更加简化。ARC也是XCode4.X新增的特性,对于之前的版本,iOS程序员每alloc(产生)一个对象,都需要进行release(释放),有了ARC,就不再每次都需要release。

(3)点击【Next】,在弹出窗口中,选择文件夹,保存项目,再点击【Create】(创建)按钮。至此,第一个项目创建完成。最后点击【Run】(运行)按钮,效果如图5-12所示。

图5-12运行效果

3.整理项目结构

观察导航区域,在“HelloWorld”上点击右键,在弹出的菜单中选择“NewGroup”。将新建的组重命名为“GUI”,将“HelloWorld”文件夹中的文件拖到“GUI”中。

4.增加“HelloWorld!”文本标签

增加一个文本标签,显示“HelloWorld!”的具体方法是:在导航区域点击并打开MainStoryBoard.storyboard文件,该StoryBoard为空白,意味着目前没有任何控件(如图5-13所示);在右下方的对象区域找到Label控件,并将其拖放到默认的空白View上,再双击该Label控件,当Label控件中的文字高亮选中时,输入“HelloWorld!”,然后重新调整Label的位置,使其保持在屏幕中央,最后点击【运行】按钮,查看运行效果。

图5-13添加文本标签图

5.设置应用方向

大多数移动设备支持屏幕旋转功能,很多应用软件在用户旋转设备时都会根据用户的当前方向重新布局应用软件界面。在模拟器中,可以通过“command”+ 左右键旋转模拟器方向,达到模拟用户在使用过程中旋转设备的效果。尝试模拟设备,结果如图5-14所示。

图5-14旋转失败图

由此可以看出,“HelloWorld!”标签不在屏幕中央,要想让“HelloWorld!”标签在旋转状态下依旧保持在屏幕中央,步骤如下:在导航区域点击并打开MainStoryboard.storyboard文件,在“HelloWorld!”标签上点击选中该控件;点击工具区的“ShowtheAttributesinspector(显示属性检查器)”,将标签的Alignment属性设置为“居中”;点击工具区的“ShowtheSizeinspector(显示尺寸检查器)”,将标签的Autosizing属性按照图5-15所示设置即可。

图5-15设置Autosizing属性

6.隐藏状态栏的方法

在导航区域点击并打开HelloWorld-Info.plist文件。在编辑区域的空白处点击鼠标右键,在弹出菜单中选择“AddRow”(添加行),在“Key”栏中使用下拉列表找到“Statusbarisinitiallyhidden”(隐藏状态栏),并将其属性设置为“YES”。

5.3应用软件权限的获取

5.3.1Android应用软件权限的获取

Android中App的一般权限在配置文件中进行配置,在App安装时提出申请,用户选择同意或拒绝。Android中App系统权限的获取有两种方式:

1.方法一

(1)在应用程序AndroidManifest.xml文件中的manifest节点中加入android:sharedUserId=“android.uid.system”属性。该属性可以将App提升到系统权限,需要到源码中编译,然后在属性之后添加需要的权限。

(2)编译apk。将应用程序的src文件、res文件和AndroidManifest.xml文件拷贝到Android系统源码package/apps目录下。编写Android.mk文件或拷贝其他模块中的Android.mk文件,修改Android.mk文件,添加“LOCAL_CERTIFICATE:=platform”语句即可。

2.方法二

(1)在应用程序AndroidManifest.xml文件中的manifest节点中加入android:sharedUserId=“android.uid.system”属性,该属性可以将App提升到系统权限,需要到源码中编译,并在属性之后添加需要的权限。

(2)使用eclipse编译出apk文件。

(3)使用压缩软件将apk文件打开,删掉METAINF目录下的“CERT.SF”和“CERT.RSA”文件。

(4)使用目标系统的platform密钥重新对apk文件签名。

① 找到密钥文件,即build/target/product/security路径下的platform.pk8和platform.x509.pem文件。

②使用Android提供的Signapk工具,即signapk.jar来签名。Signpk的源代码在build/tools/signapk下。

③进入build/tools/signapk目录下,在该目录下执行以下指令:

javacSignapk.java

5.3.2

iOS应用软件权限的获取

iOS中的权限分为联网权限、相册权限、相机和麦克风权限、定位权限、推送权限、通信录权限及日历、备忘录权限等。下面以联网权限、相册权限、相机和麦克风权限为例,介绍iOS应用软件如何获取相应的权限。

1.联网权限

导入头文件“@importCoreTelephony;”,应用启动后,检测应用中是否有联网权限,代码如下:

使用时需要注意的关键点是:

①CTCellularData只能检测蜂窝权限,不能检测WiFi权限;② 一个CTCellularData实例新建时,restrictedState是kCTCellularDataRestricted-StateUnknown,之后在cellularDataRestrictionDidUpdateNotifier里会有一次回调,此时才能获取到正确的权限状态;

③当用户在设置里更改了App的权限时,cellularDataRestrictionDidUpdateNotifier会收到回调,如果要停止监听,必须将cellularDataRestrictionDidUpdate

Notifier设置为“nil”;

赋值给cellularDataRestrictionDidUpdateNotifier的block并不会自动释放,即便将一个局部变量的CTCellularData实例设置监听,当权限更改时,仍会收到回调,所以记得将block置“nil”。

当应用软件被设置为不联网,而使用应用软件时,系统会自动弹出“XXXX(此为应用软件名称)已被关闭网络”的对话框,点击【去设置】按钮,就自动跳转到设置中心进行设置。

2.相册权限

1)

iOS9.0版本之前

导入头文件“@importAssetsLibrary;”,检查是否有相册权限。

2) iOS9.0版本之后

导入头文件“@importPhotos;”,检查是否有相册权限。

3.相机和麦克风权限

导入头文件“@importAVFoundation;”,检查是否有相机或麦克风权限。

5.4面临的安全威胁

5.4.1组件通信过程中的信息泄露

Android系统迅速发展的同时也暴露了很多安全问题,应用组件间利用Intent进行组件调用及数据传递的Intent通信过程中存在的缺陷日益受到关注。例如,Android手机利用电话漏洞和暴露组件进行权限提升,从而在未声明任何权限的情况下可拨打电话;短信重发漏洞利用广播接收器组件泄露和广播伪造漏洞,通过伪造草稿箱短信实现无权限发送任意短信的攻击等。

Android应用软件通过显示或隐式的方式来构造Intent,并将该对象作为参数传递给请求组件,以实现对目标组件的请求。显示Intent实现对内部组件的请求,隐式Intent实现对外部组件的请求。利用Intent通信的过程如图5-16所示。

从图5-16中可以看到,隐式Intent请求的接收者具有一定的随机性,这会带来风险。如果应用C的组件3是伪装的并被调用,则会发生组件劫持。系统会将Intent对象携带的数据传递给被调用者,可能导致数据泄露。恶意应用发送含有异常代码的Intent请求可能会使正常工作的组件停止工作,导致拒绝服务攻击的发生。这些存在的风险称为Intent-based安全缺陷,主要包括:

(1)组件劫持:通过劫持Intent实现对组件的攻击,即伪装成正常的Intent,请求启动正常组件或者监听正常的Intent,请求启动恶意组件,实现Activity钓鱼攻击、Broadcast停止广播等恶意行为。

(2)数据泄露:通过对Intent通信携带数据或者通过Intent启动组件进行数据窃取,导致应用的关键数据或设备上存储的敏感数据泄露。

(3)权限泄露:应用本身没有访问某种敏感数据的权限,通过Intent启动具有该资源访问权限的组件,返回消息获取数据或者利用相关API执行操作来达到目的,即通过权限升级实现权限泄露。

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论