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

简介: 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月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
164 3
|
2月前
|
iOS开发 开发者
一键制作 iOS 上架 App Store 描述文件教程
一键制作 iOS 上架 App Store 描述文件教程
|
2月前
|
Android开发 iOS开发 开发者
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
App备案-iOS云管理式证书 Distribution Managed 公钥及证书SHA-1指纹的获取方法
243 0
|
2月前
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
37 0
如何解决iOS16系统app首次启动总是弹出允许粘贴提示框问题
|
2月前
|
大数据 测试技术 数据库
ios app性能分析
ios app性能分析
22 2
|
2月前
|
机器学习/深度学习 人工智能 安全
探索Android与iOS平台的安全性:一场永无止境的较量
【5月更文挑战第31天】在数字时代,移动操作系统的安全性成为了全球用户关注的焦点。本文将深入探讨Android和iOS这两大主流平台的安全机制,分析它们的安全特性、面临的挑战以及未来的发展趋势。通过比较研究,我们将揭示这两个系统在保护用户数据和隐私方面的不同策略和成效。
|
2月前
|
移动开发 网络协议 Linux
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
We discovered one or more bugs in your app when reviewed on iPhone and iPad running iOS 14.1
38 0
|
2月前
|
定位技术 开发工具 iOS开发
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
ios9定位服务的app进入后台三分钟收不到经纬度,应用被挂起问题及解决方案
26 0
|
2月前
|
iOS开发 网络架构 UED
ios app的分类与本质,感想
ios app的分类与本质,感想
26 0
|
2月前
|
存储 安全 API
app的安全性设计策略
app的安全性设计策略
22 0