移動(dòng)智能終端安全課件:移動(dòng)智能終端應(yīng)用軟件及面臨的安全威脅_第1頁(yè)
移動(dòng)智能終端安全課件:移動(dòng)智能終端應(yīng)用軟件及面臨的安全威脅_第2頁(yè)
移動(dòng)智能終端安全課件:移動(dòng)智能終端應(yīng)用軟件及面臨的安全威脅_第3頁(yè)
移動(dòng)智能終端安全課件:移動(dòng)智能終端應(yīng)用軟件及面臨的安全威脅_第4頁(yè)
移動(dòng)智能終端安全課件:移動(dòng)智能終端應(yīng)用軟件及面臨的安全威脅_第5頁(yè)
已閱讀5頁(yè),還剩69頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

移動(dòng)智能終端應(yīng)用軟件

及面臨的安全威脅5.1應(yīng)用軟件體系結(jié)構(gòu)5.2開發(fā)過(guò)程概述5.3應(yīng)用軟件權(quán)限的獲取5.4面臨的安全威脅小結(jié)

5.1應(yīng)用軟件體系結(jié)構(gòu)

5.1.1Android應(yīng)用軟件的體系結(jié)構(gòu)每個(gè)Android應(yīng)用軟件都是由若干個(gè)具有不同特點(diǎn)的組件組成的,組件之間相互依賴、相互補(bǔ)充、相互調(diào)用。這些組件是Android應(yīng)用軟件的基本構(gòu)建單元。Android系統(tǒng)的組件有Activity、Service、BroadcastReceiver和ContentProvider四類。

1.

Activity組件

每個(gè)Activity組件對(duì)應(yīng)一個(gè)UI界面,該界面是用來(lái)實(shí)現(xiàn)程序與用戶進(jìn)行交互的,由不同控件組成,例如列表(ListView)、文字(TextView)、圖像(ImageView)、輸入框(EditText)、多選框(CheckBox)、單選框(RadioButton)、按鈕(Button)等。同一應(yīng)用中的每個(gè)Activity之間是相互獨(dú)立的。在Android應(yīng)用程序的AndroidManifest.xml文件中有一個(gè)程序入口,該入口指定了用戶在打開應(yīng)用程序后加載的第一個(gè)界面。View是典型的具有層次化的結(jié)構(gòu),每個(gè)View對(duì)象控制窗口內(nèi)的一個(gè)矩形空間,每個(gè)矩形空間及其子View對(duì)象都具備與用戶交互的能力。視圖關(guān)系繼承圖如圖5-1所示。

圖5-1視圖關(guān)系繼承圖

MVC(ModelViewController)是模型、視圖與控制器的縮寫,它是框架模式,是一種軟件設(shè)計(jì)的典范。它可以將業(yè)務(wù)邏輯、數(shù)據(jù)、界面顯示分離開并進(jìn)行代碼組織編寫,把業(yè)務(wù)邏輯放到一個(gè)部件里,當(dāng)用戶根據(jù)新的需求對(duì)程序UI進(jìn)行修改時(shí),可以直接使用原有邏輯模塊,減少了開發(fā)和維護(hù)難度。

Android系統(tǒng)中的界面部分采用了MVC模式,具體表現(xiàn)如下:

(1)

M(Model):應(yīng)用軟件的主體部分,即業(yè)務(wù)邏輯層。

(2)

V(View):應(yīng)用軟件中的用戶界面部分,與用戶進(jìn)行交互,接收用戶輸入的信息,顯示處理后的結(jié)果。

(3)

C(Controller):應(yīng)用軟件中Activity的各種事件處理代碼,用于讀取并控制視圖層中用戶輸入的數(shù)據(jù),并將處理后的結(jié)果返回到視圖層,也可向邏輯業(yè)務(wù)層發(fā)送數(shù)據(jù)請(qǐng)求,如網(wǎng)絡(luò)請(qǐng)求等,起到了中間橋梁的作用。

2.

Service組件

