2016-05-29 16:45:54 feng2qing 阅读数 4974

4G网络和Wifi虽然已经基本普及,但是在实际开发中,任然需要针对不同的网络环境给出回应,比如Wifi环境下要自动缓存视频,2G环境下可能只需要加载缩略图等等,开发者如何打开这些环境是接下来要说的

打开Xcode—> Open Developer Tools—>More Developer Tools

这里写图片描述

点击之后会跳转苹果开发者中心,并且登录,我们找到Hardware IO Tools for Xcode7,进行下载

没有开发者账号的点击:https://github.com/1170197998/Hardware_IO_Tools_for_Xcode_7

这里写图片描述

下载后得到安装包:

这里写图片描述

双击安装,需要输入电脑的登录密码,安装之后显示如下:

这里写图片描述

双击 Network Line Conditioner.prePane,会弹出系统偏好设置,并且多了这个:

这里写图片描述

双击它,弹出如下界面

这里写图片描述

在Profile里面选择网络环境

这里写图片描述

解释:

100% Loss: 断网

3G:3Gwang

DSL:Digital Subscriber Line,数字用户线路

Edge:Enhanced Data Rate for GSM Evolution,增强型数据速率GSM演进技术,是一种从GSM到3G的过渡技术

High Latency DNS:高延迟的DNS

Very Bad Network:很菜的网络

Wifi:wifi网络

注:模拟器的网络环境会随着设置的变化而变化,根本上是改变了电脑本身的网络环境


同样真机测试的时候也可以设置不同网络环境,打开设置,找到开发者选项:

这里写图片描述

找到Status

这里写图片描述

显示的列表和刚才是一样的

这里写图片描述

2015-12-18 15:21:04 wangruihit 阅读数 1359

真实的网络环境远比实验室复杂,在3G、4G、WiFi、等各种条件下,网络都不尽相同。

而网络模拟可以让我们在实验室事先测试好各个环境下我们的应用的表现情况,在音视频开发中也是必备技能。


网络环境模拟,一般需要模拟不同的带宽、丢包率、网络延迟这三种最重要的参数。

我们都知道可以通过Mac自带的ipfw命令来模拟这些参数,但是其实,我们还有更好的选择。

这个选择就是Hardware IO tools,这是苹果推出的开发者工具套件之一。通过图形化的界面可以很方便的模拟网络配置,

并在各个配置之间随意切换。


安装方法:

步骤一:打开Xcode,Open Developer Tools-> More Developer Tools,系统会跳转到下载界面,搜索Hardware IO Tools,下载。

步骤二:打开Network Link Conditioner PrefPane,并安装。

步骤三:安装完成之后就可以看到系统设置中出现了Network Link Conditioner,并且默认安装了七种配置,包括3G、Edge、Wifi、等,你可以

自己修改或者添加自定义的配置。




2018-10-24 10:48:37 gao2175 阅读数 390

宜信技术学院

现在很多iOS的app没有做任何的安全防范措施。今天我们就聊聊iOS开发人员平时怎么做才更安全。

 

一、网络方面

用抓包工具可以抓取手机通信接口的数据。以Charles为例,用Charles可以获取http的所有明文数据,配置好它的证书后就可以模拟中间人攻击,获取https加密前的明文数据。

先简要的说下什么是中间人攻击:

①客户端:“我是客户端,给我你的公钥” -> 服务端(被中间人截获)。

所以现在是:

客户端->中间人,

②然后中间人把消息转给服务端,也就是:

中间人->服务端。

③服务端把带有公钥的信息发送给客户端,但是被中间截获。所以是:

服务端-[服务端的公钥] ->中间人。

④中间人把服务端的公钥替换成自己的公钥,发送给客户端,声称是服务端的公钥:

中间人-[中间人的公钥] ->客户端

⑤客户端用得到的公钥加密,实际是用的中间人的公钥进行的加密,所以中间人可以用自己的私钥解密,获取原始数据,然后再用服务端的公钥对原始数据(或者修改原始数据内容)加密后发送给服务端。

 

这样中间人就可以获取到双方的通信数据,并可以制造虚假数据。

 

下面开始说如何防范:

1、SSL Pinning

SSL Pinning的原理就是把服务端的公钥存到客户端中,客户端会校验服务端返回的证书是否和客户端保存的一致,这样就避免了中间人替换证书进行的攻击。

SSL Pinning的实现比较简单,只需要把CA证书放入项目中,通过Security framework实现NSURLSession上的SSL Pinning。如果用的是AFNetworking,代码更简单一点:

图片 1.png

这样通过Charles抓包就会报错。

2.png

证书验证有可以只验证公钥(AFSSLPinningModePublicKey),也可以完全验证证书(AFSSLPinningModeCertificate)。

但是用SSL Pinning有个很严重的问题,就是如果证书有问题,只有发布新版本才能解决。如果新版本一直审核不通过,app的网络通信就全部挂掉了。

比如赛门铁克(Symantec)证书被google和iOS12不信任的问题。如果app内置了证书,就必须要重新发版。

 

