App测试中ios和Android的区别:
1、Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;
2、多分辨率测试,Android端20多种,ios较少;
3、机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低
版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);
4、操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡
后能否正常运行等;
5、push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正
确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);
6、安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有app store,iTunes和
testflight下载;
7、升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区
分新旧版本(如版本号),对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
另外:对于测试还需要注意一下几点:
1、并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音
、录音等的播放时强制其他正在播放的要暂停;
2、数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
3、push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;应用在开发、未打
开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;推送消息阅读前后数字的变化是否正确;
多条推送的合集的显示和跳转是否正确;
4、分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;
5、触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等
iOS和Android的区别,想了很久,也没想出特别多,这两个系统有些东西越来越通用(设计上来说),尤其是
Android上,可以实现所有的效果,当然有些看上去iOS很像。长得和iOS很像的Android应用很多,好多大牌也
这么做,比如说现在的QQAndroid5.1.1。这样只需要一套设计,出一套资源就OK了,比较高效节约。两个平台
的使用体验比较统一,但我还是喜欢有各系统设计本来特色的设计,安卓感觉的应用,wp感觉的应用。
做一款纯粹的Android应用,真是让人兴奋的一件事情。
区别,在这两种系统的原生应用里就能发现。Android 一直在寻找合适的设计语言,最新的material design,
和以前相比,又是一个大转变。iOS相对比较稳定。
这里的区别,聚焦在界面设计中,不涉及底层的内容(是你不懂写不出来吧)区别,这些的区别也不绝对。
1 导航方式:
iOS的Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以
滑动,比如天猫的。还有新闻类的应用。
Android一般放在页面顶端,可以通过滑动页面来切换Tab,当然Tab可以点击切换,Tab多的话,Tab本身也可以
滑动。比如豌豆荚,百度贴吧,QQ。总之,Android啥都可以有。(其他导航方式,见上一篇)
2 单条item的操作
iOS单条item的操作有两种,点击和滑动,点击一般进入一个新的页面,滑动会出现对这条item的一些常用操作
,如微信里滑动一条对话,会出现标记未读和删除。
Android中,单条item的操作也有两种,点击和长按,点击一般进入一个新的页面。长按进入一个编辑模式,可
以在里面进行批量和其他一个操作,比如删除,顶置等等。比如小米的短信页面;长按也可以弹出情境操作栏
dialog,进行操作,比如Android版的微信。
例外的是,Android里面也可以有单条item的滑动,如新版QQ,这种比较少见。安卓L的短信,可以滑动进行归
档。大Android啥都可以有。
3关于排版
iOS喜欢在居中排布
Android喜欢左对齐,感觉左对齐更安卓。
4实体键
iOS只有一个实体键(音量,电源不算哈),home键,这个键有这么几个功能:
1按一次,回到桌面。
2 双击,出现多任务界面
3iOS8里面,轻触两下Home键,调出单手模式
4 指纹解锁
Android有四个实体键(现在很多被屏幕上的虚拟键代替,但功效是一样的)4.4一下的分别是back键,home键
,menu键,和搜索键。4.4及以上,是back键,home键,多任务键。安卓原生是这样,经过优化的Android就不
一定了,比如魅族的smart bar,根据当前页面情景变化,不过蛮好用。
Android的back键,在大部分情况下,和页面上的返回功效一样。不过,Android的back键可以在应用件切换,
还可以返回主屏幕。这个iOS里面的键不能在应用间直接切换。
5 动效
两者的动效似乎差别不大,iOS有的,安卓都有。iOS实现的通常更加流畅,卡顿较少。
两者都强调模拟现实世界的动画效果,比如物体运动有一定的加速度,动画的结束和开始速度小,中间速度大
。
谷歌最新推出的material design,变化比较大,但这种设计风格还没有大面积使用。这种设计风格,最突出的
特点就是有一个悬浮按钮。这个悬浮按钮,代表了这个页面的主要操作,位置可以在页面上部,也可以在下部
分。这次的动效也是亮点,动画实时实地的反馈用户的操作,动画在用户的点击出开始触发。又很多类似涟漪
的效果。
这种按钮的动效变化,概念稿多,好像还没有实际的案例。(马上就有啦...正在做)
6 浮窗
安卓里可以看到各种浮窗,流量,清理内存等等。iOS暂时还不支持这样的浮窗。越狱的貌似可以。
这两个平台,只有想不到,几乎没有不可以实现。
安卓更加开放,可自定义的东西也更多,做花样的话,安卓的限制更少
前言
总结了在做iOS与Android安全研究时,需要了解的区别。包括系统架构的区别,安装包的区别,文件系统的区
别,二进制文件的区别,安全机制的区别与版权保护的区别
一、系统架构的区别(左边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语言的接口集,提供应用的基本数据管理和服务功
能;CFNetwork.framework是一组高性能的C语言接口集,提供网络协议的面向对象的抽象。开发者可以使用
CFNetwork框架操作协议栈,并且可以访问底层的结构如BSD sockets等;Security.framework提供管理证书,
公钥/私钥对和信任策略等的接口来确保应用数据的安全性
(4)核心OS层: 基于Mac操作系统
2.Android架构
分为4层,分别为
(1)应用程序:使用java编写
(2)应用程序框架:
活动管理器:用来管理应用程序生命周期并提供常用的导航回退功能
资源管理器:提供非代码资源的访问,如本地字符串、图形和布局文件
内容提供器:用来存放和获取数据并使用这些数据可以被所有应用程序访问
XMPP服务器:基于XML的网络实时通讯协议
(3)系统运行库+Android运行时
系统运行库:android包括一些c/c++库,这些库能被android系统中的不同的组件使用,例如libc是一个从BSD
继承来的标准c系统函数库;webkit为Web浏览器引擎,支持Android浏览器(苹果Safari的引擎也是webkit)。
SQLite为功能强劲的轻量级关系数据库引擎(iOS也是采用的该数据库引擎)。
Android运行时:包括核心库(基本类库,例如data structure,network,file system等),很多实现代码都来
自Apache Harmony项目,主要目的时保证虚拟机的类库能够与Java SE类库最大程度的兼容)与Dalvik虚拟机(
用于运行dex:dalvik executable格式二进制可执行文件,该虚拟机较之java虚拟机的最大区别是Dalvik基于
寄存器)
(4)linux内核:基于linux 2.6内核
总的来说,如果要深层次挖掘Android的漏洞就要明白linux内核安全,如果要挖身深层次挖掘iOS的漏洞就要了
解Mac内核安全(BSD内核安全)。
二、安装包的区别(左边iOS,右边Android)
总的来说,安装包由可执行文件,资源文件,签名文件,配置文件组成。
三、文件系统的区别(左边iOS,右边Android)
注意: android的sdcard是不受文件访问控制约束的
四、二进制文件的区别
1. iOS二进制文件格式
mach-o , dylib
2.Android二进制文件的区别
dex, so(ELF shared object)
五、安全机制的区别
1. iOS安全机制
(1)安全沙箱
进程隔离,每个程序都有自己的虚拟地址空间。应用程序在安装之后,系统就通过计算得到一个标识,然后基
于应用程序的根目录和这个标识构件一个指向应用程序目录的路径,其他应用程序都不能进行访问。iOS 的沙
箱是基于TrustBSD策略框架的内核扩展模块,针对每个进程都可以制定特殊的沙箱配置文件,沙箱配置文件编
译后以2进制的方式保存在KernelCache文件中(iOS下),需反汇编成可读的文本格式来查看内核中的沙盒规则
(2)代码签名
apple需要所有开发人员对自己的iPhone应用程序使用数字签名技术。这个签名用来标识应用程序的开发者以及
保证应用程序在签名之后不被更改和损坏。开发者证书由apple提供(这是与android最大的区别,android是自
签名),有以下两类证书:
Developer Certificate:用于本机测试
Distribution Certificate:Ad-hoc用于100台设备以内的测试和共享;app store用于发布应用程序
所有的可执行文件、库文件都需要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)标志位,从而在硬件上支持执行保护。
(4)文件系统加密
Data protection APIs
NSFileProtectionNone
NSFileProtectionComplete
NSFileProtectionCompleteUnlessOpen
NSFileProtectionCompleteUntilUserAuthentication
KSecAttrAccessibleAlways
KSecAttrAccessibleWhenUnlocked
KSecAttrAccessibleAfterFirstUnlock
KSecAttrAccessibleAlwaysThisdeviceOnly
KSecAttrAccessibleWhenUnlockedThisDeviceOnly
KSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
2.Android安全机制
(1)安全沙箱
每一个Android应用程序(apk文件)会在安装时分配一个独有的linux用户ID(即一个用户id识别一个应用程序
),这就为它建立了一个沙箱,使其不能与其他应用程序进行接触。这个用户ID在安装时分配,并在该设备上
一直保持同一个数值。所有存储在应用程序中的数据都会赋予该应用程序的用户ID,使其他应用程序无法访问
这些数据(如需要访问,见(4)文件访问控制)。
(2)代码签名
采用自签名机制,不需要权威机构签名和审核,完全由用户自行判断是否信任该程序(与iOS区别很大)。签名
是为了:
识别代码的作者
检测应用程序是否发生了变化
在应用程序之间建立信任:使用相同数字签名签署的两个应用程序可以相互授予权限来反问基于签名的API,如
果他们共享用户ID,那么也可以运行在同一进程中,从而允许访问对方的代码和数据(见(4)文件访问控制)
。
代码签名的详细机制可见《Android签名与签名校验》
(3)manifest权限管理
Android要求用户在使用API时进行申明,称为permission,对一些敏感API的使用在安装时就可以给用户风险提
示,由用户确定是否安装,例如READ_CONTACTS为读取通讯录数据权限。权限在AndroidManifest.xml文件里进
行设置,通过元素添加子元素,如下图所示
permission分为4个保护等级:normal,dangerous,signature,signatureorsystem。不同的保护级别代表程
序要使用此权限时的认证方式。
normal:只要申请就可以使用
dangerous:在安装时需要用户确认才可以使用,最经常使用的权限
signature:告诉android系统这个权限只能授予拥有同样数字签名并且定义了该权限的应用程序
signatureorsystem:需要开发者的应用和系统使用同一个数字证书,即需要系统或者平台签名,真实手机中的
系统签名只有厂商知道
应用程序也可以定制权限以保护自己的资源,当前ita应用程序想要访问一个应用程序的受保护资源时,就必须
通过它们自己的manifest文件请求适当的权限
(4)文件访问控制
因为安全沙箱的存在导致不同应用程序之间的数据(文件)是隔离的。在通过
getSharedPreferences(filename,operatingMode)
openFileOutput(filename,operatingMode)
openOrCreateDatabase(filename,operatingMode, SQLiteDatabase.CursorFactory)
等方法来创建一个新文件时,可以通过指定文件的存储方式operationMode来进行文件的访问控制,android文
件存储有以下4种方式:
Context.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的
内容会覆盖原文件的内容
Context.MODE_APPEND:代表该文件是私有数据,只能被应用本身访问,在该模式下,会检查文件是否存在,存
在就往文件追加内容,否则就创建新文件
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
除了使用Context.MODE_WORLD_READABLE/Context.MODE_WORLD_WRITEABLE标识位来使两个程序相互访问对方的
资源。还可以通过设置AndroidManifest.xml文件的manifest标签中的sharedUserId属性,来使得不同的应用程
序共用同一个用户ID,并且这些应用程序还使用同一个签名签署,在满足以上两个条件(共同的sharedUserID
,共同的签名)的情况下就可以实现不同应用程序相互资源的访问了,如下图所示
(5)ASLRandroid 4.1后才开始支持完整版功能
六、版权保护的区别
1. iOS
App store,采用FairPlay DRM保护商店下载应用
2. Android
(1)google play store,采用Android License Verification Library保护商店下载应用
(2)Amazon Appstore DRM
(3)其他
1、Android长按home键呼出应用列表和切换应用,然后右滑则终止应用;
2、多分辨率测试,Android端20多种,ios较少;
3、机操作系统,Android较多,ios较少且不能降级,只能单向升级;新的ios系统中的资源库不能完全兼容低
版本中的ios系统中的应用,低版本ios系统中的应用调用了新的资源库,会直接导致闪退(Crash);
4、操作习惯:Android,Back键是否被重写,测试点击Back键后的反馈是否正确;应用数据从内存移动到SD卡
后能否正常运行等;
5、push测试:Android:点击home键,程序后台运行时,此时接收到push,点击后唤醒应用,此时是否可以正
确跳转;ios,点击home键关闭程序和屏幕锁屏的情况(红点的显示);
6、安装卸载测试:Android的下载和安装的平台和工具和渠道比较多,ios主要有app store,iTunes和
testflight下载;
7、升级测试:可以被升级的必要条件:新旧版本具有相同的签名;新旧版本具有相同的包名;有一个标示符区
分新旧版本(如版本号),对于Android若有内置的应用需检查升级之后内置文件是否匹配(如内置的输入法)
另外:对于测试还需要注意一下几点:
1、并发(中断)测试:闹铃弹出框提示,另一个应用的启动、视频音频的播放,来电、用户正在输入等,语音
、录音等的播放时强制其他正在播放的要暂停;
2、数据来源的测试:输入,选择、复制、语音输入,安装不同输入法输入等;
3、push(推送)测试:在开关机、待机状态下执行推送,消息先死及其推送跳转的正确性;应用在开发、未打
开状态、应用启动且在后台运行的情况下是push显示和跳转否正确;推送消息阅读前后数字的变化是否正确;
多条推送的合集的显示和跳转是否正确;
4、分享跳转:分享后的文案是否正确;分享后跳转是否正确,显示的消息来源是否正确;
5、触屏测试:同时触摸不同的位置或者同时进行不同操作,查看客户端的处理情况,是否会crash等
iOS和Android的区别,想了很久,也没想出特别多,这两个系统有些东西越来越通用(设计上来说),尤其是
Android上,可以实现所有的效果,当然有些看上去iOS很像。长得和iOS很像的Android应用很多,好多大牌也
这么做,比如说现在的QQAndroid5.1.1。这样只需要一套设计,出一套资源就OK了,比较高效节约。两个平台
的使用体验比较统一,但我还是喜欢有各系统设计本来特色的设计,安卓感觉的应用,wp感觉的应用。
做一款纯粹的Android应用,真是让人兴奋的一件事情。
区别,在这两种系统的原生应用里就能发现。Android 一直在寻找合适的设计语言,最新的material design,
和以前相比,又是一个大转变。iOS相对比较稳定。
这里的区别,聚焦在界面设计中,不涉及底层的内容(是你不懂写不出来吧)区别,这些的区别也不绝对。
1 导航方式:
iOS的Tab放在页面底部,不能通过滑动来切换,只能点击。也有放在上面的,也不能滑动,但有些Tab本身可以
滑动,比如天猫的。还有新闻类的应用。
Android一般放在页面顶端,可以通过滑动页面来切换Tab,当然Tab可以点击切换,Tab多的话,Tab本身也可以
滑动。比如豌豆荚,百度贴吧,QQ。总之,Android啥都可以有。(其他导航方式,见上一篇)
2 单条item的操作
iOS单条item的操作有两种,点击和滑动,点击一般进入一个新的页面,滑动会出现对这条item的一些常用操作
,如微信里滑动一条对话,会出现标记未读和删除。
Android中,单条item的操作也有两种,点击和长按,点击一般进入一个新的页面。长按进入一个编辑模式,可
以在里面进行批量和其他一个操作,比如删除,顶置等等。比如小米的短信页面;长按也可以弹出情境操作栏
dialog,进行操作,比如Android版的微信。
例外的是,Android里面也可以有单条item的滑动,如新版QQ,这种比较少见。安卓L的短信,可以滑动进行归
档。大Android啥都可以有。
3关于排版
iOS喜欢在居中排布
Android喜欢左对齐,感觉左对齐更安卓。
4实体键
iOS只有一个实体键(音量,电源不算哈),home键,这个键有这么几个功能:
1按一次,回到桌面。
2 双击,出现多任务界面
3iOS8里面,轻触两下Home键,调出单手模式
4 指纹解锁
Android有四个实体键(现在很多被屏幕上的虚拟键代替,但功效是一样的)4.4一下的分别是back键,home键
,menu键,和搜索键。4.4及以上,是back键,home键,多任务键。安卓原生是这样,经过优化的Android就不
一定了,比如魅族的smart bar,根据当前页面情景变化,不过蛮好用。
Android的back键,在大部分情况下,和页面上的返回功效一样。不过,Android的back键可以在应用件切换,
还可以返回主屏幕。这个iOS里面的键不能在应用间直接切换。
5 动效
两者的动效似乎差别不大,iOS有的,安卓都有。iOS实现的通常更加流畅,卡顿较少。
两者都强调模拟现实世界的动画效果,比如物体运动有一定的加速度,动画的结束和开始速度小,中间速度大
。
谷歌最新推出的material design,变化比较大,但这种设计风格还没有大面积使用。这种设计风格,最突出的
特点就是有一个悬浮按钮。这个悬浮按钮,代表了这个页面的主要操作,位置可以在页面上部,也可以在下部
分。这次的动效也是亮点,动画实时实地的反馈用户的操作,动画在用户的点击出开始触发。又很多类似涟漪
的效果。
这种按钮的动效变化,概念稿多,好像还没有实际的案例。(马上就有啦...正在做)
6 浮窗
安卓里可以看到各种浮窗,流量,清理内存等等。iOS暂时还不支持这样的浮窗。越狱的貌似可以。
这两个平台,只有想不到,几乎没有不可以实现。
安卓更加开放,可自定义的东西也更多,做花样的话,安卓的限制更少
前言
总结了在做iOS与Android安全研究时,需要了解的区别。包括系统架构的区别,安装包的区别,文件系统的区
别,二进制文件的区别,安全机制的区别与版权保护的区别
一、系统架构的区别(左边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语言的接口集,提供应用的基本数据管理和服务功
能;CFNetwork.framework是一组高性能的C语言接口集,提供网络协议的面向对象的抽象。开发者可以使用
CFNetwork框架操作协议栈,并且可以访问底层的结构如BSD sockets等;Security.framework提供管理证书,
公钥/私钥对和信任策略等的接口来确保应用数据的安全性
(4)核心OS层: 基于Mac操作系统
2.Android架构
分为4层,分别为
(1)应用程序:使用java编写
(2)应用程序框架:
活动管理器:用来管理应用程序生命周期并提供常用的导航回退功能
资源管理器:提供非代码资源的访问,如本地字符串、图形和布局文件
内容提供器:用来存放和获取数据并使用这些数据可以被所有应用程序访问
XMPP服务器:基于XML的网络实时通讯协议
(3)系统运行库+Android运行时
系统运行库:android包括一些c/c++库,这些库能被android系统中的不同的组件使用,例如libc是一个从BSD
继承来的标准c系统函数库;webkit为Web浏览器引擎,支持Android浏览器(苹果Safari的引擎也是webkit)。
SQLite为功能强劲的轻量级关系数据库引擎(iOS也是采用的该数据库引擎)。
Android运行时:包括核心库(基本类库,例如data structure,network,file system等),很多实现代码都来
自Apache Harmony项目,主要目的时保证虚拟机的类库能够与Java SE类库最大程度的兼容)与Dalvik虚拟机(
用于运行dex:dalvik executable格式二进制可执行文件,该虚拟机较之java虚拟机的最大区别是Dalvik基于
寄存器)
(4)linux内核:基于linux 2.6内核
总的来说,如果要深层次挖掘Android的漏洞就要明白linux内核安全,如果要挖身深层次挖掘iOS的漏洞就要了
解Mac内核安全(BSD内核安全)。
二、安装包的区别(左边iOS,右边Android)
总的来说,安装包由可执行文件,资源文件,签名文件,配置文件组成。
三、文件系统的区别(左边iOS,右边Android)
注意: android的sdcard是不受文件访问控制约束的
四、二进制文件的区别
1. iOS二进制文件格式
mach-o , dylib
2.Android二进制文件的区别
dex, so(ELF shared object)
五、安全机制的区别
1. iOS安全机制
(1)安全沙箱
进程隔离,每个程序都有自己的虚拟地址空间。应用程序在安装之后,系统就通过计算得到一个标识,然后基
于应用程序的根目录和这个标识构件一个指向应用程序目录的路径,其他应用程序都不能进行访问。iOS 的沙
箱是基于TrustBSD策略框架的内核扩展模块,针对每个进程都可以制定特殊的沙箱配置文件,沙箱配置文件编
译后以2进制的方式保存在KernelCache文件中(iOS下),需反汇编成可读的文本格式来查看内核中的沙盒规则
(2)代码签名
apple需要所有开发人员对自己的iPhone应用程序使用数字签名技术。这个签名用来标识应用程序的开发者以及
保证应用程序在签名之后不被更改和损坏。开发者证书由apple提供(这是与android最大的区别,android是自
签名),有以下两类证书:
Developer Certificate:用于本机测试
Distribution Certificate:Ad-hoc用于100台设备以内的测试和共享;app store用于发布应用程序
所有的可执行文件、库文件都需要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)标志位,从而在硬件上支持执行保护。
(4)文件系统加密
Data protection APIs
NSFileProtectionNone
NSFileProtectionComplete
NSFileProtectionCompleteUnlessOpen
NSFileProtectionCompleteUntilUserAuthentication
KSecAttrAccessibleAlways
KSecAttrAccessibleWhenUnlocked
KSecAttrAccessibleAfterFirstUnlock
KSecAttrAccessibleAlwaysThisdeviceOnly
KSecAttrAccessibleWhenUnlockedThisDeviceOnly
KSecAttrAccessibleAfterFirstUnlockThisDeviceOnly
2.Android安全机制
(1)安全沙箱
每一个Android应用程序(apk文件)会在安装时分配一个独有的linux用户ID(即一个用户id识别一个应用程序
),这就为它建立了一个沙箱,使其不能与其他应用程序进行接触。这个用户ID在安装时分配,并在该设备上
一直保持同一个数值。所有存储在应用程序中的数据都会赋予该应用程序的用户ID,使其他应用程序无法访问
这些数据(如需要访问,见(4)文件访问控制)。
(2)代码签名
采用自签名机制,不需要权威机构签名和审核,完全由用户自行判断是否信任该程序(与iOS区别很大)。签名
是为了:
识别代码的作者
检测应用程序是否发生了变化
在应用程序之间建立信任:使用相同数字签名签署的两个应用程序可以相互授予权限来反问基于签名的API,如
果他们共享用户ID,那么也可以运行在同一进程中,从而允许访问对方的代码和数据(见(4)文件访问控制)
。
代码签名的详细机制可见《Android签名与签名校验》
(3)manifest权限管理
Android要求用户在使用API时进行申明,称为permission,对一些敏感API的使用在安装时就可以给用户风险提
示,由用户确定是否安装,例如READ_CONTACTS为读取通讯录数据权限。权限在AndroidManifest.xml文件里进
行设置,通过元素添加子元素,如下图所示
permission分为4个保护等级:normal,dangerous,signature,signatureorsystem。不同的保护级别代表程
序要使用此权限时的认证方式。
normal:只要申请就可以使用
dangerous:在安装时需要用户确认才可以使用,最经常使用的权限
signature:告诉android系统这个权限只能授予拥有同样数字签名并且定义了该权限的应用程序
signatureorsystem:需要开发者的应用和系统使用同一个数字证书,即需要系统或者平台签名,真实手机中的
系统签名只有厂商知道
应用程序也可以定制权限以保护自己的资源,当前ita应用程序想要访问一个应用程序的受保护资源时,就必须
通过它们自己的manifest文件请求适当的权限
(4)文件访问控制
因为安全沙箱的存在导致不同应用程序之间的数据(文件)是隔离的。在通过
getSharedPreferences(filename,operatingMode)
openFileOutput(filename,operatingMode)
openOrCreateDatabase(filename,operatingMode, SQLiteDatabase.CursorFactory)
等方法来创建一个新文件时,可以通过指定文件的存储方式operationMode来进行文件的访问控制,android文
件存储有以下4种方式:
Context.MODE_PRIVATE:默认操作模式,代表该文件是私有数据,只能被应用本身访问,在该模式下,写入的
内容会覆盖原文件的内容
Context.MODE_APPEND:代表该文件是私有数据,只能被应用本身访问,在该模式下,会检查文件是否存在,存
在就往文件追加内容,否则就创建新文件
Context.MODE_WORLD_READABLE:表示当前文件可以被其他应用读取
Context.MODE_WORLD_WRITEABLE:表示当前文件可以被其他应用写入。
除了使用Context.MODE_WORLD_READABLE/Context.MODE_WORLD_WRITEABLE标识位来使两个程序相互访问对方的
资源。还可以通过设置AndroidManifest.xml文件的manifest标签中的sharedUserId属性,来使得不同的应用程
序共用同一个用户ID,并且这些应用程序还使用同一个签名签署,在满足以上两个条件(共同的sharedUserID
,共同的签名)的情况下就可以实现不同应用程序相互资源的访问了,如下图所示
(5)ASLRandroid 4.1后才开始支持完整版功能
六、版权保护的区别
1. iOS
App store,采用FairPlay DRM保护商店下载应用
2. Android
(1)google play store,采用Android License Verification Library保护商店下载应用
(2)Amazon Appstore DRM
(3)其他
来源:CSDN
作者:May_zhang
链接:https://blog.csdn.net/May_zhang/article/details/47417389