每個(gè)服務(wù)都繼承自Service基類,能夠長(zhǎng)時(shí)間運(yùn)行在后臺(tái),運(yùn)行時(shí)間可以從應(yīng)用軟件啟動(dòng)到關(guān)閉。Service不具備自啟動(dòng)能力,需要使用Context(上下文對(duì)象)調(diào)用bindService()或startService()方法啟動(dòng)。Service服務(wù)沒(méi)有可視化的用戶界面,Service可以在主線程運(yùn)行且可在不阻止Activity用戶界面的情況下使用。

3.

BroadcastReceiver組件

BroadcastReceiver即廣播接收器,它沒(méi)有界面顯示,只負(fù)責(zé)監(jiān)聽、過(guò)濾接收及相應(yīng)廣播通知。在Android系統(tǒng)中,廣播體現(xiàn)在開機(jī)、網(wǎng)絡(luò)狀態(tài)改變、電池電量不足等情況下。普通應(yīng)用程序可以通過(guò)廣播接收器來(lái)響應(yīng)某一事件的廣播,可以啟動(dòng)Activity、Service或使用NotificationManager(通知管理器)創(chuàng)建狀態(tài)欄通知來(lái)提示用戶。Android提供的廣播機(jī)制可以讓程序開發(fā)變得更簡(jiǎn)單方便,某些需要程序開發(fā)者執(zhí)行的復(fù)雜邏輯,可以通過(guò)廣播的通知功能來(lái)實(shí)現(xiàn),提高了應(yīng)用軟件的穩(wěn)定性。

4.?ContentProvider組件

ContentProvider即內(nèi)容提供者,又稱為數(shù)據(jù)包裝器,主要用于在不同的進(jìn)程之間實(shí)現(xiàn)信息共享。例如Android中的SQLite數(shù)據(jù)庫(kù)就是數(shù)據(jù)源,開發(fā)者將該數(shù)據(jù)源封裝到ContentProvider中,就可以為其他應(yīng)用提供信息共享服務(wù)。其他應(yīng)用軟件在訪問(wèn)ContentProvider時(shí),可以使用系統(tǒng)提供的一組URI操作數(shù)據(jù),使信息的讀寫得到簡(jiǎn)化。

5.1.2

iOS應(yīng)用軟件的體系結(jié)構(gòu)

iOS應(yīng)用軟件的開發(fā)語(yǔ)言為ObjectiveC,是一種類C、C++的開發(fā)語(yǔ)言,語(yǔ)法和C語(yǔ)言類似,使用和C++相同概念的面向?qū)ο蟮木幊谭椒ǎ⒃谄浠A(chǔ)上添加了“類別”“協(xié)議”等新概念,iOS應(yīng)用軟件的開發(fā)工具為XCode。從開發(fā)者的角度來(lái)看,iOS應(yīng)用軟件體系結(jié)構(gòu)如下:

1.頁(yè)面詳細(xì)設(shè)計(jì)

在iOS應(yīng)用軟件開發(fā)中,頁(yè)面被稱為view,用戶看到的是一個(gè)個(gè)“頁(yè)面”或“窗口”,這些都是一個(gè)個(gè)的view展現(xiàn)出來(lái)的。

2.頁(yè)面相關(guān)類的設(shè)計(jì)

若要頁(yè)面(view)中的控件發(fā)揮作用,就需要為頁(yè)面寫相關(guān)的類。大多數(shù)情況下,頁(yè)面中有多少控件,就在類中定義多少個(gè)相關(guān)的屬性,類型要統(tǒng)一且一定要加前綴“IBOutlet”。如果該控件需要實(shí)現(xiàn)一些功能,比如點(diǎn)擊該控件后有下一個(gè)動(dòng)作或響應(yīng)一個(gè)事件,就要在類中加入相關(guān)的方法,該方法必須要加前綴“IBAction”。

3.關(guān)聯(lián)頁(yè)面控件與類中屬性、方法

要讓頁(yè)面中的控件與類的屬性或方法能夠關(guān)聯(lián)在一起(即控件的動(dòng)作可以觸發(fā)類中的屬性或方法),就需要打開XCode的“storyboard”面板,打開左側(cè)的類列表。在類列表中找到保存好的類的具體方法是:選中頁(yè)面“view”,打開右側(cè)的“customclass”窗口,在class列表中,選擇相關(guān)類,就可以將類與頁(yè)面關(guān)聯(lián)。

