iOS APP 如何做才安全

iOS 如何做才安全:


1、首先,我们可以通过iTunes下载 AppStore的ipa文件(苹果 把开发者上传的ipa包 进行了加壳再放到AppStore中),所以我们从AppStore下载的ipa都是加壳的,所以不能直接用来反编译。


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


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


如果是越狱的手机,从 手机上的PP助手下载的ipa包 都是 脱壳之后的,可以直接用来反编译。


2、我们可以用软件查看APP的沙盒,查看里面存储的文件:sqlite、plist(NSUserdefault会存到Library下的Preferences中 的 plist文件中)、图片等,NSUserdefault 中不要保存关键信息,如果要保存,还是加密吧。。sqlite也是这样子的。


iOS 8.3之前不越狱的手机也可以直接用MAC上的PP助手、iTool 来查看任何APP的沙盒(系统APP除外)。iOS 8.3之后就不行了。


越狱手机都可以查看任意APP的沙盒,包括系统APP的沙盒。还有iOS的系统目录等。


3、越狱手机直接用PP助手下载的就是脱壳的ipa,所以不用再脱了。对AppStore下载的ipa包可以用工具对加壳的ipa进行脱壳,再用IDA、Hopper 进行反编译,进行分析 ,可以得到近乎易懂的伪代码。但是反编译后的代码要一个方法一个方法的去分析,类似面向过程编程。。当然也有工具去提取项目中的所有.h文件。不过反编译终归是个 耐心的活,急躁的人容易砸电脑。


4、所有的APP都是可以反编译的,所以 很关键的数据 最好通过接口获取。


那么接口如何保证安全呢。首先用HTTPS,虽然HTTPS已经很安全了,但是数据也是有可能被破解的,这个后面会介绍。。所以接口一定要自己加密。


非对称加密(RSA)现在还是没有办法破解的,但是因为非对称加密的效率低,所以很少有企业将所有的接口都用非对称加密。


接口如果用对称加密,密钥放到代码里是能被反编译出来的。如果你的 APP的安全性很高,就不要把密钥写到代码里。


可以这样处理:


先通过非对称加密的接口获取密钥,然后再在后面的接口通信中用这个密钥进行加密。这样做就类似 HTTPS 的简化版实现了。安全性很高。目前应该是不能破解的。


5、根据APP的安全性,也可以把关键数据写在代码里,可以保存的是加密后的数据。比如,我给一个变量赋值:U2FsdGVkX1+rN+sgpLmOYTqoVhRRerZj9oobZAIPzjo=,你不知道 我这个字符串解密后是 123456,我只是使用的时候才解密处理用。


这样也只是增加了黑客获取关键数据的难度。


6、密钥要定期更换。比如3个月或半年换一次,如果密钥是从接口通过非对称加密获取的,直接修改服务端就可以了。


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


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


如果一个APP 一个密钥用上几年都不变 ,是很危险的。离职的人员都可以直接用以前的代码来获取相关的数据。特别是支付相关的,有的服务端甚至没有去校验支付的金额或其他数据,导致离职人员用1分钱可以买到任何价格的线上产品(服务端这种在线上环境留后门的安全性问题,我是真的遇到有人这么搞)。。


7、最好能进行代码混淆,能增加反编译的难度,当然只是增加了难度,还是能破解的。但是代码混淆的性价比是很高的,就是你这边付出了 一点时间,而黑客就要多付出几十倍的时间。。其实接口自己加密的性价比也很高。


8、接口返回的数据最好也进行加密。比如,现在大家都连我的热点,或者代理服务器,我是有可能直接获取你的APP的 HTTPS 解密后的json数据(如何获取相见《逆向工程》)。当然,如果你觉得你的APP返回的json数据都是不重要的,也可以不对数据进行加密。


像微信、QQ、支付宝这种安全性高的,通信两边的数据收发都应该进行加密的。


9、像HTTPS本身是否有漏洞这种我们就不去说了。就去年iOS的AFNetworking 漏洞事件,完全是代码的问题。虽然不是HTTPS的安全机制的问题。但是黑客还是能很容易拿到HTTPS解密后的数据。


去年iOS的AFNetworking曝SSL漏洞就涉及2.5万个APP。 有的银行的APP,只用了HTTPS,通信都不加密,就很容易拿到明文数据了。有的APP里的各种数据都 采用复杂的加密算法,破解人员看到都烦,去破解这个APP的时间还不如去搞其他的几个APP。


HTTPS 本身是安全的。但是数据还是可能被破解。所以不要觉得我只用HTTPS 就安全了。理论上说任何的协议、代码都是可能有漏洞的,只是有的现在 还没被发现或破解,并不代表一直不能被破解。。


10、黑客不会 去一个手机一个手机的 把沙盒数据 拿出来 来看每个用户的数据(黑客也不可能拿到你的手机)。但是如果黑客捡到你的手机 ,都不用登陆微信  就可以通过微信APP的沙盒拿到你和小三的偷情聊天记录、能拿到你的银行卡号,你的手机号(很多APP都把手机号、银行卡号、聊天记录 明文保存在沙盒里)。。你是不是会觉得微信 怎么这么low。我们只是拿微信举个例子,微信还不会这么low。


11、黑客最主要的还是通过网络来获取他们想要的数据(网络的安全级别是最高的)。如果恰好你的APP加密密钥明文保存到了沙盒里或者你的数据通信还没有进行加密,恭喜你,你的数据和裸奔没啥区别。。


有人说:“我就做了个聊天的APP,没啥机密信息。再说大家连的都是公司的wifi、4G网络,不会有问题的,所以我的通信才不加密,麻烦。”


举个搞笑的栗子:


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


所以不要让自己的数据裸奔。。。


12、代码方面:


  • 在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 系统的越狱速度越来越慢,不是说越狱人员的水平变低了,而是现在越狱的用户越来越少。


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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值