iOS内存擦除方法(好用)

作者: 洲洲哥 | 来源:发表于2016-07-29 10:30 被阅读348次

    本文首发地址

    在iOS里我们的安全是很重要的,比如内存里的数据,沙盒里的数据,等等都是我们做为一个安全必须要考虑的,做出合格的并且安全的app是我们刻不容缓的。

    最近我们在做这个第三方的安全评测,给我们发来了好多评测点。

    【敏感数据残留】

    这个问题就要说说了。他们评测机构的描述是:【登录后扫描到敏感信息残留】,问题的严重程度就定义到了【严重】级别。

    【解决办法】

    在iOS里添加了对NSString的延展,看具体方法。

    -(void)memoryClearStirng{
    
        NSString *ClearStr = [[NSString alloc]initWithFormat:@"%@",self];
    
        const char*string = (char *)CFStringGetCStringPtr((CFStringRef)ClearStr,CFStringGetSystemEncoding());
    
       memset(&string, 0, sizeof(self));
    
    }
    

    【使用】

    [self.verifyTextField.text memoryClearStirng];

    里头的方面我就不具体解释了,请看【念茜的博客】大神级别的。

    检查过程如下

    发来的报告是通过MEMSCAN检测内存中的数据。我们来验证一下

    1:检查具备条件:一个越狱的手机这个是必须的

    开始检测:

    查看手机IP root进入权限:ssh root@192.168.1.80

    在root之前会让你输入密码。默认输入密码:alpine


    root进入权限.png

    2:获取手机运行程序的ID:ps-ax | grep RefreshAndroid

    获取手机运行程序的ID.png

    3:根据ID来存入内存记录:memscan -p 64685 -d -o out4.bin

    内存记录.png

    4:数据的记录数量为0,则表示没有内存擦除成功。

    查找内存的记录.png

    如果不是0,可以grep-a 数据内容 out4.bin来查看内存中关于这个记录。

    如有问题可添加我的QQ:1290925041
    还可添加QQ群:234812704(洲洲哥学院)
    欢迎各位一块学习,提高逼格!
    也可以添加洲洲哥的微信公众号

    更多消息

    更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:

    这里写图片描述

    相关文章

      网友评论

      • ncnocure:感谢博主的文章,给了我很大启发。
        此外我在越狱的ios 7.1上实验了。
        代码如下(参考念茜博客的原文代码,直接赋了常量字符串):
        NSString *testStr = [[NSString alloc] initWithFormat:@"14642334"];
        char *str = malloc(9*sizeof(char));
        str = (char *)CFStringGetCStringPtr((CFStringRef)testStr,CFStringGetSystemEncoding());
        memset(str , 0 , 7);
        ps -ax | grep Test
        memscan -p 715 -d output.bin
        grep -c 14642334 output.bin 得到结果1。
        这代码没有执行的时候,执行结果依然是1。

        可能说明两个问题:
        1. 常量字符串是没法清除的。
        2. 不管代码有没有执行到NSString *testStr = [[NSString alloc] initWithFormat:@"14642334"];
        14642334这个常量字符串已经在内存中存在。

        请问博主在测试的时候有没有遇到类似的问题呢?以及这个问题是不是跟ios系统的版本有关呢。
        洲洲哥:@ncnocure说的常量字符串 是用static 声明的吗?
        ncnocure:@洲洲哥 我有点怀疑常量字符串根本没法清除,而且运行到赋值语句之前就已经在内存中存在了,如果能从苹果文档里找到确定说明,或者其他人也做了类似试验能证明这个结果,就可以确定了。
        洲洲哥:@ncnocure 念茜大神的例子 我试过,用完之后,内存依旧有这样残留。对于不同的版本的问题,我目前没遇到过。
      • ncnocure: memset(&string, 0, sizeof(self));
        清空的是指向string的指针,而不是string指向的字符串。
        改成 memset(string, 0, sizeof(self));清的才是真正的字符串。
        ncnocure:@洲洲哥 void *memset(void *s, int ch, size_t n);的函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。这里作为变量传入的string应该是个指向char字符串的指针,如果是&string的话,就是指向string这个指针的指针了。
        具体可以调试里看到string指向的内存并没有被清空,而是string本身的值被清空。
        洲洲哥:@ncnocure 清空字符串,就他他所占用的内存干掉。清空内存残留,似乎除了清空指针外其他方法不多吧??你是用
        memset(&string, 0, sizeof(self));
        还是
        memset(string, 0, sizeof(self));

        才达到清空内存残留的问题尼?
      • 人间一堕十劫:可以了解一下您所说的第三方安全评测是哪一家吗?最近正在寻找合适的安全评测服务。
        人间一堕十劫:@洲洲哥 嗯,谢谢了~ :smile:
        洲洲哥:@洲洲哥 不好意思 给你回复晚了
        这个评测机构是 《中国软件评测中心》
        洲洲哥:@人间一堕十劫 稍等。明天我去单位查查。给你一个回复啊

      本文标题:iOS内存擦除方法(好用)

      本文链接:https://www.haomeiwen.com/subject/yzhzjttx.html