iOS客户端的安全问题

原文链接

总的来说,还是要看开发者比较在意哪方面的安全,才好考虑如何防护:

1、想要保证程序中的信息不被截取

几乎是不可能的,因为即使再加密,密文也总要变成明文供业务逻辑来使用,攻击者只要盯住这个点就能达到目标;

2、想保护服务器的资源

客户端在相当程度上只是一个UI展现,即使被破解也不是那么重要的,真正重要的是服务器端的资源,那么就要在网络层进行防护了。现在大家都比较喜欢用http,而且都集中喜欢使用AF、ASI等几个开源库,逆向者只要盯住这几个口,就能把来往的request+response全部获取,进而可以仿制一个客户端,此时服务器的资源也就全面开放了。同样的,使用AsyncSocket也是一回事。

此时有3种防护措施:

1)服务器控制,不允许同一IP/客户端频繁抓取数据;

2)对url加上token、timestamp,甚至url编码,虽然碰上高手还是不能100%安全,但是破解者想要达到目的,就需要考虑付出的精力是不是值得了;

3)传输数据加密,并且将加解密的代码层级加深,尤其是放到C或block函数中,这样又将安全等级提高了一级。

3、想保护程序不被伪造或克隆

克隆/伪造其实是件非常容易的事,甚至都不需要太多逆向工作,只要能把网络请求搞定,剩下的就是代码量、以及是否比被仿者做的更好的问题了。

总的来说,客户端没太多可保护的空间,它应该就是个业务展现和数据解析的工具,与其花精力想防这个防那个,不如把精力放在网络接口的保护上,尤其是加解密代码提取到C或block中。

以上只是笔者个人的一些经验,希望大家能多多补充。

附:微信的安全防护措施,笔者认为是比较值得学习的,他们的步骤是:

1、不在业务表现上做太多无用功

除了代码结构比较庞大之外,微信没有做特别的动作;

2、服务器控制

所有的决断性的动作由服务器控制,几乎不可能靠通过篡改客户端的代码来获取更大的权限。笔者曾经针对每天20个漂流瓶的限制尝试扩大权限,但是即使把本地代码逻辑放开,在超过20个瓶子之后,再捞回来的永远是海星,显然是服务器控制住了。

当然,本地LBS坐标是无法被服务器控制的,这也就是坐标穿越插件能起作用的根本原因。

3、网络数据加密

通过对网络接口的拦截,虽然能得到socket收取的二进制数据,首先是无法直接解密,其次是从那许多代码中找解密代码非常费劲,纵然加解密都能搞定,想伪造也十分麻烦,packet中包罗了相当多的信息,我估计就是把他们的代码开放给开发者,想理清这一部分都不是一件轻松的事情。

4、登录唯一性

即使能够伪造微信的请求,一旦登录获取数据,原账号就会被踢下线并且得到通知,这本身就是一个安全警告,说起来也算是服务器控制。

如果开发者对于安全性的设计都能达到微信这一级别,安全级别就是比较值得信赖的了,但是这也不表示就解不出来,只要逆向者的水平达到熟练程度以上(自然是越高越好),并且愿意投入大量精力在某个他们认为值得的app上,几乎都能攻的下来。

作者:Exia_L

链接:http://www.jianshu.com/p/c3b41c3f6692

來源:简书

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,328评论 19 139
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,176评论 25 709
  • 网络安全是指网络系统的硬件、软件及其系统中的数据受到保护,不因偶然的或者恶意的原因而遭受到破坏、更改、泄露,系统连...
    不吃土豆的洋芋阅读 8,429评论 0 42
  • 互联网的通信安全,建立在SSL/TLS协议之上。 本文简要介绍SSL/TLS协议的运行机制。文章的重点是设计思想和...
    拉肚阅读 7,678评论 0 6
  • 夜茶色褪闻人语,纷乱五光侵涩眉。 淡墨隐约山顶树,浅愁偶尔手中杯。 凭窗邀尽风相见,就火燃来烟自飞。 旧壁方寸悬宝...
    ChocOne阅读 1,482评论 0 1