iOS常规知识点:如何确保APP的安全性

本文涉及的产品
密钥管理服务KMS,1000个密钥,100个凭据,1个月
简介: iOS常规知识点:如何确保APP的安全性

常常被大家忽视。

iOS 如何做才安全:

1、首先,我们可以通过软件 下载

AppStore的ipa文件(苹果 把开发者上传的ipa进行了加壳再放到AppStore中),

得到ipa文件

可以分析APP 里包含的一些资源,如:图片、plist文件、静态wap页、.bundle 等。

所以不要

在plist文件、项目中的静态文件中 存储关键的信息,如果要保存,记得加密(这样可以增加破解的难度)。

2、我们可以用软件

查看 APP的沙盒,查看里面存储的 文件:sqlite、plist(NSUserdefault会存到Library下的Preferences中 的

plist文件中)、图片等,NSUserdefault 中不要保存关键信息,如果要保存,还是加密吧。。sqlite也是这样子的。

3、 用 工具

对加壳的ipa 进行脱壳(越狱手机 直接用PP助手下载的就是 脱壳的ipa),再用IDA、Hopper 进行反编译,进行分析 ,可以得到 近乎易懂的 伪代码。

所以 不要在 代码

中保存关键信息,比如接口通信中 AES加密的密钥,可以通过接口获取 这些关键数据。

如果要保存关键数据(比如:密钥

等),可以保存加密后的关键数据,运行的时候进行解密获取真实的数据。这样可以增加破解的难度。

密钥要定期更换。比如

3个月 或半年换一次,如果密钥是从接口获取的,直接修改服务端就可以了。

如果密钥是写在代码里的。就等APP升级新的版本的时候,新版本的APP和其对应的接口版本

修改为新的密钥 就可以了。旧的接口版本和APP版本还用以前的密钥,等强制更新的时候才会失效。

如果一个APP

一个密钥用上几年都不变 ,是很危险的。离职的人员都可以直接用以前 的代码 来获取相关的数据。特别是 支付相关的,有的服务端甚至没有

去校验支付的金额或其他数据,导致 离职人员用1分钱 可以买到 任何价格的 线上产品。。

最好能 进行

代码混淆,能增加反编译的难度,当然只是增加了难度,还是能破解的。

4、用https也是可以被抓包并解析的,所以网络通信

一定要用自己的加密方式 进行加密。

接口返回的数据

最好也进行 加密。

可以这么说:无论

你怎么做,理论上都是可以破解的,但是 破解人员也要考虑成本。。

有的银行的APP,只用了https,通信都不加密,很容易就拿到明文数据了。有的APP里的各种数据都

采用复杂的加密算法,破解人员看到都烦,去破解这个APP的时间还不如去搞其他的几个APP。

一、ipa文件

1、AppStore里的ipa包

可以通过 iTunes

下载到电脑。iOS8.3以下系统的非越狱的手机上,可以用MAC上的PP助手等软件,直接把手机上的ipa文件(包含沙盒里的存储文件)拷贝到电脑。

如果是越狱手机,都可以用PP助手、itools直接把ipa导出到电脑,并且可以用PP助手、iExplorer、itools这些工具

查看 iOS的系统目录。

MAC上安装

iExplorer软件,用iExplorer 可以看到 手机(非越狱也可以) 在 iTunes上备份的内容。

如果你在帮测试美女的手机

调试问题的时候, 在 iTunes上设置 “连接次iPhone时自动同步”(或者点击

备份到本地电脑),默认该手机上的照片、短信等内容都会备份到你的电脑上,用 iExplorer 就可以看到 这位 美女的隐私。

曾经有次不小心看到同事的隐私信息,所以现在都比较注意这块,避免引发误会。

2、拿到ipa文件后,解压缩,得到.app文件,右键显示包内容,可以看到里面的app中的图片、js、plist、静态H5页

等资源。

比如 你要

用微信里的默认表情包,解压微信的ipa包就可以获取到。

3、iOS的系统目录和MAC上的都类似(类unix系统)。iOS系统的目录图:

二、沙盒 中的数据

iPhone上

计算器的沙盒:

.app文件:应用程序本身的数据,打包时候的一些资源文件(如:图片、plist等文件)、可执行文件。这个目录不会被iTunes同步。

Documents

:存储不可再生 的关键数据。不会被iTunes同步

Library:保存配置文件和其他一些文件。NSUserDefault

会存储到 Library下的Preferences中 的 plist文件中。可以直接打开,所以 也不要在 NSUserDefault 中存一些

