iOS安全攻防之结构体保护使用

Posted ZachRobin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS安全攻防之结构体保护使用相关的知识,希望对你有一定的参考价值。

  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安全攻防之结构体保护使用的主要内容,如果未能解决你的问题,请参考以下文章

iOS安全攻防之使用 Frida 绕过越狱设备检测

iOS安全攻防之越狱设备检测

iOS安全攻防之使用 Charles 进行网络数据抓包

Web安全黑铁到传说五.常见漏洞攻防之XSS篇基础详解(数据源保护持续化)

Web 攻防之业务安全:验证码绕过测试.

python安全攻防之socket网络编程