4.

iOS應(yīng)用數(shù)據(jù)庫(kù)編程

iOS系統(tǒng)中常用的數(shù)據(jù)庫(kù)管理系統(tǒng)是SQLite。SQLite的簡(jiǎn)單設(shè)計(jì)是通過(guò)在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。開發(fā)者可以通過(guò)下載SQLite源數(shù)據(jù)包,并編寫SQLite數(shù)據(jù)庫(kù)的操作類,來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的操作,并將數(shù)據(jù)存儲(chǔ)在移動(dòng)設(shè)備中。

5.

iOS應(yīng)用網(wǎng)絡(luò)編程

應(yīng)用軟件通常需要連接服務(wù)器,上傳或下載一些數(shù)據(jù)或更新程序。iOS應(yīng)用軟件開發(fā)中的網(wǎng)絡(luò)部分常用到HTTP協(xié)議與服務(wù)器互連,在服務(wù)器端做一個(gè)服務(wù)端程序,可實(shí)現(xiàn)通過(guò)URL連接到服務(wù)器且可提交數(shù)據(jù)給服務(wù)器端頁(yè)面,或通過(guò)訪問(wèn)服務(wù)器端頁(yè)面返回?cái)?shù)據(jù),數(shù)據(jù)可規(guī)范化為json格式。通常服務(wù)器端程序可用php、asp、jsp網(wǎng)絡(luò)程序來(lái)實(shí)現(xiàn)。

5.2開發(fā)過(guò)程概述

無(wú)論是Android應(yīng)用軟件開發(fā)還是iOS應(yīng)用軟件開發(fā),開發(fā)的過(guò)程都可分為以下幾個(gè)步驟:

1.需求整理分析項(xiàng)目是為了解決用戶或行業(yè)的需求。

2.預(yù)算評(píng)估通過(guò)對(duì)需求文檔進(jìn)行分析,較精確地估算出項(xiàng)目需要投入的預(yù)算。

3.原型設(shè)計(jì)

根據(jù)具體需求文檔,設(shè)計(jì)原型圖,包括功能的結(jié)構(gòu)性布局、各分頁(yè)面的設(shè)計(jì)、頁(yè)面間業(yè)務(wù)邏輯的設(shè)計(jì),最終輸出每個(gè)足夠示意出頁(yè)面所包含功能的原型設(shè)計(jì)圖。

4.

UI設(shè)計(jì)

(1)

AppUI:原型圖設(shè)計(jì)完成后,進(jìn)行與UI界面相關(guān)的配色設(shè)計(jì)、功能具象化處理、交互設(shè)計(jì),以及各種機(jī)型、系統(tǒng)的適配。

(2)后臺(tái)UI:大部分App項(xiàng)目有相應(yīng)的管理后臺(tái),合理的后臺(tái)UI設(shè)計(jì)可以讓后臺(tái)管理人員快速上手。

5.開發(fā)

(1)服務(wù)器端:編寫接口協(xié)議文檔,架設(shè)服務(wù)器環(huán)境,設(shè)計(jì)數(shù)據(jù)庫(kù),編寫API接口等。

(2)

App端:根據(jù)UI設(shè)計(jì)圖進(jìn)行界面開發(fā),UI完成后和服務(wù)器端接口對(duì)接,通過(guò)服務(wù)器端的接口獲取數(shù)據(jù),編寫功能上的邏輯代碼。

(3)

Web管理端:根據(jù)前端的業(yè)務(wù)邏輯,后臺(tái)會(huì)有相應(yīng)的功能與之匹配,需要編寫功能上的邏輯代碼。

6.測(cè)試調(diào)試

測(cè)試人員對(duì)整個(gè)項(xiàng)目進(jìn)行系統(tǒng)性測(cè)試,在測(cè)試調(diào)試過(guò)程中,最重要的是問(wèn)題的管理、追蹤各個(gè)bug的進(jìn)度以及狀態(tài)等。

7.發(fā)布到應(yīng)用市場(chǎng)

