iOS安全攻防(十三):数据擦除

原创 2014年01月22日 18:47:20

数据擦除



对于敏感数据,我们不希望长时间放在内存中,而希望使用完后立即就被释放掉。
但是不管是ARC还是MRC,自动释放池也有轮循工作周期,我们都无法控制内存数据被擦除的准确时间,让hackers们有机可乘。
本文介绍一个小技巧——及时数据擦除。


假如一个View Controller A的一个数据被绑在一个property上,

@interface WipingMemoryViewController : UIViewController

@property (nonatomic,copy) NSString *text;
@end

当A push到 另外一个View Controller B时,该数据还是有可能被读到的

WipingMemoryViewController *lastController = (WipingMemoryViewController *)self.navigationController.viewControllers[0];
NSLog(@"text = %@",lastController.text);


于是,“用后即擦”变得十分必要:

_text = [[NSString alloc]initWithFormat:@"information"]; 
NSLog(@"Origal string = %@",_text);
//do something...
char *string = (char *)CFStringGetCStringPtr((CFStringRef)_text, CFStringGetSystemEncoding());
memset(string, 0, [_text length]);
NSLog(@"final text = %@",_text);

Log输出如下:

WipingMemory[2518:70b] Origal string = information
WipingMemory[2518:70b] final text = 

可以看到,我们想要保护的数据,被有效的擦除了。


还有提个醒,如果是这样

_text = @"information";


创建的字符串,是会被分配到data区,而是无法修改的。




如果有兴趣也有闲心,可以试试运行下面的代码,有彩蛋哦:

_text = @"information";
memset((__bridge void *)(_text), 0, _text.length - 1);
NSString *myString = [[NSString alloc]initWithFormat:@"information"];
NSLog(@"Origal text : %@ \n",myString);

编译器把两个information的省略到一个地址了~





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

IOS面试题详解(一)

这套题目来自cocoachina的yoyokko版主大大招人时候的题目,论坛各路大神都觉得偏难。自己看了一下,发现很多是自己知道,但又说不上来的感觉。所以觉得有必要梳理完善一下,题很多,反正写到哪算哪...
  • longzs
  • longzs
  • 2012年03月29日 11:03
  • 9057

iOS 安全攻防系列(一):HelloWorld

这几天公司在做那个产品,牵涉到iPhone需要越狱,前几天刚刚搞定ssh连接手机,这次又要拿到手机上的数据,不得已,只好来好好研究一番。 在网上搜索了一遍,发现只有念茜的一系列文章,其他的都是转来转去...
  • woaizijiheni
  • woaizijiheni
  • 2015年10月21日 17:51
  • 1481

如何安全释放内存—dealloc调用详解。

二、dealloc调用详解。 1、//ARC中不能识别__block,要用__weak标记      __weak TwoViewController *this = self;      _blo...
  • u014784370
  • u014784370
  • 2014年07月23日 21:34
  • 1248

iOS开发之OC最常见面试题总结

1.简述OC中内存管理机制 OC的内存管理机制是自动引用技术,内存管理的原则是谁开辟谁释放,分为ARC和MRC,MRC的话就是需要我们程序员手动管理内存,ARC不需要我们手动管理内存,系统会自行管理...
  • Star__shine
  • Star__shine
  • 2016年04月20日 20:12
  • 7157

iOS安全攻防(二十):越狱检测的攻与防

越狱检测的攻与防在应用开发过程中,我们希望知道设备是否越狱,正以什么权限运行程序,好对应采取一些防御和安全提示措施。iOS7相比之前版本的系统而言,升级了沙盒机制,封锁了几乎全部应用沙盒可以共享数据的...
  • yiyaaixuexi
  • yiyaaixuexi
  • 2014年03月02日 13:38
  • 29468

IOS安全学习资料汇总

转:https://github.com/pandazheng/IosHackStudy (1)  IOS安全学习网站收集: http://samdmarshall.com http...
  • zhangmiaoping23
  • zhangmiaoping23
  • 2015年11月28日 10:10
  • 1783

IOS开发时必须知道的哪些事。。。

“别人的工作经验可能是一些其他东西,而我们程序员的工作经验就是我们的代码。”...
  • GAVIN_2015
  • GAVIN_2015
  • 2016年04月24日 20:47
  • 1035

iOS知识点五

1、简述OC中内存管理机制。与retain配对使用的方法是dealloc还是release,为什么?需要与alloc配对使用的方法是dealloc还是release,为什么?readwrite,rea...
  • yaoliangjun306
  • yaoliangjun306
  • 2017年01月11日 17:47
  • 291

iOS安全攻防(六):使用class-dump-z分析支付宝app

使用class-dump-z分析支付宝app 为了了解支付宝app的源码结构,我们可以使用class-dump-z工具来分析支付宝二进制。 1.下载配置class_dump...
  • cancer1617
  • cancer1617
  • 2014年04月16日 21:30
  • 856

iOS本地数据存储安全

iOS本地数据存储安全移动APP通常会在设备本地存储一些数据,这可以为程序执行、更良好地性能或离线访问提供支持。由于移动设备使用地越来越广泛,设备失窃的风险也越来越大,因此不安全的本地数据存储已成为移...
  • baize_security
  • baize_security
  • 2016年10月09日 15:03
  • 2530
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS安全攻防(十三):数据擦除
举报原因:
原因补充:

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