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

iOS 代码安全&数据传输安全&本地存储安全

2016-12-06 11:57 501 查看

iOS 代码安全

iOS 安全攻防 系列

http://www.cocoachina.com/industry/20140211/7800.html

隐患

通过 class-dump 可以导出代码的头文件,从而进行解析

http://blog.csdn.net/msyqmsyq/article/details/51363659

应对方案

iOS 代码混淆

通过脚本对代码中的一些关键代码字符串进行加密处理,这样即使查看头文件,也会一头雾水。具体设计与实现:

http://blog.csdn.net/zm53373581/article/details/49053269

利用static关键字裁掉函数符号

如果函数属性为 static ,那么编译时该函数符号就会被解析为local符号。

在发布release程序时(用Xcode打包编译二进制)默认会strip裁掉这些函数符号

局限

当然这种方法也有局限性。正如你所知道的,static函数,只在本文件可见。

打破局限:

怎么让别的文件也能调到本文件的static方法呢? 在本文件建造一个结构体,结构体里包含函数指针。把static函数的函数指针都赋在这个结构体里,再把这个结构体抛出去。

关键代码函数写法。关键函数不要使用下面第一行的写法,第二行更好一些。

- (BOOL)isPasswordOk:(NSString*)password;
- (void)verifyPassword:(id)password;


第一行代码形式容易被 hook ,从而通过 method swizzling 直接更改代码的实现返回 yes

4. 将函数声明在结构体中,用函数指针成员的方式存储,这样编译后,只留了下地址,去掉了名字和参数表。

//.h 声明
#import

typedef struct _util {
BOOL (*isVerified)(void);
BOOL (*isNeedSomething)(void);
void (*resetPassword)(NSString *password);
}XXUtil_t ;

#define XXUtil ([_XXUtil sharedUtil])

@interface _XXUtil : NSObject

+ (XXUtil_t *)sharedUtil;
@end

//.m 文件
#import "XXUtil.h"

static BOOL _isVerified(void)
{
//bala bala ...
return YES;
}

static BOOL _isNeedSomething(void)
{
//bala bala ...
return YES;
}

static void _resetPassword(NSString *password)
{
//bala bala ...
}

static XXUtil_t * util = NULL;
@implementation _XXUtil

+(XXUtil_t *)sharedUtil
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
util = malloc(sizeof(XXUtil_t));
util->isVerified = _isVerified;
util->isNeedSomething = _isNeedSomething;
util->resetPassword = _resetPassword;
});
return util;
}

+ (void)destroy
{
util ? free(util): 0;
util = NULL;
}
@end


最后,根据Xcode的报错指引,把以前这样的调用

[XXUtil isVerified];


对应改成:

XXUtil->isVerified();


就可以了。

iOS 数据传输安全

隐患

http 与 https 协议,传输时都可能会被截获数据

1. http协议通过抓包可以获取

2. https协议通过 中间人攻击(Man-In-The-Middle Attack) 可以获取(Charles 通过安装 Mac 证书,且手机安装信任证书做到)。

3. 敏感信息明文传输,包括密码等

应对方案

密文传输敏感数据。

滴滴的登录做法(通过抓包解析出来的),采用 rsa 加密,用户登录时,首先请求 rsa 公钥,将密码加密后传输到服务器,服务器解密,然后加盐(salt),进行一定规则的加密,对比

改变数据传输格式

即使是密文传输也有风险,所以进行数据传输时,改变数据传输格式,前后端对字段名称进行一定的混淆,或者直接改变传输协议。

iOS 本地存储安全

隐患

数据库,Userdefaults , plist ,文件都有可能被破解出来。

应对方案

每个值进行存储前,都在前面加上一个随机字符串。

加密进行存储。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ios 安全