iOS安全攻防(二十四):敏感逻辑的保护方案(1)
2014-09-28 15:57
302 查看
原文地址:http://blog.csdn.net/yiyaaixuexi/article/details/29210413
Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!
当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。
本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重写为C代码的办法。
也许,程序中存在一个类似这样的类:
@interface XXUtil : NSObject
+ (BOOL)isVerified;
+ (BOOL)isNeedSomething;
+ (void)resetPassword:(NSString *)password;
@end
被class-dump出来后,利用Cycript很容易实现攻击,容易被hook,存在很大的安全隐患。
想改,但是不想大改程序结构,肿么办呢?
把函数名隐藏在结构体里,以函数指针成员的形式存储。
这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。
改写的程序如下:
//XXUtil.h
#import <Foundation/Foundation.h>
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
//XXUtil.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();
就可以了。
是的,绝不费一点脑子。
Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!
当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。
本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重写为C代码的办法。
也许,程序中存在一个类似这样的类:
@interface XXUtil : NSObject
+ (BOOL)isVerified;
+ (BOOL)isNeedSomething;
+ (void)resetPassword:(NSString *)password;
@end
被class-dump出来后,利用Cycript很容易实现攻击,容易被hook,存在很大的安全隐患。
想改,但是不想大改程序结构,肿么办呢?
把函数名隐藏在结构体里,以函数指针成员的形式存储。
这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。
改写的程序如下:
//XXUtil.h
#import <Foundation/Foundation.h>
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
//XXUtil.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安全攻防(二十四):敏感逻辑的保护方案(1)
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- iOS安全攻防:static和被裁的符号表,Objective-C代码混淆,敏感逻辑的保护方案(1)
- iOS攻防 - (二)iOS应用敏感逻辑的保护方案
- iOS安全攻击和防御(24):敏感的保护方案逻辑(1)
- iOS安全攻防(十八):数据保护API
- iOS安全攻防:Fishhook、数据保护API以及基于脚本实现动态库注入
- [置顶] 敏感逻辑的保护方案:把函数名隐藏在结构体里,以函数指针成员的形式存储。
- iOS安全攻防(十八):数据保护API
- iOS安全攻防:Fishhook、数据保护API以及基于脚本实现动态库注入
- iOS安全攻防(十八):数据保护API
- 云计算环境需要整合的数据安全保护方案
- iOS安全攻防(九):使用Keychain-Dumper导出keychain数据
- 【链接】iOS安全攻防
- iOS安全攻防(十七):Fishhook
- iOS安全攻防
- ios--安全攻防02--后台daemon非法窃取用户iTunesstore信息
- iOS安全攻防(一):Hack必备的命令与工具
- IOS笔记1 使用keyChain保护密码等敏感信息
- iOS安全攻防(十九):基于脚本实现动态库注入