关键数据,或者 存储的时候 进行 AES等方式的加密。

Library/Caches可以用来保存可再生的数据,比如网络请求,用户需要负责删除对应文件。

这个目录(除了Library/Caches外)会被iTunes同步

tmp:临时文件。不需要的时候,手动将其内文件删除。(当应用不再运行的时候,系统可能会将此目录清空。)

这个目录不会被iTunes同步

存到沙盒的数据都是不安全的,关键数据一定

要做加密存储。

三、Reveal 工具:查看 任意APP 的UI结构

1、不越狱的手机

可以用 Reveal 来查看自己APP的UI结构。不能查看其他APP的UI结构。这里就不再描述了。

2、越狱手机

上可以查看 任何APP的UI结构。

在越狱的手机上,在 Cydia

搜索并安装 Reveal Loader,如果搜索不到。就

点下面的“软件源”,选择“BigBoss”,选择“全部软件包”,点右边R的字母,去一个个找到 Reveal

Loader,放心吧,你一定能找到的,我用的iOS7.1的系统测试的,没问题。

安装完成后,打开“设置”页面,下拉到最底部,点击“Reveal”

3、点击

Enabled Applictions 。然后选中 你想分析的APP。

4、确保iOS和OSX在同一个IP网段内。打开想分析的

APP,如果该APP已经启动,则关闭后再次启动

5、打开MAC上的

Reveal,选中 左上方列表里的 APP,比如QQ:

6、如果 Reveal

左上方 一直显示:No Connection。说明iPhone上的 Reveal Loader 没安装成功,需要配置一下。

首先从MAC上

用PP助手或 iTools 查看“文件系统(系统)”--》Library文件夹,看 Library文件夹下面有没有 RHRevealLoader

文件夹,如果没有,就 右键 新建文件夹,并修改名字为:RHRevealLoader。

在Mac下打开已经安装的Reveal,选择标题栏Help下的Show Reveal Library in Finder  下的 iOS library选项,将会显示如下界面:

将libReveal.dylib文件通过PP助手拷贝到刚才创建的RHRevealLoader文件夹下,就可以了。

然后

从手机上打开APP, 再 打开 MAC上的 Reveal 软件,左上方 就会出来 相关APP的选项。

再发个

淘宝中的天猫模块吧:

三、反编译工具:IDA

从AppStore下载的ipa都是加壳的(苹果

把开发者上传的ipa进行了加壳再放到AppStore中),加壳的ipa要先去壳,可以用clutch、dumpdecrypted、使用gdb调试 等解密去壳工具

如果你有越狱手机,可以直接

从 PP助手上下载ipa包,这个就是 脱壳后的。

现在 我们先反编译

自己的APP,通过Xcode打包的APP 都是没加壳的,可以直接用来反编译。

新建一个项目,在 ViewController

的 viewDidLoad 方法里 加 几句代码。

- (void)viewDidLoad {

[superviewDidLoad];

UILabel

*label = [[UILabel alloc] initWithFrame:CGRectMake(50, 70, 200, 100)];

label.text =@"CeShiLabel007";

label.backgroundColor = [UIColor redColor];

[self.view addSubview:label];

}

将项目 打包,生成

ipa文件,下面我们就用IDA分析一下 ipa。

将ipa文件 解压后

得到.app文件:

下载IDA,并打开:

下载IDA,并打开:

点击“New”按钮,选择刚才

解压的 .app文件。一路 点击“OK”或者“YES” 就可以了。

打开界面后,双击左侧的

viewDidLoad:

可以看出:代码中的

"CeShiLabel007" 字符串 完全可以反编译出来。所以尽量不要在代码里放一些 关键 的数据。可以通过接口来获取。或者

把 数据进行加密。

从上面的界面中

,按下键盘的F5,可以 把汇编转成C语言代码。可读性很高。。

你如果试了

就发现你的F5不管用啊,那是因为 F5是一个插件Hex-Rays.Decompiler 的快捷键,这个插件是收费的、收费的。

四、反编译工具:Hopper Disassembler

下载 Hopper

Disassembler软件。打开ipa解压的.app。 或者直接 把.app拖进去。

双击“viewDidLoad”:

可以看到 汇编代码, "CeShiLabel007" 字符串、setText方法 等。

点击右上角的

if(a) f(x)图标:

会弹出 类似源代码的

伪编码:

代码中可以清楚的看到

处理的逻辑。简单易懂,和看源代码没太大区别。。

下面