應(yīng)用軟件測(cè)試調(diào)試結(jié)束后,可發(fā)布到應(yīng)用市場(chǎng)上架,其中有:

(1)

Android:主流市場(chǎng)是應(yīng)用寶、360手機(jī)助手和小米商城等應(yīng)用市場(chǎng)。

(2)

iOS:AppStore。

8.運(yùn)營(yíng)迭代

產(chǎn)品正式投放到市場(chǎng)之后,得到用戶和市場(chǎng)的反饋,從而能夠修正和調(diào)整運(yùn)營(yíng)策略。當(dāng)目前系統(tǒng)的功能無(wú)法滿足項(xiàng)目需求時(shí),則需要規(guī)劃下一版本功能的迭代問(wèn)題。

9.日常維護(hù)

當(dāng)應(yīng)用軟件中出現(xiàn)問(wèn)題的時(shí)候,就需要技術(shù)人員對(duì)問(wèn)題作出及時(shí)的修復(fù)。

5.2.1

Android應(yīng)用軟件開發(fā)過(guò)程

本小節(jié)以一個(gè)簡(jiǎn)單的Android應(yīng)用軟件為例,講解應(yīng)用軟件的開發(fā)過(guò)程,該AndroidApp會(huì)顯示學(xué)生們的姓名信息,效果如圖5-2所示。

圖5-2

App效果圖

1.建立開發(fā)環(huán)境

在計(jì)算機(jī)中配置集成開發(fā)環(huán)境(IDE),IDE是用來(lái)開發(fā)和部署軟件的工具的集合。接著配置Java開發(fā)環(huán)境,Android使用Java語(yǔ)言開發(fā)App,因此要在計(jì)算機(jī)上配置Java的開發(fā)環(huán)境。最后安裝AndroidStudio,AndroidStudio是Google指定的集成開發(fā)環(huán)境,其中包含基于AndroidIDE的AndroidSDK工具和Android模擬器。

2.創(chuàng)建項(xiàng)目

啟動(dòng)AndroidStudio。在AndroidStudio中創(chuàng)建新的開發(fā)項(xiàng)目并設(shè)置項(xiàng)目名稱、存儲(chǔ)位置、未來(lái)部署平臺(tái)等信息,如圖5-3及圖5-4所示。

圖5-3設(shè)置項(xiàng)目的名稱、存儲(chǔ)位置等信息圖5-4設(shè)置項(xiàng)目未來(lái)部署平臺(tái)

向項(xiàng)目中增加空白的Activity,如圖5-5所示。

圖5-5增加一個(gè)空白Activity

設(shè)置Activity的屬性,如圖5-6所示。

點(diǎn)擊【Finish】,創(chuàng)建項(xiàng)目完畢。

圖5-6設(shè)置Activity的屬性

3.項(xiàng)目結(jié)構(gòu)

現(xiàn)在已經(jīng)創(chuàng)建了一個(gè)基本的Android應(yīng)用,其中包含了AndroidStudio幫助我們生成的文件,在默認(rèn)的Android視圖中,文件結(jié)構(gòu)如圖5-7所示。

圖5-7

Android文件結(jié)構(gòu)圖

該布局簡(jiǎn)單地在屏幕上顯示了一條消息——Helloworld!其他幾個(gè)重要的文件如下:

(1)?AndroidManifest文件用來(lái)描述Android應(yīng)用的基本信息,并定義了應(yīng)用中的各個(gè)組件(Activity是一種組件)。

(2)

app/src/main/res目錄下包含了應(yīng)用所需要的資源文件:

①drawable<density>/:圖片資源文件。

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

③menu/:應(yīng)用的菜單布局。

values/:常量值,例如字符串、顏色數(shù)值等。

4.運(yùn)行應(yīng)用

在AndroidStudio菜單中打開“Tools”→“Android”→“AVDManager”,選擇“CreateVirtualDevice”創(chuàng)建模擬器,創(chuàng)建完成后,模擬器列表如圖5-8所示。

圖5-8模擬器列表

在手機(jī)上運(yùn)行應(yīng)用需要進(jìn)行如下設(shè)置:

