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

    就能够了。


    是的,绝不费一点脑子。




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

  • 相关阅读:
    《第一行代码》阅读笔记(三十一)——多线程
    《第一行代码》阅读笔记(三十)——MVP(补充)
    《第一行代码》阅读笔记(二十九)——网络框架 OkHttp+Retrofit+Rxjava
    《第一行代码》阅读笔记(二十八)——网络技术(OkHttp+JSON/GSON)
    sql server优化查询速度(子查询)
    sql server 查询字段是否为数字
    Git操作汇总
    解决github下载过慢方式
    InnoDB存储引擎简介
    MySQL主从复制详解
  • 原文地址:https://www.cnblogs.com/hrhguanli/p/4669365.html
Copyright © 2020-2023  润新知