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之本地数据存储安全
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)(转)
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)
- iOS本地数据安全存储
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, Keychain,CoreData, Sqlite, Plist 文件)
- iOS应用程序安全(20)-本地数据存储及其安全性(NSUserDefaults, CoreData, Sqlite, Plist 文件)
- ios开发:NSKeyedUnarchiver,数据序列化,本地存储
- iOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- 第四章:iOS应用漏洞利用 ——4.4 Keychain数据存储和安全
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- ios后台处理数据存储线程的代码
- IOS中NSUserDefaults的用法(轻量级本地数据存储) (转)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- iOS本地存储的代码实现
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- IOS中NSUserDefaults的用法(轻量级本地数据存储)
- 【美女那些图】iOS开发技术分享(1)— iOS本地数据存储
- iOS开发技术分享(1)— iOS本地数据存储