app測試中ios和Android的區(qū)別:
1、Android長按home鍵呼出應用列表和切換應用,然后右滑則終止應用;
2、多分辨率測試,Android端20多種,ios較少;
3、機操作系統(tǒng),Android較多,ios較少且不能降級,只能單向升級;新的ios系統(tǒng)中的資源庫不能完全兼容低版本中的ios系統(tǒng)中的應用,低版本ios系統(tǒng)中的應用調用了新的資源庫,會直接導致閃退(Crash);
4、操作習慣:Android,Back鍵是否被重寫,測試點擊Back鍵后的反饋是否正確;應用數(shù)據(jù)從內存移動到SD卡后能否正常運行等;
5、push測試:Android:點擊home鍵,程序后臺運行時,此時接收到push,點擊后喚醒應用,此時是否可以正確跳轉;ios,點擊home鍵關閉程序和屏幕鎖屏的情況(紅點的顯示);
6、安裝卸載測試:Android的下載和安裝的平臺和工具和渠道比較多,ios主要有app store,iTunes和testflight下載;
7、升級測試:可以被升級的必要條件:新舊版本具有相同的簽名;新舊版本具有相同的包名;有一個標示符區(qū)分新舊版本(如版本號),對于Android若有內置的應用需檢查升級之后內置文件是否匹配(如內置的輸入法)
另外:對于測試還需要注意一下幾點:
1、并發(fā)(中斷)測試:鬧鈴彈出框提示,另一個應用的啟動、視頻音頻的播放,來電、用戶正在輸入等,語音、錄音等的播放時強制其他正在播放的要暫停;
2、數(shù)據(jù)來源的測試:輸入,選擇、復制、語音輸入,安裝不同輸入法輸入等;
3、push(推送)測試:在開關機、待機狀態(tài)下執(zhí)行推送,消息先死及其推送跳轉的正確性;應用在開發(fā)、未打開狀態(tài)、應用啟動且在后臺運行的情況下是push顯示和跳轉否正確;推送消息閱讀前后數(shù)字的變化是否正確;多條推送的合集的顯示和跳轉是否正確;
4、分享跳轉:分享后的文案是否正確;分享后跳轉是否正確,顯示的消息來源是否正確;
5、觸屏測試:同時觸摸不同的位置或者同時進行不同操作,查看客戶端的處理情況,是否會crash等iOS和Android的區(qū)別,想了很久,也沒想出特別多,這兩個系統(tǒng)有些東西越來越通用(設計上來說),尤其是Android上,可以實現(xiàn)所有的效果,當然有些看上去iOS很像。長得和iOS很像的Android應用很多,好多大牌也這么做,比如說現(xiàn)在的QQAndroid5.1.1。這樣只需要一套設計,出一套資源就OK了,比較高效節(jié)約。兩個平臺的使用體驗比較統(tǒng)一,但我還是喜歡有各系統(tǒng)設計本來特色的設計,安卓感覺的應用,wp感覺的應用。
做一款純粹的Android應用,真是讓人興奮的一件事情。
區(qū)別,在這兩種系統(tǒng)的原生應用里就能發(fā)現(xiàn)。Android 一直在尋找合適的設計語言,最新的material design,和以前相比,又是一個大轉變。iOS相對比較穩(wěn)定。
這里的區(qū)別,聚焦在界面設計中,不涉及底層的內容(是你不懂寫不出來吧)區(qū)別,這些的區(qū)別也不絕對。
1 導航方式:
iOS的Tab放在頁面底部,不能通過滑動來切換,只能點擊。也有放在上面的,也不能滑動,但有些Tab本身可以滑動,比如天貓的。還有新聞類的應用。
Android一般放在頁面頂端,可以通過滑動頁面來切換Tab,當然Tab可以點擊切換,Tab多的話,Tab本身也可以滑動。比如豌豆莢,百度貼吧,QQ??傊?,Android啥都可以有。(其他導航方式,見上一篇)
2 單條item的操作
iOS單條item的操作有兩種,點擊和滑動,點擊一般進入一個新的頁面,滑動會出現(xiàn)對這條item的一些常用操作,如微信里滑動一條對話,會出現(xiàn)標記未讀和刪除。
Android中,單條item的操作也有兩種,點擊和長按,點擊一般進入一個新的頁面。長按進入一個編輯模式,可以在里面進行批量和其他一個操作,比如刪除,頂置等等。比如小米的短信頁面;長按也可以彈出情境操作欄dialog,進行操作,比如Android版的微信。
例外的是,Android里面也可以有單條item的滑動,如新版QQ,這種比較少見。安卓L的短信,可以滑動進行歸檔。大Android啥都可以有。
3 關于排版
iOS喜歡在居中排布
Android喜歡左對齊,感覺左對齊更安卓。
4 實體鍵
iOS只有一個實體鍵(音量,電源不算哈),home鍵,這個鍵有這么幾個功能:
1按一次,回到桌面。
2 雙擊,出現(xiàn)多任務界面
3iOS8里面,輕觸兩下Home鍵,調出單手模式
4 指紋解鎖
Android有四個實體鍵(現(xiàn)在很多被屏幕上的虛擬鍵代替,但功效是一樣的)4.4以下的分別是back鍵,home鍵,menu鍵,和搜索鍵。4.4及以上,是back鍵,home鍵,多任務鍵。安卓原生是這樣,經(jīng)過優(yōu)化的Android就不一定了,比如魅族的smart bar,根據(jù)當前頁面情景變化,不過蠻好用。
Android的back鍵,在大部分情況下,和頁面上的返回功效一樣。不過,Android的back鍵可以在應用件切換,還可以返回主屏幕。這個iOS里面的鍵不能在應用間直接切換。
5 動效
兩者的動效似乎差別不大,iOS有的,安卓都有。iOS實現(xiàn)的通常更加流暢,卡頓較少。
兩者都強調模擬現(xiàn)實世界的動畫效果,比如物體運動有一定的加速度,動畫的結束和開始速度小,中間速度大。
谷歌最新推出的material design,變化比較大,但這種設計風格還沒有大面積使用。這種設計風格,最突出的特點就是有一個懸浮按鈕。這個懸浮按鈕,代表了這個頁面的主要操作,位置可以在頁面上部,也可以在下部分。這次的動效也是亮點,動畫實時實地的反饋用戶的操作,動畫在用戶的點擊出開始觸發(fā)。又很多類似漣漪的效果。這種按鈕的動效變化,概念稿多,好像還沒有實際的案例。(馬上就有啦...正在做)
6 浮窗
安卓里可以看到各種浮窗,流量,清理內存等等。iOS暫時還不支持這樣的浮窗。越獄的貌似可以。
這兩個平臺,只有想不到,幾乎沒有不可以實現(xiàn)。安卓更加開放,可自定義的東西也更多,做花樣的話,安卓的限制更少
前言
總結了在做iOS與Android安全研究時,需要了解的區(qū)別。包括系統(tǒng)架構的區(qū)別,安裝包的區(qū)別,文件系統(tǒng)的區(qū)
別,二進制文件的區(qū)別,安全機制的區(qū)別與版權保護的區(qū)別
一、系統(tǒng)架構的區(qū)別(左邊iOS,右邊Android)
1.iOS架構
分為4層,分別為
(1)cocoa Touch層:包括Foundation Framework,UIkit Framework,Address Book UI Framework
(2)媒體層:包括圖像(Quartz,Core Animation,OpenGL ES),音頻(Core Audio,OpenAL)和視頻技術
(3)核心服務層:例如CoreFoundation.framework是基于C語言的接口集,提供應用的基本數(shù)據(jù)管理和服務功
能;CFNetwork.framework是一組高性能的C語言接口集,提供網(wǎng)絡協(xié)議的面向對象的抽象。開發(fā)者可以使用
CFNetwork框架操作協(xié)議棧,并且可以訪問底層的結構如BSD sockets等;Security.framework提供管理證書,
公鑰/私鑰對和信任策略等的接口來確保應用數(shù)據(jù)的安全性
(4)核心OS層: 基于Mac操作系統(tǒng)
2.Android架構
分為4層,分別為
(1)應用程序:使用java編寫
(2)應用程序框架:
活動管理器:用來管理應用程序生命周期并提供常用的導航回退功能
資源管理器:提供非代碼資源的訪問,如本地字符串、圖形和布局文件
內容提供器:用來存放和獲取數(shù)據(jù)并使用這些數(shù)據(jù)可以被所有應用程序訪問
XMPP服務器:基于XML的網(wǎng)絡實時通訊協(xié)議
(3)系統(tǒng)運行庫+Android運行時
系統(tǒng)運行庫:android包括一些c/c++庫,這些庫能被android系統(tǒng)中的不同的組件使用,例如libc是一個從BSD
繼承來的標準c系統(tǒng)函數(shù)庫;webkit為Web瀏覽器引擎,支持Android瀏覽器(蘋果Safari的引擎也是webkit)。
SQLite為功能強勁的輕量級關系數(shù)據(jù)庫引擎(iOS也是采用的該數(shù)據(jù)庫引擎)。
Android運行時:包括核心庫(基本類庫,例如data structure,network,file system等),很多實現(xiàn)代碼都來
自Apache Harmony項目,主要目的時保證虛擬機的類庫能夠與Java SE類庫最大程度的兼容)與Dalvik虛擬機(
用于運行dex:dalvik executable格式二進制可執(zhí)行文件,該虛擬機較之java虛擬機的最大區(qū)別是Dalvik基于
寄存器)
(4)linux內核:基于linux 2.6內核
總的來說,如果要深層次挖掘Android的漏洞就要明白linux內核安全,如果要挖身深層次挖掘iOS的漏洞就要了
解Mac內核安全(BSD內核安全)。
二、安裝包的區(qū)別(左邊iOS,右邊Android)
總的來說,安裝包由可執(zhí)行文件,資源文件,簽名文件,配置文件組成。
三、文件系統(tǒng)的區(qū)別(左邊iOS,右邊Android)
注意: android的sdcard是不受文件訪問控制約束的
四、二進制文件的區(qū)別
1. iOS二進制文件格式
mach-o , dylib
2.Android二進制文件的區(qū)別
dex, so(ELF shared object)
五、安全機制的區(qū)別
1. iOS安全機制
(1)安全沙箱
進程隔離,每個程序都有自己的虛擬地址空間。應用程序在安裝之后,系統(tǒng)就通過計算得到一個標識,然后基
于應用程序的根目錄和這個標識構件一個指向應用程序目錄的路徑,其他應用程序都不能進行訪問。iOS 的沙
箱是基于TrustBSD策略框架的內核擴展模塊,針對每個進程都可以制定特殊的沙箱配置文件,沙箱配置文件編
譯后以2進制的方式保存在KernelCache文件中(iOS下),需反匯編成可讀的文本格式來查看內核中的沙盒規(guī)則
(2)代碼簽名
apple需要所有開發(fā)人員對自己的iPhone應用程序使用數(shù)字簽名技術。這個簽名用來標識應用程序的開發(fā)者以及
保證應用程序在簽名之后不被更改和損壞。開發(fā)者證書由apple提供(這是與android最大的區(qū)別,android是自
簽名),有以下兩類證書:
Developer Certificate:用于本機測試
Distribution Certificate:Ad-hoc用于100臺設備以內的測試和共享;app store用于發(fā)布應用程序
所有的可執(zhí)行文件、庫文件都需要Apple簽名后才可以運行在iOS中,內核會在調用execve之前檢測Mach-o文件
中的LC_CODE_SIGNATURE段是否有效和可信任的,iOS啟動的時候同樣也會檢測KernelCache的簽名是否有效
代碼簽名的破壞可見《iOS平臺游戲安全之IPA破解原理及防御》
(3)ASLR(address space layout randomisation)/DEP
PIE: position independent executable
iOS 4.3后開始支持該功能,iOS上的預裝應用都開啟了該功能
ASLR的其他信息可見《ASLR》
DEP(Data execution Prevention),內核不允許將頁面保護標志設置為RWS,并在ARMv6引入XN(execute
never)標志位,從而在硬件上支持執(zhí)行保護。
(4)文件系統(tǒng)加密
Data protection APIs
NSFileProtectionNone
NSFileProtectionComplete
NSFileProtectionCompleteUnlessOpen
NSFileProtectionCompleteUntilUserAuthentication
KSecAttrAccessibleAlways
KSecAttrAccessibleWhenUnlocked
KSecAttrAccessibleAfterFirstUnlock
KSecAttrAccessibleAlwaysThisdeviceOnly
KSecAttrAccessibleWhenUnlockedThisDeviceOnly
KSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
2.Android安全機制
(1)安全沙箱
每一個Android應用程序(apk文件)會在安裝時分配一個獨有的linux用戶ID(即一個用戶id識別一個應用程序
),這就為它建立了一個沙箱,使其不能與其他應用程序進行接觸。這個用戶ID在安裝時分配,并在該設備上
一直保持同一個數(shù)值。所有存儲在應用程序中的數(shù)據(jù)都會賦予該應用程序的用戶ID,使其他應用程序無法訪問
這些數(shù)據(jù)(如需要訪問,見(4)文件訪問控制)。
(2)代碼簽名
采用自簽名機制,不需要權威機構簽名和審核,完全由用戶自行判斷是否信任該程序(與iOS區(qū)別很大)。簽名
是為了:
識別代碼的作者
檢測應用程序是否發(fā)生了變化
在應用程序之間建立信任:使用相同數(shù)字簽名簽署的兩個應用程序可以相互授予權限來反問基于簽名的API,如
果他們共享用戶ID,那么也可以運行在同一進程中,從而允許訪問對方的代碼和數(shù)據(jù)(見(4)文件訪問控制)
。
代碼簽名的詳細機制可見《Android簽名與簽名校驗》
(3)manifest權限管理
Android要求用戶在使用API時進行申明,稱為permission,對一些敏感API的使用在安裝時就可以給用戶風險提
示,由用戶確定是否安裝,例如READ_CONTACTS為讀取通訊錄數(shù)據(jù)權限。權限在AndroidManifest.xml文件里進
行設置,通過元素添加子元素,如下圖所示
permission分為4個保護等級:normal,dangerous,signature,signatureorsystem。不同的保護級別代表程
序要使用此權限時的認證方式。
normal:只要申請就可以使用
dangerous:在安裝時需要用戶確認才可以使用,最經(jīng)常使用的權限
signature:告訴android系統(tǒng)這個權限只能授予擁有同樣數(shù)字簽名并且定義了該權限的應用程序
signatureorsystem:需要開發(fā)者的應用和系統(tǒng)使用同一個數(shù)字證書,即需要系統(tǒng)或者平臺簽名,真實手機中的
系統(tǒng)簽名只有廠商知道
應用程序也可以定制權限以保護自己的資源,當前ita應用程序想要訪問一個應用程序的受保護資源時,就必須
通過它們自己的manifest文件請求適當?shù)臋嘞?/p>
(4)文件訪問控制
因為安全沙箱的存在導致不同應用程序之間的數(shù)據(jù)(文件)是隔離的。在通過
getSharedPreferences(filename,operatingMode)
openFileOutput(filename,operatingMode)
openOrCreateDatabase(filename,operatingMode, SQLiteDatabase.CursorFactory)
等方法來創(chuàng)建一個新文件時,可以通過指定文件的存儲方式operationMode來進行文件的訪問控制,android文
件存儲有以下4種方式:
Context.MODE_PRIVATE:默認操作模式,代表該文件是私有數(shù)據(jù),只能被應用本身訪問,在該模式下,寫入的
內容會覆蓋原文件的內容
Context.MODE_APPEND:代表該文件是私有數(shù)據(jù),只能被應用本身訪問,在該模式下,會檢查文件是否存在,存
在就往文件追加內容,否則就創(chuàng)建新文件
Context.MODE_WORLD_READABLE:表示當前文件可以被其他應用讀取
Context.MODE_WORLD_WRITEABLE:表示當前文件可以被其他應用寫入。
除了使用Context.MODE_WORLD_READABLE/Context.MODE_WORLD_WRITEABLE標識位來使兩個程序相互訪問對方的
資源。還可以通過設置AndroidManifest.xml文件的manifest標簽中的sharedUserId屬性,來使得不同的應用程
序共用同一個用戶ID,并且這些應用程序還使用同一個簽名簽署,在滿足以上兩個條件(共同的sharedUserID
,共同的簽名)的情況下就可以實現(xiàn)不同應用程序相互資源的訪問了,如下圖所示
(5)ASLRandroid 4.1后才開始支持完整版功能
六、版權保護的區(qū)別
1. iOS
App store,采用FairPlay DRM保護商店下載應用
2. Android
(1)google play store,采用Android License Verification Library保護商店下載應用
(2)Amazon Appstore DRM
(3)其他