在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ iOS/ 敏感邏輯的保護(hù)方案
Hack 實(shí)戰(zhàn)——支付寶 App 手勢(shì)密碼校驗(yàn)欺騙
使用 Reveal 分析他人 App
后臺(tái) daemon 非法竊取用戶 iTunesstore 信息
使用 iNalyzer 分析應(yīng)用程序
越獄檢測(cè)的攻與防
使用 introspy 追蹤分析應(yīng)用程序
廢除應(yīng)用程序的 ASLR 特性
使用 Cycript 修改支付寶 App 運(yùn)行時(shí)
敏感邏輯的保護(hù)方案
Fishhook
使用 class-dump-z 分析支付寶 App
static 和被裁的符號(hào)表
iOS7 的動(dòng)態(tài)庫注入
二進(jìn)制和資源文件自檢
Hack 實(shí)戰(zhàn)——探究支付寶 App 手勢(shì)密碼
使用 Keychain-Dumper 導(dǎo)出 keychain 數(shù)據(jù)
數(shù)據(jù)擦除
Hack 實(shí)戰(zhàn)——解除支付寶 App 手勢(shì)解鎖錯(cuò)誤次數(shù)限制
Objective-C 代碼混淆
阻止 GDB 依附
基于腳本實(shí)現(xiàn)動(dòng)態(tài)庫注入
Hack 必備的命令與工具
鍵盤緩存與安全鍵盤
數(shù)據(jù)保護(hù) API

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

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

http://wiki.jikexueyuan.com/project/ios-security-defense/images/sensitive1.jpeg" alt="sensitive1" />

當(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 ,存在很大的安全隱患。

http://wiki.jikexueyuan.com/project/ios-security-defense/images/sensitive2.jpeg" alt="sensitive2" />

想改,但是不想大改程序結(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  

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

對(duì)應(yīng)改成: XXUtil->isVerified();

就可以了。

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