ios敏感邏輯的保護(hù)方案

本文轉(zhuǎn)載自(https://blog.csdn.net/yiyaaixuexi/article/details/29210413)
Objective-C代碼容易被hook,暴露信息太赤裸裸,為了安全,改用C來寫吧!

image

當(dāng)然不是全部代碼都要C來寫,我指的是敏感業(yè)務(wù)邏輯代碼。

本文就介紹一種低學(xué)習(xí)成本的,簡(jiǎn)易的,Objective-C邏輯代碼重寫為C代碼的辦法。

也許,程序中存在一個(gè)類似這樣的類:

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

被class-dump出來后,利用Cycript很容易實(shí)現(xiàn)攻擊,容易被hook,存在很大的安全隱患。

image

想改,但是不想大改程序結(jié)構(gòu),腫么辦呢?

把函數(shù)名隱藏在結(jié)構(gòu)體里,以函數(shù)指針成員的形式存儲(chǔ)。

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

改寫的程序如下:

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

最后,根據(jù)Xcode的報(bào)錯(cuò)指引,把以前這樣的調(diào)用

[XXUtil isVerified];

對(duì)應(yīng)改成:

XXUtil->isVerified();

就可以了。

是的,絕不費(fèi)一點(diǎn)腦子。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容