【转】iOS-APP如何作才安全

iOS应用的安全性 经常被你们忽视。html

iOS 如何作才安全:算法

一、首先,咱们能够经过iTunes 下载 AppStore的ipa文件(苹果 把开发者上传的ipa包 进行了加壳再放到AppStore中),因此咱们从AppStore下载的ipa都是加壳的,因此不能直接用来反编译。sql

获得ipa文件 能够分析APP 里包含的一些资源,如:图片、plist文件、静态wap页、.bundle 等。编程

因此不要 在plist文件、项目中的静态文件中 存储关键的信息,若是要保存,记得 对称加密(这样能够增长破解的难度)。json

若是是越狱的手机,从 手机上的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 就安全了。理论上 说任何 的 协议、代码都是可能有漏洞的,只是有的如今 还没被发现或破解,并不表明一直不能被破解。。

 

十、黑客不会 去一个手机一个手机的 把沙盒数据 拿出来 来看每一个用户的数据(黑客也不可能拿到你的手机)。可是若是黑客捡到 你的手机 ,都不用登录微信  就能够 经过微信APP的沙盒 拿到你和小三的偷情聊天记录、能拿到你的银行卡号,你的手机号(不少APP都把手机号、银行卡号、聊天记录 明文保存在沙盒里)。。你是否是会以为微信 怎么这么low。咱们只是拿微信举个例子,微信还不会这么low。

 

十一、黑客 最主要的仍是经过网络来获取 他们想要的数据(网络的安全级别是最高的)。若是刚好 你的APP 加密密钥 明文 保存到了沙盒里 或者 你的 数据通讯 尚未进行加密,恭喜你,你的数据和裸奔没啥区别。。

有人说:“我就作了个聊天的APP,没啥机密信息。再说 你们连的都是 公司的wifi、4G网络,不会有问题的,因此个人通讯才不加密,麻烦。”

举个搞笑的栗子:

你如今在飞机场,连着免费wifi,正在和副总裁在微信里 谈着 价值100个亿的创意的时候,聊天记录已经被 黑客 抓包获取 ,而后卖给竞争对手了。。(只是举个例子,微信的加密是至关安全的,微信不少的通信仍是用的HTTP,可是就算你拿到他们数据,也是没法解密的。这里举例用微信,只是为了方便你们理解。免费wifi确实有多是黑客设的坑,新闻上常常报道)。

因此不要让本身的数据裸奔。。。

 

十二、代码方面:

.一、在release环境下 NSLog 不要打印日志 不然iOS系统日志里均可以查看到,在.pch文件中加下面的几行代码就能够解决。很早你们都这么作了。

复制代码
#ifdef DEBUG
#define NSLog(...) NSLog(__VA_ARGS__)
#define debugMethod() NSLog(@"%s", __func__)
#else
#define NSLog(...)
#define debugMethod()
#endif
复制代码

 

如今不少APP的部分页面开始使用 Swift,在Swift 文件中是容许用 NSLog 的语法来打印,可是 不要这么作,由于 这样 就会致使这段代码在 release环境 中也能够正常输出。经过 PP助手、iTools,能够直接 查看 iOS的系统日志。也能够直接 经过Xcode-Window-Devices - 点最下面的向上的小箭头,来看日志。

因此Swift中打印 仍是用 print吧。

.二、AFNetworking 的 allowInvalidCertificates 属性 要设置成 false,validatesDomainName属性 设置成true。不然 HTTPS通讯就能够被解密。这块涉及到AFnetworking 去年的通讯漏洞 就不详述了。

可是通常开发的 测试环境 的HTTPS 不是CA颁发的,而是自签名证书,访问的也不是域名,而是IP。因此能够在测试环境 忽略证书和域名,代码以下:

 

#ifdef DEBUG
        manager.securityPolicy.allowInvalidCertificates = YES;
        manager.securityPolicy.validatesDomainName = NO;
#endif

 

答疑:

像上文中提到的 接口模拟HTTPS 进行通讯,基本上是破解不了的。非对称加密毕竟仍是 很安全的。

 

黑客也是有时间成本的,有性价比的。文中屡次 写到,能够增长破解的难度,不是这样作了 就必定 不会被破解。

  

有人会以为 在 代码中 加密了 反正也 能被破解,那还加啥密,反正没啥卵用。(好比 关键数据 加密 后 存到代码里)

打个比方:我装个防盗门 反正也防不住贼,干脆 就别装门了,反正也没啥卵用。

 

再好比:有几个房间放着一样价值的东西(帐户数据、聊天数据等)。但这几个房间,有的是全封闭防炸弹的,有的就只是一个木门,有的甚至门都是开着的,你会选择哪一个。。
这就像为何如今 iOS 系统的越狱速度愈来愈慢,不是说越狱人员的水平变低了,而是如今越狱的用户愈来愈少,像盘古这种公司经过越狱得到的盈利也愈来愈少了,天然投入的精力就会变少。

 

 关键数据 加密 后 存到代码里 这样总比 你直接把 明文保存 到代码中,更难破解,咱们要作的是让黑客知道,你要来惹我,你就必须付出更多的时间和精力

相关文章
相关标签/搜索