①將手機(jī)通過(guò)USB線纜連接到開發(fā)機(jī),如果在Windows上開發(fā),需要選擇合適的USB驅(qū)動(dòng);

②在手機(jī)系統(tǒng)中打開USB調(diào)試選項(xiàng);

③在AndroidStudio中運(yùn)行應(yīng)用時(shí),方法和在模擬器中相同,區(qū)別是在“ChooseDevice”窗口中選擇需要USB連接的手機(jī)。

5.展示列表

打開“activity_main.xml”布局文件,在Design視圖下,將“HelloWorld!”標(biāo)簽刪掉。我們準(zhǔn)備在這個(gè)屏幕中顯示學(xué)生的列表,而一個(gè)列表就是一個(gè)ViewGroup,內(nèi)部包含了其他視圖。在顯示手機(jī)屏幕的預(yù)覽區(qū)的左側(cè)可以看到大量視圖組件,視圖組件是用來(lái)構(gòu)建App外形的基本元素。選中“ListView”,將其拖入預(yù)覽區(qū)內(nèi),前后拖動(dòng)使其布滿屏幕,也可以切換到Text視圖來(lái)編輯XML,XML進(jìn)行修改之后,切回Design視圖即可看到效果。

最終activity_main.xml中的內(nèi)容如下:

6.簡(jiǎn)化的學(xué)生列表

簡(jiǎn)化的學(xué)生列表有學(xué)生們的名字。

首先創(chuàng)建一個(gè)Student類。選中java目錄下的a314lab.innovationcourse包,創(chuàng)建一個(gè)新的類,輸入類名為“Student”,并給Student類增加獲取所有學(xué)生姓名的方法,方法如下:

7.設(shè)置Adapter

用來(lái)將數(shù)據(jù)傳遞給ListView的適配器是ArrayAdapter,此處傳入的是字符串的數(shù)組,因此創(chuàng)建ArrayAdapter<String>類。

觀察到一個(gè)簡(jiǎn)單的學(xué)生列表,運(yùn)行效果如圖5-9所示。至此,一個(gè)簡(jiǎn)單的AndroidApp開發(fā)完成。

圖5-9運(yùn)行結(jié)果

5.2.2

iOS應(yīng)用軟件開發(fā)過(guò)程

本節(jié)將以一個(gè)簡(jiǎn)單的iOS應(yīng)用軟件為例,講解應(yīng)用軟件的開發(fā)過(guò)程。在開發(fā)過(guò)程中,我們將熟悉iOSIDE集成環(huán)境,創(chuàng)建一個(gè)項(xiàng)目,整理項(xiàng)目結(jié)構(gòu),增加“HelloWorld!”文本標(biāo)簽,設(shè)置應(yīng)用方向以及了解隱藏狀態(tài)欄的方法。

1.熟悉iOSIDE集成環(huán)境

XCode集成環(huán)境如圖5-10所示。

圖5-10XCode集成環(huán)境

2.創(chuàng)建一個(gè)項(xiàng)目

(1)打開XCode,選擇“File”→“NewProject”,再選擇“iOS”→“Application”→“SingleViewApplication”,接著點(diǎn)擊【Next】。除“OpenGLGame”模板外,其他模板的程序都非常簡(jiǎn)單。在本項(xiàng)目中,將選擇“SingleViewApplication”模板作為示例模板。

(2)在彈出的頁(yè)面中,在ProductName項(xiàng)輸入“HelloWorld”(即項(xiàng)目名),如圖5-11所示。

圖5-11項(xiàng)目設(shè)置

其他設(shè)置項(xiàng)介紹如下:

①CompanyIdentifier:公司標(biāo)識(shí),此處輸入唯一標(biāo)識(shí)即可,也可以在項(xiàng)目中統(tǒng)一進(jìn)行修改。

②ClassPrefix:默認(rèn)類前綴。為了避免與其他類混淆,默認(rèn)使用全大寫字母,也可以保留為空,本示例使用JOY作為類的前綴名稱。

③DeviceFamily:設(shè)備類型,可以選擇iPhone、iPad或Universal。

