iOS安全攻击和防御(24):敏感的保护方案逻辑(1)

iOS安全攻击和防御(24):敏感的保护方案逻辑(1)

Objective-C代码easy被hook。暴露信息太赤裸裸,为了安全,改用C来写吧!

iOS安全攻击和防御(24):敏感的保护方案逻辑(1)

当然不是所有代码都要C来写,我指的是敏感业务逻辑代码。

本文就介绍一种低学习成本的。简易的。Objective-C逻辑代码重写为C代码的办法。

或许,程序中存在一个相似这种类:

@interface XXUtil : NSObject

+ (BOOL)isVerified;
+ (BOOL)isNeedSomething;
+ (void)resetPassword:(NSString *)password; @end

被class-dump出来后。利用Cycript非常easy实现攻击,easy被hook。存在非常大的安全隐患。

iOS安全攻击和防御(24):敏感的保护方案逻辑(1)想改,可是不想大改程序结构,肿么办呢?

把函数名隐藏在结构体里,以函数指针成员的形式存储。

这样做的优点是。编译后,仅仅留了下地址,去掉了名字和參数表。提高了逆向成本和攻击门槛。

改写的程序例如以下:

//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

iOS安全攻击和防御(24):敏感的保护方案逻辑(1) 最后,依据Xcode的报错指引。把曾经这种调用

[XXUtil isVerified];

相应改成:

XXUtil->isVerified();

就能够了。

是的,绝不费一点脑子。

版权声明:本文博客原创文章,博客,未经同意,不得转载。

上一篇:phpMyAdmin - 错误 您应升级到 MySQL 5.5.0 或更高版本,解决办法。。。


下一篇:scrapy的安装