在iOS设备上保护ObjC对象的dealloc

时间:2010-11-03 13:26:57

标签: ios objective-c security memory-management

当一个对象被解除分配时会发生什么?是否所有的内存都被淘汰了,或者痕迹仍然存在?

如果我理解正确,如果应用程序的内存处于活动状态,则会将其保存到闪存存储中。假设一个能够读出这个内存的足智多谋的黑客。理论上,如果该内存未被某些内容覆盖,他有时能够读出解除分配的NSString的内容吗?

3 个答案:

答案 0 :(得分:5)

不要将安全数据存储在Objective C数据类型中。它们是不透明的数据类型,每当您尝试清除某些部分时,可能会在内存中制作和/或留下大量数据副本。

补充:Swift数据类型似乎也是如此,包括结构,数组和字符串。它们是不透明的,因此谁知道DRAM中可能留下多少份数据副本。

使用非不透明的普通C数据类型(字符数组等),您可以在完成使用后立即使用它们,并且只要应用程序处于活动状态即可。您还可以对数组元素进行模糊处理,以便通过内存转储进行字符串搜索更加困难。

答案 1 :(得分:1)

即使使用越狱的iDevice,也不太可能,因为内存的位置可能非常深。如果你真的很担心,如果你不担心NSMutableString(你的类的dealloc)的开销,这里有一个解决方案:

-(void) dealloc
{
    for (int i = 0; i < [myString length]; i++)
    {
          [myString replaceCharactersInRange:NSMakeRange(i, 1) withString:@"*"];
    }
    [myString release]; // or dealloc
    // clean up rest
    [super dealloc]; // dont forget this :)
}

答案 2 :(得分:1)

所以你也提出了关于写入Flash的问题。如果你的应用程序进入后台,必然会释放对象 - 并让你有机会删除它们(如另一个答案中所述)。

如果您真的担心这个问题 - 除了在dealloc上实现某种类型的对象重写代码之外,我会在您的应用上禁用快速应用切换,以确保这种情况永远不会发生,如上所述。