iOS安全攻击和防御(24):敏感的保护方案逻辑(1)
iOS安全攻击和防御(24):敏感的保护方案逻辑(1)
Objective-C代码easy被hook。暴露信息太赤裸裸,为了安全,改用C来写吧!
当然不是所有代码都要C来写,我指的是敏感业务逻辑代码。
本文就介绍一种低学习成本的。简易的。Objective-C逻辑代码重写为C代码的办法。
或许,程序中存在一个相似这种类:
@interface XXUtil : NSObject + (BOOL)isVerified; + (BOOL)isNeedSomething; + (void)resetPassword:(NSString *)password; @end
被class-dump出来后。利用Cycript非常easy实现攻击,easy被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();
就能够了。
是的,绝不费一点脑子。
版权声明:本文博客原创文章,博客,未经同意,不得转载。