iOS安全攻防(二十四):敏感逻辑的保护方案(1)

iOS安全攻防(二十四):敏感逻辑的保护方案(1)



Objective-C代码容易被hook,暴露信息太赤裸裸,为了安全,改用C来写吧!





当然不是全部代码都要C来写,我指的是敏感业务逻辑代码。

本文就介绍一种低学习成本的,简易的,Objective-C逻辑代码重写为C代码的办法。


也许,程序中存在一个类似这样的类:

@interface XXUtil : NSObject

+ (BOOL)isVerified;
+ (BOOL)isNeedSomething;
+ (void)resetPassword:(NSString *)password;

@end


被class-dump出来后,利用Cycript很容易实现攻击,容易被hook,存在很大的安全隐患。

想改,但是不想大改程序结构,肿么办呢?





把函数名隐藏在结构体里,以函数指针成员的形式存储。

这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。



改写的程序如下:

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



 最后,根据Xcode的报错指引,把以前这样的调用

[XXUtil isVerified];

对应改成:

XXUtil->isVerified();

就可以了。


是的,绝不费一点脑子。




“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
©️2022 CSDN 皮肤主题:大白 设计师:CSDN官方博客 返回首页
评论 67

打赏作者

念茜

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值