2、接口内容进行加密

很多的app接口只对请求的参数进行加密和各种验证,而接口返回过来的数据就是明文。如果不用SSL Pinning来防止中间人攻击,也可以把接口返回的数据也进行加密,这样抓包工具抓到包后也依然不能破解。

比如微信,微信中的接口用的是http协议,但是内容全部进行了加密。

3.png  

现在常用的是对称加密,加密效率比较快。如果app里有的数据特别重要,还是要用非对称加密,非对称加密更安全,但是效率会比较慢。

 

二、日志

1、Swift日志

Swift中打印日志的语法可以用print,也可以用NSLog。但是尽量别用NSLog,因为Swift中用NSLog,系统日志中是能查到的。可以通过pp助手、iTools或者Xcode的Devices and  Simulators 来查看系统日志。

用print打印日志就不会出现在系统日志中。

 

2、OC日志

在release环境下不要输出NSLog日志。一般大家都会用宏定义解决,如下:

4.png

 

三、信息的存储

1、密钥

大部分的程序员喜欢直接把密钥放到宏或者常量里。

如:#define AES_KEY @“aaa123"

这样做很容易就可以被反编译出来。安全性比较差。可以用以下方法加强安全,增加破解的难度。

1.1、对密钥(A)进行加密后定义为宏(B),使用的时候进行解密得到密钥(A)。其中对密钥A加密的密钥为C。

因为在宏定义的时候我们如果定义成字符串,会直接存在data段,这样破解者很容易获取到。比较安全的做法是把C和B定义成uint8_t[]数组,这样每个字符就会放到text段的每个单独指令中。指令执行后生成字符串。这样就会很安全。

1.2、用一段长文本,按规则提取出里面的密钥,密钥是随机的。

在服务端和客户端定义一段长文本,app端随机生成起始位置和长度,把起始位置和长度进行移位等操作,生成相应的数字,对数字进行Base64编码,生成的字符串 传给服务端,服务端根据这个字符串 就能 解析出相关的密钥。

代码如下:

5.png

 这样只是增加了破解者获取密钥的难度,其实并不能完全阻止破解者获取。

2、Keychain

越狱的iPhone可以查看导出Keychain保存的信息。Keychains的内容存放在sqlite中,目录为:/private/var/Keychains。可以通过keychain-dump可以查看钥匙串里存放的的内容。

所以保存到Keychain的数据一定要是加密之后的数据。 

3、plist、sqlite

plist、sqlite可以直接在ipa安装文件中获取到,所以不要在这些文件中存放重要信息,如果要保存,就进行加密后再存放。

四、app加固

1、代码混淆

代码混淆就是把易读的类名、方法名替换成不易读的名字。常用的方法有宏替换和脚本替换。

比如本来方法名为:- (void)loadNetData; 进行代码混淆后,用class-dump导出头文件后会显示成修改后的方法名:- (void)showxhevaluatess;

2、用C语言

核心代码用C语言写,但是C语言的函数也可以被hook,比如用fishhook。开发人员可以用静态内联函数来防止hock,破解者就只能去理解代码的逻辑。

3、检测tweak

可以检测 /Library/MobileSubstrate/DynamicLibraries 下的 plist 文件里是否包含自己app的bundle id。如果包含,可以进行限制app的功能、提示该手机不安全 等。

来源:宜信技术学院   作者:何继昌

2014-05-30 15:02:15 potato512 阅读数 1060

多类型网络测试iOS开发

在iOS开发中,在测试时,应该根据不同类型的网络进行多样化测试,如使用WiFi,3G,2G等网络的情况。一般情况下,只能通过手机测试时才能进行多种类型的网络测试。

更多时候,我们应该也可以通过模拟器进行多种类型的网络测试。

其实我们的开发工具Xcode已经具备了这方面的功能。即“Network Link Connector”工具,如果没有的话,我们也可以自己下载并安装。

详细操作步骤如下。

步骤1 查看是否有安装“Network Link Connector”工具

打开系统偏好设置,查看是否存在,如下图所示



步骤2 如果没有的话即进入苹果开发网站进行下载

Xcode——Open Developer Tool——More Developer Tools…——进入苹果开发网站下载页面



步骤3 选中并下载

Network Link Connector”工具包含在“Hardware IO Tools”包中,找到并点击下载



步骤4 下载后进行安装

安装文件名称为“Network Link Conditioner.prefPane”



步骤5 安装后使用

安装后即可在系统偏好设置中找到“Network Link Connector”工具图标,点击打开并进行需要的设置。


5-1 相关设置如下图所示

5-1-1 开启或关闭

5-1-2 根据需要选择网络类型,如WiFi,3G等

5-1-3 同时可以自定义网络类型

5-2 开启后,在菜单栏会显示Menubar Adddon图标,如下图所示。



注意:开启并设置了相关网络类型后,电脑的网络使用也受设置的网络类型限制。因为这个网速限制是针对整个系统的,因此在测试完程序之后记得关掉网速限制。



模拟iOS网络环境

阅读数 2439

没有更多推荐了,返回首页