zoukankan      html  css  js  c++  java
  • iOS安全攻击和防御(24):敏感的保护方案逻辑(1)

    iOS安全攻击和防御(24):敏感的保护方案逻辑(1)



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





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

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


    或许,程序中存在一个相似这种类:

    @interface XXUtil : NSObject
    
    + (BOOL)isVerified;
    + (BOOL)isNeedSomething;
    + (void)resetPassword:(NSString *)password;
    
    @end


    被class-dump出来后。利用Cycript非常easy实现攻击,easy被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();

    就能够了。


    是的,绝不费一点脑子。




    版权声明:本文博客原创文章,博客,未经同意,不得转载。

  • 相关阅读:
    Linux中的阻塞机制
    Shellz中awk的简单用法
    实际项目开发过程中常用C语言函数的9大用法
    堆栈溢出一般是什么原因?
    哈夫曼算法原理
    7款易上手C语言编程软件推荐
    嵌入式系统分类介绍
    什么是字符串数组
    C语言中数组定义方式
    第三章课后习题P56解析
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4669365.html
Copyright © 2011-2022 走看看