另外,在XCode4.X新增的特性中,Storyboard可以讓程序的UI設(shè)計(jì)更加簡(jiǎn)化。ARC也是XCode4.X新增的特性,對(duì)于之前的版本,iOS程序員每alloc(產(chǎn)生)一個(gè)對(duì)象,都需要進(jìn)行release(釋放),有了ARC,就不再每次都需要release。

(3)點(diǎn)擊【Next】,在彈出窗口中,選擇文件夾,保存項(xiàng)目,再點(diǎn)擊【Create】(創(chuàng)建)按鈕。至此,第一個(gè)項(xiàng)目創(chuàng)建完成。最后點(diǎn)擊【Run】(運(yùn)行)按鈕,效果如圖5-12所示。

圖5-12運(yùn)行效果

3.整理項(xiàng)目結(jié)構(gòu)

觀察導(dǎo)航區(qū)域,在“HelloWorld”上點(diǎn)擊右鍵,在彈出的菜單中選擇“NewGroup”。將新建的組重命名為“GUI”,將“HelloWorld”文件夾中的文件拖到“GUI”中。

4.增加“HelloWorld!”文本標(biāo)簽

增加一個(gè)文本標(biāo)簽,顯示“HelloWorld!”的具體方法是:在導(dǎo)航區(qū)域點(diǎn)擊并打開MainStoryBoard.storyboard文件,該StoryBoard為空白,意味著目前沒(méi)有任何控件(如圖5-13所示);在右下方的對(duì)象區(qū)域找到Label控件,并將其拖放到默認(rèn)的空白View上,再雙擊該Label控件,當(dāng)Label控件中的文字高亮選中時(shí),輸入“HelloWorld!”,然后重新調(diào)整Label的位置,使其保持在屏幕中央,最后點(diǎn)擊【運(yùn)行】按鈕,查看運(yùn)行效果。

圖5-13添加文本標(biāo)簽圖

5.設(shè)置應(yīng)用方向

大多數(shù)移動(dòng)設(shè)備支持屏幕旋轉(zhuǎn)功能,很多應(yīng)用軟件在用戶旋轉(zhuǎn)設(shè)備時(shí)都會(huì)根據(jù)用戶的當(dāng)前方向重新布局應(yīng)用軟件界面。在模擬器中,可以通過(guò)“command”+?左右鍵旋轉(zhuǎn)模擬器方向,達(dá)到模擬用戶在使用過(guò)程中旋轉(zhuǎn)設(shè)備的效果。嘗試模擬設(shè)備,結(jié)果如圖5-14所示。

圖5-14旋轉(zhuǎn)失敗圖

由此可以看出,“HelloWorld!”標(biāo)簽不在屏幕中央,要想讓“HelloWorld!”標(biāo)簽在旋轉(zhuǎn)狀態(tài)下依舊保持在屏幕中央,步驟如下:在導(dǎo)航區(qū)域點(diǎn)擊并打開MainStoryboard.storyboard文件,在“HelloWorld!”標(biāo)簽上點(diǎn)擊選中該控件;點(diǎn)擊工具區(qū)的“ShowtheAttributesinspector(顯示屬性檢查器)”,將標(biāo)簽的Alignment屬性設(shè)置為“居中”;點(diǎn)擊工具區(qū)的“ShowtheSizeinspector(顯示尺寸檢查器)”,將標(biāo)簽的Autosizing屬性按照?qǐng)D5-15所示設(shè)置即可。

圖5-15設(shè)置Autosizing屬性

6.隱藏狀態(tài)欄的方法

在導(dǎo)航區(qū)域點(diǎn)擊并打開HelloWorld-Info.plist文件。在編輯區(qū)域的空白處點(diǎn)擊鼠標(biāo)右鍵,在彈出菜單中選擇“AddRow”(添加行),在“Key”欄中使用下拉列表找到“Statusbarisinitiallyhidden”(隱藏狀態(tài)欄),并將其屬性設(shè)置為“YES”。

5.3應(yīng)用軟件權(quán)限的獲取

5.3.1Android應(yīng)用軟件權(quán)限的獲取