是我从越狱手机的PP助手上下载的 微信 的ipa  进行反编译,看下里面的 QQContactInfoViewController 页面 的

viewDidLoad方法里的代码 怎么写的,

截图:

如果 你把从

AppStore下载的 ipa包直接拖到 IDA或Hopper里,看到的就是乱码,刚才已经说过了。AppStore的ipa是加过壳的 。如图:

五、抓包-https

Charles

老版本和 新版本 抓取https 的配置 不一样。。

先看HTTP抓包:

打开Charles程序

查看Mac电脑的IP地址,如192.168.1.7

打开iOS设置,进入当前wifi连接,设置HTTP代理Group,将服务器填为上一步中获得的IP,即192.168.1.7,端口填8888

iOS设备打开你要抓包的app进行网络操作

Charles弹出确认框,点击Allow按钮即可

HTTPS

老版本抓包:

下载Charles证书http://www.charlesproxy.com/ssl.zip,解压后导入到iOS设备中(将crt文件作为邮件附件发给自己,再在iOS设备中点击附件即可安装;也可上传至dropbox之类的网盘,通过safari下载安装)

在Charles的工具栏上点击设置按钮,选择Proxy

Settings…

切换到SSL选项卡,选中Enable

SSL Proxying

这一步跟Fiddler不同,Fiddler安装证书后就可以抓HTTPS网址的包了,Charles

还 需要在上一步的SSL选项卡的Locations表单填写要抓包的域名和端口,点击Add按钮,在弹出的表单中Host填写域名,比如填

api.instagram.com,Port填443

HTTPS

新版本抓包:

Charles新版本

的 Proxy Settings 选项里是没有 SSL选项卡的。在左侧的域名上点右键:Enable SSL Proxying,就可以用了。

然后

点击APP,会看到HTTPS解密的json数据。如果接口返回的数据 本身进行了加密,那你看到的还是乱码。

六、https - iOS 的代码如何写

2015年4月末,网爆流行IOS网络通信库AFNetworking

SSL漏洞,影响银联、中国银行、交通银行在内的2.5万个IOS应用,我来看下 各种网络写法对应的问题。

1、信任任何证书。在 AFNetworking

中 定义 allowInvalidCertificates 为true,表示 忽略所有证书。

AFHTTPRequestOperationManager

* manager = [AFHTTPRequestOperationManager manager];

manager.securityPolicy.allowInvalidCertificates = YES;

这种情况下

用我们上面讲的方法,用Charles很容易 破解HTTPS加密的数据。

这种情况,一般是

因为 测试环境 用的不是 CA发的证书,需要忽略掉证书,所以把 allowInvalidCertificates 设为了

true。这个可以用 #ifdef DEBUG 来进行设置。

#ifdef

DEBUG

manager.securityPolicy.allowInvalidCertificates=YES;

#endif

2、信任证书管理机构(CA)颁发的证书。

CA颁发的证书,据说这类的证书只需50美元就能买到。此类问题出在AFNetworking

2.5.2及之前的版本,是AF的漏洞(详见新闻)。如果某IOS APP使用了此版本的开源通信库,在不安全Wifi网络中的,黑客

只要使用CA颁发的证书就可以对该APP的HTTPS加密数据进行监听或者篡改。

这个需要升级到 AFNetworking

最新版本,正好最新版本也声明兼容IPv6。

3、信任合法的证书、服务器和客户端双向认证。

这两种也都有办法破解,详见:Bypassing

OpenSSL Certificate Pinning in iOS Apps、http://drops.wooyun.org/tips/7838

总结:不要完全信任HTTPS的安全性。任何

的 协议、代码都是会有漏洞的。。关键的数据一定要自己进行加密。

黑客不会

去一个手机一个手机的 把沙盒数据 拿出来 来看每个用户的数据(黑客也不可能拿到你的手机)。

黑客

最主要的还是通过网络来获取 他们想要的数据(网络的安全级别是最高的)。如果恰好 你的APP 加密密钥 明文 保存到了沙盒里 或者 你的 数据通信

还没有进行加密,恭喜你,你的数据和裸奔没啥区别。。


