您的位置:首页 > 移动开发 > IOS开发

关于iOS加壳加固的问题

2017-08-30 18:30 351 查看
博客一年都没怎么更新了,都快成荒地了,纪念那些年一起努力的码农们~

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

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

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

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

本地数据加密:

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

URL编码加密:

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

网络传输数据加密:

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

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

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

程序结构混排加密:

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

先写到这里吧,有时间再补充。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios加固 加壳