关于iOS加壳加固的问题

博客一年都没怎么更新了,都快成荒地了,纪念那些年一起努力的码农们~

我查阅不少资料,也算是搬运工吧,把前辈的智慧加上我的理解,再次分享给大家。

首先,什么叫加壳,众说纷纭,五花八门,我认为加壳就是给整个程序或者程序中的某些部分加上一段“补充”代码。让除开发者之外的其他开发人员很难去读取代码,或者重签发布。还是很难理解???别着急,继续看就明白了。

对于iOS而言,加壳或者加固的方式主要有一下几种:

  1. 本地数据加密:对NSUserDefaults、sqlite存储文件数据加密,保护帐号和关键信息。
  2. URL编码加密:对程序中出现的URL进行编码加密,防止URL被静态分析。
  3.  网络传输数据加密:对客户端传输数据提供加密方案,防止通过网络接口的拦截获取。
  4. 方法体、方法名高级混淆:对应用程序的方法名和方法体进行混淆,保证源码被逆向后无法解析代码。
  5. 程序结构混排加密:对应用程序逻辑结构进行打乱混排,保证源码可读性降到最低。
本地数据加密:

这个是加固的基础,对于好的应用程序来说一般很少在本地存储用户的账户信息,即使存一般会存放在keychain中。另外,明文存储用户信息(特别是密码)是禁忌。

URL编码加密:

URL很容易被抓取到,无论get还是post,一旦被截获,很容易被分析出来。所以我们的URL尽量不要用简单的key、value来传递,当然加密解密URL过程会比较耗时,如果不是安全级别非常高的应用,URL加密行为只在一些关键接口中实现就可以了。当然HTTPS在很大程度上帮助开发者解决了这个问题。

网络传输数据加密:

这个与URL编码类似,但是主要针对数据进行加密,如AES、RSA等。

方法体、方法名高级混淆:

所谓的“加壳”更多开发者说的是这个层面,如一个方法 - (void) test:(id)args;加密后可能为 - (void)sdkfhdkfhskdf:(id)args;这种形式。这样,即使开发者通过逆向工具获取到方法列表,也很难去分析出方法的用途。

程序结构混排加密:

这种方式一般不被采用,原因是一旦打乱结构混排,对于开发者自己来说,可读性就降低了许多,影响开发者开发效率和二次开发。


先写到这里吧,有时间再补充。


  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值