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

就可以了。


是的,绝不费一点脑子。




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

相关文章推荐

ADB使用小结

简介ADB全称Android Debug Bridge,我们在开发过程中经常使用这个工具来操作Android系统。 在使用ADB过程中有一些常识和细节,我们来总结一下。ADB主要功能有: 1、在...

工作总结_6

今日成果: 遇到的问题和方法: 明日计划:

闪讯无线助手-Android端闪讯破解路由器拨号实现原理

闪讯破解路由器拨号的实现原理,详细的分析了破解闪讯的过程,并附上闪讯无线助手(Android端闪讯拨号路由器,发出无线)的源码。

回顾这一个月以来所学到的ios知识

1.ios的开端---做一个手机端真实功能的录音机 由于开始转的移动端,尤其是ios,根本不知道怎么做,用实验室的苹果机,然后学长告诉我用xcode来编程,剩下的都是自己图书馆借书,网络查资料,老大要...

WorkPlanning_3

周工作总结及计划表 部    门 理工大学 姓    名 张进龙 入 职 时 间 3.22 本周已完成工作内容及总...

工作总结_12

今天成果: 1.上午听了徐老师的讲座,受到了很多启发,先抛开课本上的知识不说,就是一个人不应在乎一些小的细枝末节东西,而应该将眼光放长远,只有站得高了,才能看的更远。做软件也一样,从系统架构师来说,...

IOS项目笔记-1

最近一直在做一个项目,在做到从网络上请求数据时,因为是自己封装的一个从网络获取数据的类,而数据操作是在根视图RootViewController上,在这个类里开始是引用封装类的对象,在调用方法,获取到...

一款炫酷Loading动画--加载失败

简介上一篇文章一款炫酷Loading动画–加载成功,给大家介绍了成功动画的绘制过程,这篇文章将接着介绍加载失败特效的制作。 相比成功动画,有了前面的经验,失败动画的过程就显得比较简单了。 动画结构...

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

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

在iOS上绘制自然的签名

在iOS上绘制自然的签名这里有一篇很棒的文章写如何在Android上获取流畅的签名:Smoother Signatures,但是我没有找到一篇是写在iOS上如何实现。那么,究竟怎么做才能在iOS设备上...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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