相关文章
|
2月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:一场永无止境的较量
【10月更文挑战第3天】 本文旨在深入剖析安卓 (Android) 和iOS两大移动操作系统在安全性方面的显著差异,通过细致对比,揭示它们在隐私保护、数据加密、应用生态监管以及系统更新机制等关键领域的不同策略与实践。文章不仅从技术层面探讨了两者的设计理念差异,还结合了实际案例分析,展示了这些差异如何影响用户体验和数据安全。最终,旨在为读者提供一个全面的视角,理解在日益复杂的数字环境中,选择何种移动平台可能更符合其对安全性和隐私保护的需求。
|
3月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:一场永无止境的较量
在移动操作系统的世界中,安卓(Android)和iOS一直是备受关注的两大巨头。它们不仅在市场份额、用户体验和功能特性上竞争激烈,还在安全性这一关键领域展开了激烈的角逐。本文将深入探讨安卓与iOS在安全性方面的不同之处,分析两者在应对安全威胁时的策略和技术手段,并展望未来移动操作系统安全的发展趋势。通过对比分析,我们将揭示这场永无止境的较量中,究竟谁能更胜一筹,以及用户又该如何在两者之间做出明智的选择。
75 0
|
20天前
|
安全 生物认证 Android开发
深入探索iOS与Android操作系统的安全性差异
本文旨在通过对比分析iOS和Android两大主流移动操作系统在安全性方面的差异,揭示它们各自的安全机制、面临的挑战以及用户如何提升自身设备的安全保护。通过对系统架构、应用审核机制、数据加密方式及隐私政策的深入探讨,本文为读者提供了一个全面了解两大平台安全性的视角,并提出了实用的安全建议。
|
29天前
|
传感器 iOS开发 UED
探索iOS生态系统:从App Store优化到用户体验提升
本文旨在深入探讨iOS生态系统的多个方面,特别是如何通过App Store优化(ASO)和改进用户体验来提升应用的市场表现。不同于常规摘要仅概述文章内容的方式,我们将直接进入主题,首先介绍ASO的重要性及其对开发者的意义;接着分析当前iOS平台上用户行为的变化趋势以及这些变化如何影响应用程序的设计思路;最后提出几点实用建议帮助开发者更好地适应市场环境,增强自身竞争力。
|
1月前
|
安全 定位技术 Android开发
深入探索Android与iOS操作系统的安全性差异
【10月更文挑战第21天】 在当今数字化时代,智能手机已成为我们生活中不可或缺的一部分。其中,Android和iOS作为两大主流操作系统,各自拥有庞大的用户群体。然而,它们在安全性方面的表现却大相径庭。本文将深入探讨Android与iOS在安全机制、隐私保护以及应对恶意软件方面的差异,帮助读者更全面地了解这两个平台的安全特性。
|
1月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
2月前
|
安全 Android开发 数据安全/隐私保护
深入理解安卓与iOS的安全性差异
本文将深入探讨安卓和iOS两个主流操作系统在安全性方面的差异。通过分析两者的安全机制、隐私保护措施以及常见的安全漏洞,帮助开发者和用户更好地理解如何选择和保护自己的设备。同时,我们将提供一些实用的安全建议,以提升设备的安全性和隐私保护能力。
|
2月前
|
安全 网络安全 Android开发
探索安卓与iOS的安全性差异:一场永无止境的较量
在移动操作系统的浩瀚星海中,安卓与iOS如同双子星般璀璨夺目,各自引领着一方天地。它们不仅在用户界面设计、应用生态和设备兼容性上各有千秋,更在安全性这一核心领域展开了激烈的较量。本文旨在深入剖析安卓与iOS在安全性方面的显著差异,通过对比分析,揭示两者在隐私保护、系统更新、权限管理以及恶意软件防御等方面的不同策略与实践。同时,我们也将展望未来,探讨这两大操作系统在安全性上的发展趋势,以及它们如何应对日益严峻的网络安全挑战。
64 7
|
2月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性对比:哪个更适合企业环境?
在数字化时代,移动设备已成为企业日常运营不可或缺的一部分。选择合适的操作系统对于保障企业数据安全至关重要。本文深入分析了Android和iOS两大主流操作系统的安全性,从系统架构、安全功能、应用生态及更新频率四个维度进行全面比较,旨在为企业提供一个清晰的决策依据,帮助企业在Android的开放性与iOS的封闭性之间找到最适合自身需求的平衡点。
68 6
|
3月前
|
安全 Android开发 数据安全/隐私保护
探索安卓与iOS的安全性差异:技术深度分析与实践建议
本文旨在深入探讨并比较Android和iOS两大移动操作系统在安全性方面的不同之处。通过详细的技术分析,揭示两者在架构设计、权限管理、应用生态及更新机制等方面的安全特性。同时,针对这些差异提出针对性的实践建议,旨在为开发者和用户提供增强移动设备安全性的参考。
154 3

热门文章

最新文章