你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發綜合 >> iOS安全攻防(二十四):敏感邏輯的保護方案(1)

iOS安全攻防(二十四):敏感邏輯的保護方案(1)

編輯:IOS開發綜合

iOS安全攻防(二十四):敏感邏輯的保護方案(1)



Objective-C代碼容易被hook,暴露信息太赤裸裸,為了安全,改用C來寫吧!


\



<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD48cD61sci7srvKx8irsr+0+sLrtrzSqkPAtNC0o6zO0ta4tcTKx8P0uNDStc7xwt+8rbT6wuuhozwvcD48cD6xvs7Evs296cnc0rvW1rXN0afPsLPJsb61xKOsvPLS17XEo6xPYmplY3RpdmUtQ8LfvK20+sLr1tjQtM6qQ7T6wuu1xLDst6ihozwvcD48cD48YnIgLz48L3A+PHA+0rLQ7aOss8zQ8tbQtObU2tK7uPbA4MvG1eLR+bXEwOCjujwvcD48cD48L3A+PHByZSBjbGFzcz0="brush:java;">@interface XXUtil : NSObject + (BOOL)isVerified; + (BOOL)isNeedSomething; + (void)resetPassword:(NSString *)password; @end

被class-dump出來後,利用Cycript很容易實現攻擊,容易被hook,存在很大的安全隱患。

\想改,但是不想大改程序結構,腫麼辦呢?





把函數名隱藏在結構體裡,以函數指針成員的形式存儲。

這樣做的好處是,編譯後,只留了下地址,去掉了名字和參數表,提高了逆向成本和攻擊門檻。



改寫的程序如下:

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


//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();

就可以了。


是的,絕不費一點腦子。




  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved