iOS APP 安全测试
1、ipa包加壳
首先,我们可以通过iTunes 下载 AppStore的ipa文件(苹果 把开发者上传的ipa包 进行了加壳再放到AppStore中),所以我们从AppStore下载的ipa都是加壳的,所以不能直接用来反编译。
得到ipa文件 可以分析APP 里包含的一些资源,如:图片、plist文件、静态wap页、.bundle 等。
所以不要 在plist文件、项目中的静态文件中 存储关键的信息,如果要保存,记得 对称加密(这样可以增加破解的难度)。
如果是越狱的手机,从 手机上的PP助手下载的ipa包 都是 脱壳之后的,可以直接用来反编译。
我们可以用软件 查看 APP的沙盒,查看里面存储的 文件:sqlite、plist(NSUserdefault会存到Library下的Preferences中 的 plist文件中)、图片等,NSUserdefault 中不要保存关键信息,如果要保存,还是加密吧。。sqlite也是这样子的。
iOS 8.3之前 不越狱的手机也可以 直接用MAC上的PP助手、iTool 来查看 任何APP的沙盒(系统APP除外)。iOS 8.3之后就不行了。
越狱手机都可以查看任意APP的沙盒,包括系统APP的沙盒。还有iOS的系统目录等。
越狱手机直接用PP助手下载的就是 脱壳的ipa,所以不用再脱了。对AppStore下载的ipa包 可以用工具对加壳的ipa 进行脱壳,再用IDA、Hopper 进行反编译,进行分析 ,可以得到 近乎易懂的 伪代码。但是反编译后的代码 要 一个方法一个方法的去分析,类似面向过程编程。。当然也有工具 去提取 项目中的所有.h文件。不过 反编译 终归是个 耐心的活,急躁的人容易砸电脑。
所有的APP都是可以反编译的,所以 很关键的数据 最好通过接口获取。
那么接口如何保证安全呢。首先用HTTPS,虽然HTTPS已经很安全了,但是数据也是有可能被破解的,这个后面会介绍。。所以 接口一定要自己加密。
非对称加密(RSA)现在 还是没有办法破解的,但是因为 非对称加密的效率低,所以很少有企业将所有的接口都用非对称加密。
接口如果用对称加密,密钥 放到代码里 是能被反编译出来的。如果你的 APP的安全性很高,就不要把密钥 写到代码里。
可以这样处理:
先通过非对称加密的接口 获取密钥,然后 再在 后面的 接口通信中 用这个密钥进行加密。这样做 就类似 HTTPS 的简化版实现了。安全性很高。目前应该 是不能破解的。
根据APP的安全性,也可以把 关键数据 写在代码里,可以保存的是加密后的数据。比如,我给一个变量赋值:U2FsdGVkX1+rN+sgpLmOYTqoVhRRerZj9oobZAIPzjo=,你不知道 我这个字符串解密后是 123456,我只是使用的时候才解密处理用。
这样也只是增加了黑客获取关键数据的难度。
密钥要定期更换。比如 3个月 或半年换一次,如果密钥是从接口通过非对称加密 获取的,直接修改服务端就可以了。
如果密钥是写在代码里的。就等APP升级新的版本的时候,新版本的APP和其对应的接口版本 都 修改为新的密钥 就可以了。
旧的接口版本和APP版本还用以前的密钥,等强制更新的时候才会失效。
如果一个APP 一个密钥用上几年都不变 ,是很危险的。离职的人员都可以直接用以前 的代码 来获取相关的数据。特别是 支付相关的,有的服务端甚至没有 去校验支付的金额或其他数据,导致 离职人员用1分钱 可以买到 任何价格的 线上产品(服务端这种在线上环境留后门的安全性问题,我是真的遇到有人这么搞)。。
最好能 进行 代码混淆,能增加反编译的难度,当然只是增加了难度,还是能破解的。但是 代码混淆 的 性价比是很高的,就是你这边付出了 一点时间,而黑客 就要多付出几十倍 的时间。。其实 接口 自己加密 的性价比也很高。
接口返回的数据 最好也进行 加密。比如,现在大家都连我的热点,或者代理服务器,我是有可能 直接 获取你的APP的 HTTPS 解密后的json数据(如何获取相见《逆向工程》)。当然,如果你觉得 你的APP返回的json数据都是 不重要的,也可以不对数据进行加密。
像微信、QQ、支付宝这种 安全性高的,通信两边的数据 收发 都 应该 进行加密的。
像HTTPS本身 是否有漏洞这种我们就不去说了。就 去年iOS的AFNetworking 漏洞事件,完全是 代码的问题。虽然不是HTTPS的安全机制的问题。但是 黑客还是能很容易拿到HTTPS解密后的数据。
去年iOS的AFNetworking曝SSL漏洞 就涉及2.5万个APP。 有的银行的APP,只用了HTTPS,通信都不加密,就很容易拿到明文数据了。有的APP里的各种数据都 采用复杂的加密算法,破解人员看到都烦,去破解这个APP的时间还不如去搞其他的几个APP。
HTTPS 本身是安全的。但是数据还是可能被破解。所以 不要觉得 我只用HTTPS 就安全了。理论上 说任何 的 协议、代码都是可能有漏洞的,只是有的现在 还没被发现或破解,并不代表一直不能被破解。。
10、敏感信息安全加密
黑客不会 去一个手机一个手机的 把沙盒数据 拿出来 来看每个用户的数据(黑客也不可能拿到你的手机)。但是如果黑客捡到 你的手机 ,都不用登陆微信 就可以 通过微信APP的沙盒 拿到你和小三的偷情聊天记录、能拿到你的银行卡号,你的手机号(很多APP都把手机号、银行卡号、聊天记录 明文保存在沙盒里)。。你是不是会觉得微信 怎么这么low。我们只是拿微信举个例子,微信还不会这么low。
黑客最主要的还是通过网络来获取 他们想要的数据(网络的安全级别是最高的)。如果恰好 你的APP 加密密钥 明文 保存到了沙盒里 或者 你的 数据通信 还没有进行加密,恭喜你,你的数据和裸奔没啥区别。。
有人说:“我就做了个聊天的APP,没啥机密信息。再说 大家连的都是 公司的wifi、4G网络,不会有问题的,所以我的通信才不加密,麻烦。”
举个搞笑的栗子:
你现在在飞机场,连着免费wifi,正在和副总裁在微信里 谈着 价值100个亿的创意的时候,聊天记录已经被 黑客 抓包获取 ,然后卖给竞争对手了。。(只是举个例子,微信的加密是相当安全的,微信很多的通讯还是用的HTTP,但是就算你拿到他们数据,也是无法解密的。这里举例用微信,只是为了方便大家理解。免费wifi确实有可能是黑客设的坑,新闻上经常报道)。
所以不要让自己的数据裸奔。。。
12、代码调试信息安全管理
代码方面:
12.1、在release环境下 NSLog 不要打印日志 否则iOS系统日志里都可以查看到,在.pch文件中加下面的几行代码就可以解决。很早大家都这么做了。
1 #ifdef DEBUG
2 #define NSLog(...) NSLog(__VA_ARGS__)
3 #define debugMethod() NSLog(@"%s", __func__)
4 #else
5 #define NSLog(...)
6 #define debugMethod()
7 #endif
现在很多APP的部分页面开始使用 Swift,在Swift 文件中是允许用 NSLog 的语法来打印,但是 不要这么做,因为 这样 就会导致这段代码在 release环境 中也可以正常输出。通过 PP助手、iTools,可以直接 查看 iOS的系统日志。也可以直接 通过Xcode-Window-Devices - 点最下面的向上的小箭头,来看日志。
所以Swift中打印 还是用 print吧。
12.2、AFNetworking 的 allowInvalidCertificates 属性 要设置成 false,validatesDomainName属性 设置成true。否则 HTTPS通信就可以被解密。这块涉及到AFnetworking 去年的通信漏洞 就不详述了。
但是一般开发的 测试环境 的HTTPS 不是CA颁发的,而是自签名证书,访问的也不是域名,而是IP。所以可以在测试环境 忽略证书和域名,代码如下:
1 #ifdef DEBUG
2 manager.securityPolicy.allowInvalidCertificates = YES;
3 manager.securityPolicy.validatesDomainName = NO;
4 #endif
像上文中提到的 接口模拟HTTPS 进行通信,基本上是破解不了的。非对称加密毕竟还是 很安全的。
黑客也是有时间成本的,有性价比的。文中多次 写到,可以增加破解的难度,不是这样做了 就一定 不会被破解。
有人会觉得 在 代码中 加密了 反正也 能被破解,那还加啥密,反正没啥卵用。(比如 关键数据 加密 后 存到代码里)
打个比方:我装个防盗门 反正也防不住贼,干脆...就别装门了,反正也没啥卵用。
再比如:有几个房间放着同样价值的东西(账户数据、聊天数据等)。但这几个房间,有的是全封闭防炸弹的,有的就只是一个木门,有的甚至门都是开着的,你会选择哪个。。
这就像为什么现在 iOS 系统的越狱速度越来越慢,不是说越狱人员的水平变低了,而是现在越狱的用户越来越少,像盘古这种公司通过越狱获得的盈利也越来越少了,自然投入的精力就会变少。
关键数据加密后,存到代码里,这样总比你直接把明文保存到代码中更难破解,我们要做的是让黑客知道,你要来惹我,你就必须付出更多的时间和精力。
iOS APP 安全测试的更多相关文章
- iOS App稳定性指标及监测
一个App的稳定性,主要决定于整体的系统架构设计,同时也不可忽略编程的细节,正所谓"千里之堤,溃于蚁穴",一旦考虑不周,看似无关紧要的代码片段可能会带来整体软件系统的崩溃.尤其因为 ...
- iOS app测试的福音--TestFlight使用说明
Here's What's New: Invite up to 1,000 external testers using just their email address Easy to use Te ...
- app自动测试-微信(iOS)-web-1
appium 是一个用于app自动测试的工具.目前支持测试iOS, Android, Windows上的app.(github: https://github.com/appium/appium) 其 ...
- ios app真机测试到上架App Store详细教程-必看
详细操作地址 http://www.applicationloader.net/blog/zh/88.html 苹果iOS APP真机调试测试和上架App Store视频教程 优酷 http://v. ...
- iOS app内存分析套路
iOS app内存分析套路 Xcode下查看app内存使用情况有2中方法: Navigator导航栏中的Debug navigator中的Memory Instruments 一.Debug navi ...
- iOS 开发 -----公司测试打包上传流程
打包iOS应用程序 如果想要将做的iOS应用程序安装到自己的iOS设备上测试.或者安装到别人的iOS设备上,或者想发布到App Store中,先要给应用签名.签名就要有证书,这就需要申请证书的过程了. ...
- iOS App上架流程(2016详细版)
iOS App上架流程(2016详细版) 原文地址:http://www.jianshu.com/p/b1b77d804254 感谢大神整理的这么详细 一.前言: 作为一名iOSer,把开发出来的Ap ...
- 用Model-View-ViewModel构建iOS App(转)
转载自 Model-View-ViewModel for iOS [译] 如果你已经开发一段时间的iOS应用,你一定听说过Model-View-Controller, 即MVC.MVC是构建iOS a ...
- 用Model-View-ViewModel构建iOS App
如果你已经开发一段时间的iOS应用,你一定听说过Model-View-Controller,即MVC.MVC是构建iOS App的标准模式.然而,最近我已经越来越厌倦MVC的一些缺点.在本文,我将重温 ...
随机推荐
- 【Algorithm | 链表】单链表“环”、“环的起点”、“环的长度”问题
参考资料 • Floyd判圈算法 { 链接 } • 单链表“环”.“环的起点”.环的长度”问题 { 链接 } 链表环的问题 一.判断链表有换 使用两个指针slow和fast.两个指针开始时均在头节点处 ...
- [颜色知识] 潘通色卡、CMYK、RGB、 ARGB...
潘通色卡C结尾的色号都是RGB色系的,而CMYK是印刷系的,两者不能通用的,所以,不能完全对等进行转换 Pantone Colors [色卡]PANTONE潘通色卡C面颜色http://blog.si ...
- Pycharm里面使用PIL库之后,为什么调用Image的方法不能弹出代码提示,怎样能让代码提示弹出?
之前也碰到了这个问题,安装了pillow后没有代码提示,最后查了半天,发现问题原来非常简单,解决方法也很无厘头. 之所以没有代码提示,仅仅是因为Pycharm没法判断Image.open()返回的对象 ...
- json文本和json对象之间的转换
在数据传输过程中,json是以文本,即字符串的形式传递的,而JS操作的是JSON对象,所以,JSON对象和JSON字符串之间的相互转换是关键.例如: //JSON字符串: var str1 = '{ ...
- Zookeeper笔记(一)初识Zookeeper
为什么需要Zookeeper Zookeeper是一个典型的分布式数据一致性的解决方案,分布式应用程序可以基于它实现诸如数据发布/订阅.负载均衡.命名服务.分布式协调/通知.集群管理.Master选举 ...
- ubuntu16.04下搜狗输入法异常
问题描述: 搜狗输入法出现异常, 提示: 删除 .config/Sougou-PY 文件后重启 解决方案: google后发现,搜狗拼音输入法使用 fcitx 框架. 发现系统同时安装了ibus框架 ...
- Kubernetes核心概念总结
目录贴:Kubernetes学习系列 1.基础架构 1.1 Master Master节点上面主要由四个模块组成:APIServer.scheduler.controller manager.etcd ...
- poj2184 Cow Exhibition【01背包】+【负数处理】+(求两个变量的和最大)
题目链接:https://vjudge.net/contest/103424#problem/G 题目大意: 给出N头牛,每头牛都有智力值和幽默感,然后,这个题目最奇葩的地方是,它们居然可以是负数!! ...
- HDU 1051 Wooden Sticks 造木棍【贪心】
题目链接>>> 转载于:https://www.cnblogs.com/Action-/archive/2012/07/03/2574800.html 题目大意: 给n根木棍的长度 ...
- hdu 1251:统计难题[【trie树】||【map】
<题目链接> 统计难题 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 131 ...