> 在移动互联网快速发展的今天,iOS应用犹豫直接运行在用户的手机上,与运行在服务器的后台服务相比,更有可能被黑客攻击。本文接下来将从三个方面概述iOS移动应用在安全方面所面临的挑战及应对措施。 —— 以上摘抄自《iOS开发进阶》 # 16.2 网络完全 黑客可能会在公共场所设置一些公共热点,一旦你连接上这个热点,或者黑客连接上了你所在wifi局域网,那么黑客就可以通过抓包的方式抓取到你通过网络传输所传递的信息。(这并不是一个高深技术,网络上提供了很多免费的抓包工具)。 在发生了以上情况以后,那么不管你是使用的http还是https,用的是get还是post传输方式,是讲数据隐藏在header中也好,抓包都是可以毫无难度的抓取到你的数据,那么这个时候采用明文来传输密码就是一个非常不安全的事情了。 为了解决这个问题,我们必须对我们所传输的关键性数据进行加密,你可以选择RSA加密(非对称加密)、DES(对成加密)等方式对你的密码进行加密,在服务器端拿到数据以后再通过约定好的方式进行解密。一般来说服务器端在拿到密码等敏感性数据以后,需要对密码进行加盐以及求md5之后再进行存储,而不会直接存储明文,这是为了确保就算黑客攻陷了服务器端,也照样拿不到密码。 RSA、DES等加密方式在网络上有很多教程,这里就不多做介绍了。除了这些加密方式之外,你也可以在开发工程中自己约定一些简单的加密方式,如映射加密等方式,自己约定映射表,一来加密方式简单,二来黑客也较难能够破解。(就看你的数据到底值不值得黑客花功夫去破解了) # 16.3本地文件和数据安全 ## 16.3.1 程序文件的安全 我们使用iOS原生语言(OC、Swift)编写的代码在编译之后是转化为了二进制文件中,此类代码想要完全反编译比较困难(有一定成本),然而由于现在Hybird的兴起,很多界面是由web实现的,而此类文件是豪无安全所言的。 我们将从iTunes下载的ipa文件后缀改为.zip 之后就能进行解压,解压后我们可以看到一个功能文件,右击查看内容,我们就可以看到所有的资源文件(图片、html、css、js),也就是说若是我们不采取手段那么我们的js文件将赤裸裸的暴露在所有人的目光之下,那么js文件就有可能暴露出我们的借口信息,以及调用逻辑,利用这些接口黑客完全可能用来做任何事情。 解决js文件暴露的问题我们还是得对js进行混淆,此类方法在网络上到处都是,百度“js混淆”我们就可以搜索出一大堆在线工具,解决方法虽然简单,但是起的作用的确不小。 ## 本地数据安全 如上一节所言,不仅js文件会暴露,我们的.plist后缀的文件也会发生暴露,在一些游戏类app中可能会将一些角色信息(如能量值 攻击值)等信息保存在.plist 中,修改此文件就可以达到修改游戏数据的目的。 为了防止这个问题,我们不能将这些敏感数据存储到.plist 文件中。 # 16.4 源代码安全 通过file、class-dump、these、tool等工具,黑客可以分析编译之后的的二进制文件,其中IDA的威胁最大。 IDA是一个收费的反汇编工具,对于Objective-C代码,他通常可以反汇编到可以方便阅读的程度,这对于程序的安全性也是一个很大的危害。应用通过阅读源码,黑客可以更加方便的分析出应用的通信协议和数据加密方式。 获得反汇编的代码后,由于软件的内部逻辑相对汇编代码来说可读性强了很多,黑客可以用来制作软件的注册机,也可以更加方便的破解网络通信协议,从而制作出机器人(“僵尸”)账号。在最极端的情况下,黑客可以将反汇编的代码稍加修改,植入木马,然后重新打包发布在一些越狱渠道上,这将对用户产生巨大的危害。 对于IDA 这类工具,我们的应对措施就比较少了。除了可以用一些宏来简单的混淆类名之外,我们也可以将关键的逻辑用纯C实现。例如微信 的iOS端的通讯底层,就是用C实现的。这样的方式除了能够保证通讯协议安全外,也可以在iOS和Andrid等多个平台使用同一套底层通讯代码,达到复用的目的。