Objective-C 代码很容易被 hook,因此需要对一些重要的业务逻辑进行保护,可以改用结构体的形式,把函数名隐藏在结构体里,以函数指针成员的形式存储。这样编译后只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。

  例如,把以下代码进行保护:

+ (BOOL)isPermission:(int)level;
+ (CGFloat)totalAmont;
+ (void)somePraviteMethod:(NSString *)paraStr1 numberValue:(double)numberValue;

  改为.h:

  

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

typedef struct protectUtil {
BOOL (*isPermission)(int level);
CGFloat (*totalAmont)(void);
void (*somePraviteMethod)(NSString *paraStr1, double numberValue);
}StructProtectUtil_t; @interface StructProtectUtil : NSObject + (StructProtectUtil_t *)sharedUtil; @end

  .m 文件:

  

#import "StructProtectUtil.h"

static BOOL _isPermission (int level) {
NSLog(@"****** level = %d", level);
if (level > ) {
return YES;
}
return NO;
} static CGFloat _totalAmont() {
NSLog(@"==== totalAmount");
return ;
} static void _somePraviteMethod (NSString *paraStr1, double numberValue) {
NSLog(@"paraStr1 = %@, numberValue = %f", paraStr1, numberValue);
} static StructProtectUtil_t *protectUtil = NULL; @implementation StructProtectUtil + (StructProtectUtil_t *)sharedUtil
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
protectUtil = malloc(sizeof(StructProtectUtil_t));
protectUtil->isPermission = _isPermission;
protectUtil->totalAmont = _totalAmont;
protectUtil->somePraviteMethod = _somePraviteMethod;
});
return protectUtil;
} + (void)destory
{
protectUtil ? free(protectUtil) : ;
protectUtil = NULL;
} @end

  调用时:  

[StructProtectUtil sharedUtil] -> isPermission();
[StructProtectUtil sharedUtil] -> totalAmont();
[StructProtectUtil sharedUtil] -> somePraviteMethod(@"ParaStr", );

  

  然后对工程进行 class-dump:

  class-dump -H /Users/zhangtibin/Library/Developer/Xcode/DerivedData/TestSecurityAdvance-gflhcslxswowdrfflsfchjmlzfdt/Build/Products/Debug-iphoneos/TestSecurityAdvance.app/TestSecurityAdvance -o /Users/zhangtibin/class-dump/Struct

  查看反编译后的文件,结果如下:

  

  这样就实现了敏感逻辑的保护。

  以下对没有保护的文件进行 Class-dump 后看到的。

  

  

iOS安全攻防之结构体保护使用的更多相关文章

  1. iOS 用KVC设置结构体

    iOS 用KVC设置结构体 在Fundation中KVC提供的键值路径只能访问对象,不能访问结构体.这很不面向对象. 执行下面的语句将会报错: [self setValue:@() forKeyPat ...

  2. iOS学习06C语言结构体

    1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...

  3. iOS开发——C篇&结构体与枚举

    一:结构体与枚举的介绍: 结构体与枚举:是一种存储复杂的数据结构体:是用户自定义的一种类型,不同类型的集合,而数组是相同类型变量的集合. 二:结构体的创建 struct user {     char ...

  4. iOS - 常用的CG结构体

    CGPoint.CGSize.CGRect.CGRectEdge实际上都是结构体 一,几个常用的结构体 CGPoint   定义一个点,设置x坐标和y坐标 struct CGPoint { CGFlo ...

  5. c语言结构体

    [C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...

  6. iOS 阶段学习第十天笔记(结构体)

    iOS学习(C语言)知识点整理 一.数据结构 1)概念:数据结构是指计算机程序中所操作的对象——数据以及数据元素之间的相互关系和运算. 2)结构体必须有struct 关键字修饰. 实例代码: stru ...

  7. iOS Foundation框架简介 -1.常用结构体的用法和输出

    1.安装Xcode工具后会自带开发中常用的框架,存放的地址路径是: /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.plat ...

  8. 李洪强iOS开发之Foundation框架—结构体

    Foundation框架—结构体 一.基本知识 Foundation—基础框架.框架中包含了很多开发中常用的数据类型,如结构体,枚举,类等,是其他ios框架的基础. 如果要想使用foundation框 ...

  9. ios结构体httpPost头结构

    ios结构体httpPost头结构 by 吴雪莹 NSString* urlStr = @"; NSURL* url = [NSURL URLWithString:urlStr]; NSMu ...

随机推荐

  1. MFC使用SQLite 学习系列 一: SQLITE_MISUSE错误

    一 为什么要选择SQLite 由于使用文本文件来记录测试数据,速度越来越慢的问题,经过园友推荐,使用了SQLite来进行数据的存储,再次感谢园友@LightSmaile. 关于这个问题,可以参考一下上 ...

  2. MarkDown 常用语法教程

    MarkDown 语法说明 [TOC] 标题 标题1 ====== 标题2 ----- ## 大标题 ### 小标题 #### 小标题 列表 无序列表 + 列表文本前使用 [减号+空格] * 列表文本 ...

  3. Notepad++ 7.3.2 Download 64-bit x64 / 32-bit x86

    Notepad++ 7.3.2 Download 32-bit x86 Notepad++ Installer 32-bit x86: Take this one if you have no ide ...

  4. canvas绘制一定数目的圆(均分)

    绘制多圆 2016年5月24日12:12:26 绘制一定数目(num)颜色随机的小圆,围成一个大圆.根据num完全自动生成,且小圆自动均分大圆路径(num≥20). 效果: 前置技能:(1).Canv ...

  5. php 启动过程 - sapi MINIT 过程

    php 启动过程 - sapi MINIT 过程 sapi 概念 sapi 是 php 的应用编程接口, server 端接收请求通过 sapi 接口层交给 php 处理 不同的 server 端底层 ...

  6. Vue 事件驱动和依赖追踪

    之前关于 Vue 数据绑定原理的一点分析,最近需要回顾,就顺便发到随笔上了 在之前实现一个自己的Mvvm中,用 setter 来观测model,将界面上所有的 viewModel 绑定到 model ...

  7. PPT制作线条动画

    0.小叙闲言 今天在用PPT做动画的时候小有心得,百度了一下线条动画制作,有一个贴子里面的讨论,也给了我一些灵感,贴子地址:http://www.rapidbbs.cn/thread-24577-1- ...

  8. (知识点)JavaScript闭包

    下面是我对闭包的理解:(把他们整理出来,整理的过程也是在梳理) 1.首先,在理解闭包之前: 我们首先应该清楚下作用域和作用域链 作用域:每个函数定义时创建时自己的环境即作用域 作用域链:函数内可访问自 ...

  9. mui开发app之多图压缩与上传(仿qq空间说说发表)

    欲实现效果图 提出需求点: 用户可自由添加删除替换多张图片,并且显示相应缩略图,限制为8张 用户可选择压缩图或直接上传原图功能 返回提醒用户会丢失填写的信息 下面一个个实现上述需求,从简单到复杂: 需 ...

  10. Angular简易分页设计(二):封装成指令

    (首先声明本文来自博客园本人原创,转载请说明出处.欢迎关注:http://www.cnblogs.com/mazhaokeng/) 之前我们讲过,Angular分页代码确实不难实现,但是由于在多个路由 ...