1. 程式人生 > >iOS安全攻防之結構體保護使用

iOS安全攻防之結構體保護使用

fff n) cnblogs 調用 hook hang ras evel amp

  Objective-C 代碼很容易被 hook,因此需要對一些重要的業務邏輯進行保護,可以改用結構體的形式,把函數名隱藏在結構體裏,以函數指針成員的形式存儲。這樣編譯後只留了下地址,去掉了名字和參數表,提高了逆向成本和攻擊門檻。

  例如,把以下代碼進行保護:

+ (BOOL)isPermission:(int)level;
+ (CGFloat)totalAmont;
+ (void)somePraviteMethod:(NSString *)paraStr1 numberValue:(double)numberValue;

  改為.h:

  

#import <Foundation/Foundation.h>

#import
<UIKit/UIKit.h> typedef struct protectUtil { BOOL (*isPermission)(int level); CGFloat (*totalAmont)(void); void (*somePraviteMethod)(NSString *paraStr1, double numberValue); }StructProtectUtil_t; @interface StructProtectUtil : NSObject + (StructProtectUtil_t *)sharedUtil; @end

  .m 文件:

  

#import "StructProtectUtil.h"

static BOOL _isPermission (int level) {
    NSLog(@"****** level = %d", level);
    if (level > 12) {
        return YES;
    }
    return NO;
}

static CGFloat _totalAmont() {
    NSLog(@"==== totalAmount");
    return 1900;
}

static void _somePraviteMethod (NSString *paraStr1, double
numberValue) { NSLog(@"paraStr1 = %@, numberValue = %f", paraStr1, numberValue); } static StructProtectUtil_t *protectUtil = NULL; @implementation StructProtectUtil + (StructProtectUtil_t *)sharedUtil { static dispatch_once_t onceToken; dispatch_once(&onceToken, ^{ protectUtil = malloc(sizeof(StructProtectUtil_t)); protectUtil->isPermission = _isPermission; protectUtil->totalAmont = _totalAmont; protectUtil->somePraviteMethod = _somePraviteMethod; }); return protectUtil; } + (void)destory { protectUtil ? free(protectUtil) : 0; protectUtil = NULL; } @end

  調用時:  

[StructProtectUtil sharedUtil] -> isPermission(1000);
[StructProtectUtil sharedUtil] -> totalAmont();
[StructProtectUtil sharedUtil] -> somePraviteMethod(@"ParaStr", 3820);

  

  然後對工程進行 class-dump:

  class-dump -H /Users/zhangtibin/Library/Developer/Xcode/DerivedData/TestSecurityAdvance-gflhcslxswowdrfflsfchjmlzfdt/Build/Products/Debug-iphoneos/TestSecurityAdvance.app/TestSecurityAdvance -o /Users/zhangtibin/class-dump/Struct

  查看反編譯後的文件,結果如下:

  技術分享

  這樣就實現了敏感邏輯的保護。

  以下對沒有保護的文件進行 Class-dump 後看到的。

  技術分享

  

iOS安全攻防之結構體保護使用