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

iOS 代码安全

iOS 安全攻防 系列
http://www.cocoachina.com/industry/20140211/7800.html

隐患

通过 class-dump 可以导出代码的头文件,从而进行解析
http://blog.csdn.net/msyqmsyq/article/details/51363659

应对方案

  1. iOS 代码混淆
    通过脚本对代码中的一些关键代码字符串进行加密处理,这样即使查看头文件,也会一头雾水。具体设计与实现:
    http://blog.csdn.net/zm53373581/article/details/49053269
  2. 利用static关键字裁掉函数符号
    如果函数属性为 static ,那么编译时该函数符号就会被解析为local符号。
    在发布release程序时(用Xcode打包编译二进制)默认会strip裁掉这些函数符号
    局限
    当然这种方法也有局限性。正如你所知道的,static函数,只在本文件可见。
    打破局限:
    怎么让别的文件也能调到本文件的static方法呢? 在本文件建造一个结构体,结构体里包含函数指针。把static函数的函数指针都赋在这个结构体里,再把这个结构体抛出去。
  3. 关键代码函数写法。关键函数不要使用下面第一行的写法,第二行更好一些。
 - (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. 敏感信息明文传输,包括密码等

应对方案

  1. 密文传输敏感数据。
    滴滴的登录做法(通过抓包解析出来的),采用 rsa 加密,用户登录时,首先请求 rsa 公钥,将密码加密后传输到服务器,服务器解密,然后加盐(salt),进行一定规则的加密,对比
  2. 改变数据传输格式
    即使是密文传输也有风险,所以进行数据传输时,改变数据传输格式,前后端对字段名称进行一定的混淆,或者直接改变传输协议。

iOS 本地存储安全

隐患

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

应对方案

  1. 每个值进行存储前,都在前面加上一个随机字符串。
  2. 加密进行存储。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值