Android中App的一般權(quán)限在配置文件中進(jìn)行配置,在App安裝時(shí)提出申請(qǐng),用戶選擇同意或拒絕。Android中App系統(tǒng)權(quán)限的獲取有兩種方式:

1.方法一

(1)在應(yīng)用程序AndroidManifest.xml文件中的manifest節(jié)點(diǎn)中加入android:sharedUserId=“android.uid.system”屬性。該屬性可以將App提升到系統(tǒng)權(quán)限,需要到源碼中編譯,然后在屬性之后添加需要的權(quán)限。

(2)編譯apk。將應(yīng)用程序的src文件、res文件和AndroidManifest.xml文件拷貝到Android系統(tǒng)源碼package/apps目錄下。編寫Android.mk文件或拷貝其他模塊中的Android.mk文件,修改Android.mk文件,添加“LOCAL_CERTIFICATE:=platform”語(yǔ)句即可。

2.方法二

(1)在應(yīng)用程序AndroidManifest.xml文件中的manifest節(jié)點(diǎn)中加入android:sharedUserId=“android.uid.system”屬性,該屬性可以將App提升到系統(tǒng)權(quán)限,需要到源碼中編譯,并在屬性之后添加需要的權(quán)限。

(2)使用eclipse編譯出apk文件。

(3)使用壓縮軟件將apk文件打開,刪掉METAINF目錄下的“CERT.SF”和“CERT.RSA”文件。

(4)使用目標(biāo)系統(tǒng)的platform密鑰重新對(duì)apk文件簽名。

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

②使用Android提供的Signapk工具,即signapk.jar來(lái)簽名。Signpk的源代碼在build/tools/signapk下。

③進(jìn)入build/tools/signapk目錄下,在該目錄下執(zhí)行以下指令:

javacSignapk.java

5.3.2

iOS應(yīng)用軟件權(quán)限的獲取

iOS中的權(quán)限分為聯(lián)網(wǎng)權(quán)限、相冊(cè)權(quán)限、相機(jī)和麥克風(fēng)權(quán)限、定位權(quán)限、推送權(quán)限、通信錄權(quán)限及日歷、備忘錄權(quán)限等。下面以聯(lián)網(wǎng)權(quán)限、相冊(cè)權(quán)限、相機(jī)和麥克風(fēng)權(quán)限為例,介紹iOS應(yīng)用軟件如何獲取相應(yīng)的權(quán)限。

1.聯(lián)網(wǎng)權(quán)限

導(dǎo)入頭文件“@importCoreTelephony;”,應(yīng)用啟動(dòng)后,檢測(cè)應(yīng)用中是否有聯(lián)網(wǎng)權(quán)限,代碼如下:

使用時(shí)需要注意的關(guān)鍵點(diǎn)是:

①CTCellularData只能檢測(cè)蜂窩權(quán)限,不能檢測(cè)WiFi權(quán)限;②?一個(gè)CTCellularData實(shí)例新建時(shí),restrictedState是kCTCellularDataRestricted-StateUnknown,之后在cellularDataRestrictionDidUpdateNotifier里會(huì)有一次回調(diào),此時(shí)才能獲取到正確的權(quán)限狀態(tài);

③當(dāng)用戶在設(shè)置里更改了App的權(quán)限時(shí),cellularDataRestrictionDidUpdateNotifier會(huì)收到回調(diào),如果要停止監(jiān)聽,必須將cellularDataRestrictionDidUpdate

Notifier設(shè)置為“nil”;

賦值給cellularDataRestrictionDidUpdateNotifier的block并不會(huì)自動(dòng)釋放,即便將一個(gè)局部變量的CTCellularData實(shí)例設(shè)置監(jiān)聽,當(dāng)權(quán)限更改時(shí),仍會(huì)收到回調(diào),所以記得將block置“nil”。

當(dāng)應(yīng)用軟件被設(shè)置為不聯(lián)網(wǎng),而使用應(yīng)用軟件時(shí),系統(tǒng)會(huì)自動(dòng)彈出“XXXX(此為應(yīng)用軟件名稱)已被關(guān)閉網(wǎng)絡(luò)”的對(duì)話框,點(diǎn)擊【去設(shè)置】按鈕,就自動(dòng)跳轉(zhuǎn)到設(shè)置中心進(jìn)行設(shè)置。

