iOS攻防 - (二)iOS应用敏感逻辑的保护方案
2017-05-02 11:07
316 查看
Objective-C 代码容易被 hook,暴露信息太赤裸裸,为了安全,改用 C 来写吧!
当然不是全部代码都要 C 来写,我指的是敏感业务逻辑代码。
本文就介绍一种低学习成本的,简易的,Objective-C 逻辑代码重写为 C 代码的办法。
也许,程序中存在一个类似这样的类:
被 class-dump 出来后,利用 Cycript 很容易实现攻击,容易被 hook ,存在很大的安全隐患。
想改,但是不想大改程序结构,肿么办呢?
把函数名隐藏在结构体里,以函数指针成员的形式存储。 这样做的好处是,编译后,只留了下地址,去掉了名字和参数表,提高了逆向成本和攻击门槛。
改写的程序如下:
最后,根据 Xcode 的报错指引,把以前这样的调用
对应改成:
就可以了。
是的,绝不费一点脑子。
经过class-dump后,结构体_util被生成如下代码,函数指针的形式,并且,无法识别函数名了
转载地址:http://wiki.jikexueyuan.com/project/ios-security-defense/sensitive.html
转载地址:http://blog.csdn.net/yiyaaixuexi/article/details/29210413
当然不是全部代码都要 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();
就可以了。
是的,绝不费一点脑子。
经过class-dump后,结构体_util被生成如下代码,函数指针的形式,并且,无法识别函数名了
转载地址:http://wiki.jikexueyuan.com/project/ios-security-defense/sensitive.html
转载地址:http://blog.csdn.net/yiyaaixuexi/article/details/29210413
相关文章推荐
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- iOS安全攻防(二十四):敏感逻辑的保护方案(1)
- iOS安全攻防:static和被裁的符号表,Objective-C代码混淆,敏感逻辑的保护方案(1)
- iOS安全攻击和防御(24):敏感的保护方案逻辑(1)
- [置顶] 敏感逻辑的保护方案:把函数名隐藏在结构体里,以函数指针成员的形式存储。
- iOS应用架构谈 view层的组织和调用方案
- iOS应用发布Invalid Binary问题解决方案
- ios 移动应用通用逻辑流程
- ios 移动应用通用逻辑流程
- iOS应用架构谈 view层的组织和调用方案
- 移动应用开发(IOS/android等)中一个通用的图片缓存方案讲解
- iOS 7.1企业应用证书无效问题解决方案
- iOS开发--iOS应用架构谈 view层的组织和调用方案
- .NET内存中敏感数据的保护方案
- iOS 应用架构谈:view 层的组织和调用方案
- iOS 应用架构谈:view 层的组织和调用方案
- ios 移动应用通用逻辑流程
- iOS安全攻防(十八):数据保护API
- IOS笔记1 使用keyChain保护密码等敏感信息