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

原创 2014年06月07日 19:04:38

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();

就可以了。


是的,绝不费一点脑子。




版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS应用安全之代码混淆实现篇

iOS应用安全之代码混淆实现篇

iOS应用安全之代码混淆设计篇

iOS应用安全随着各种事件的曝出,越来越受到重视。那针对iOS应用安全方面能做点什么呢?如何让我们开发的应用更安全一点呢?要知道如何才能安全,就要了解iOS应用怎么就不安全了呢?现在随着越狱技术的提高...

iOS安全攻防(二十三):Objective-C代码混淆

iOS安全攻防(二十三):Objective-C代码混淆class-dump可以很方便的导出程序头文件,不仅让攻击者了解了程序结构方便逆向,还让着急赶进度时写出的欠完善的程序给同行留下笑柄。所以,我们...

iOS安全攻防(十七):Fishhook

Fishhook众所周知,Objective-C的首选hook方案为Method Swizzle,于是大家纷纷表示核心内容应该用C写。接下来进阶说说iOS下C函数的hook方案,先介绍第一种方案———...

iOS 安全攻防系列(一):HelloWorld

这几天公司在做那个产品,牵涉到iPhone需要越狱,前几天刚刚搞定ssh连接手机,这次又要拿到手机上的数据,不得已,只好来好好研究一番。 在网上搜索了一遍,发现只有念茜的一系列文章,其他的都是转来转去...

iOS安全攻防(二十):越狱检测的攻与防

越狱检测的攻与防在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的...

历史上的重大软件BUG启示录 第5篇---AT&T长途电话网瘫痪事件

(图片来源于网络) 时间:1990年1月15日,星期一,下午2点25分; 地点:新泽西州,贝德明斯特,AT&T电话网络运营中心。 和往常一样,长途电话运行监控室的职员们悠闲的做着手头上的工作。AT&T...

历史上的重大软件BUG启示录 第4篇---Google的疏忽

(图片来源于网络) 很多的软件Bug源自于输入错误,即便像Google这样的国际大公司。 在Google上搜索的时候,有些结果列表项中带有一条警告,表明Google认为它带有恶意代码。 如果你在200...

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

http://blog.csdn.net/yiyaaixuexi/article/details/29210413 iOS安全攻防(二十四):敏感逻辑的保护方案(1) ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS安全攻防(二十四):敏感逻辑的保护方案(1)
举报原因:
原因补充:

(最多只允许输入30个字)