2.相冊(cè)權(quán)限

1)

iOS9.0版本之前

導(dǎo)入頭文件“@importAssetsLibrary;”,檢查是否有相冊(cè)權(quán)限。

2)?iOS9.0版本之后

導(dǎo)入頭文件“@importPhotos;”,檢查是否有相冊(cè)權(quán)限。

3.相機(jī)和麥克風(fēng)權(quán)限

導(dǎo)入頭文件“@importAVFoundation;”,檢查是否有相機(jī)或麥克風(fēng)權(quán)限。

5.4面臨的安全威脅

5.4.1組件通信過(guò)程中的信息泄露

Android系統(tǒng)迅速發(fā)展的同時(shí)也暴露了很多安全問(wèn)題,應(yīng)用組件間利用Intent進(jìn)行組件調(diào)用及數(shù)據(jù)傳遞的Intent通信過(guò)程中存在的缺陷日益受到關(guān)注。例如,Android手機(jī)利用電話漏洞和暴露組件進(jìn)行權(quán)限提升,從而在未聲明任何權(quán)限的情況下可撥打電話;短信重發(fā)漏洞利用廣播接收器組件泄露和廣播偽造漏洞,通過(guò)偽造草稿箱短信實(shí)現(xiàn)無(wú)權(quán)限發(fā)送任意短信的攻擊等。

Android應(yīng)用軟件通過(guò)顯示或隱式的方式來(lái)構(gòu)造Intent,并將該對(duì)象作為參數(shù)傳遞給請(qǐng)求組件,以實(shí)現(xiàn)對(duì)目標(biāo)組件的請(qǐng)求。顯示Intent實(shí)現(xiàn)對(duì)內(nèi)部組件的請(qǐng)求,隱式Intent實(shí)現(xiàn)對(duì)外部組件的請(qǐng)求。利用Intent通信的過(guò)程如圖5-16所示。

從圖5-16中可以看到,隱式Intent請(qǐng)求的接收者具有一定的隨機(jī)性,這會(huì)帶來(lái)風(fēng)險(xiǎn)。如果應(yīng)用C的組件3是偽裝的并被調(diào)用,則會(huì)發(fā)生組件劫持。系統(tǒng)會(huì)將Intent對(duì)象攜帶的數(shù)據(jù)傳遞給被調(diào)用者,可能導(dǎo)致數(shù)據(jù)泄露。惡意應(yīng)用發(fā)送含有異常代碼的Intent請(qǐng)求可能會(huì)使正常工作的組件停止工作,導(dǎo)致拒絕服務(wù)攻擊的發(fā)生。這些存在的風(fēng)險(xiǎn)稱為Intent-based安全缺陷,主要包括:

(1)組件劫持:通過(guò)劫持Intent實(shí)現(xiàn)對(duì)組件的攻擊,即偽裝成正常的Intent,請(qǐng)求啟動(dòng)正常組件或者監(jiān)聽正常的Intent,請(qǐng)求啟動(dòng)惡意組件,實(shí)現(xiàn)Activity釣魚攻擊、Broadcast停止廣播等惡意行為。

(2)數(shù)據(jù)泄露:通過(guò)對(duì)Intent通信攜帶數(shù)據(jù)或者通過(guò)Intent啟動(dòng)組件進(jìn)行數(shù)據(jù)竊取,導(dǎo)致應(yīng)用的關(guān)鍵數(shù)據(jù)或設(shè)備上存儲(chǔ)的敏感數(shù)據(jù)泄露。

(3)權(quán)限泄露:應(yīng)用本身沒(méi)有訪問(wèn)某種敏感數(shù)據(jù)的權(quán)限,通過(guò)Intent啟動(dòng)具有該資源訪問(wèn)權(quán)限的組件,返回消息獲取數(shù)據(jù)或者利用相關(guān)API執(zhí)行操作來(lái)達(dá)到目的,即通過(guò)權(quán)限升級(jí)實(shí)現(xiàn)權(quán)限泄露。

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論