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开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:

这里写图片描述

相关文章

  • iOS内存擦除方法(好用)

    本文首发地址 在iOS里我们的安全是很重要的,比如内存里的数据,沙盒里的数据,等等都是我们做为一个安全必须要考虑的...

  • 一些有用的链接

    swift == 只比较值,=== 比较值之外还比较内存地址。 swift类型擦除转载#iOS IP 直连原理剖析...

  • 深入理解JVM总结

    1. 大概内容 内存区域 内存泄漏和内存溢出 类型擦除 对象创建,分配和访问 GC的判定 GC实现方法 类加载过程...

  • iOS面试 -- 内存管理

    来源:爱玩游戏的iOS菜鸟 内存布局 iOS程序下内存布局 不同内存布局区域的含义stack(栈):方法调用hea...

  • iOS内存管理(一)基础知识

    iOS内存管理 内存分区 这里从低到高介绍一下iOS内存的分区及主要存储内容。 内核区 栈区:函数,方法,局部变量...

  • iOS项目提升编译性能的方案

    #iOS项目构建#下面的方法都能显著提升iOS项目的编译性能: 1、多任务并行编译 ; 2、内存虚拟磁盘,纯内存I...

  • iOS项目提升编译性能的方案

    #iOS项目构建#下面的方法都能显著提升iOS项目的编译性能: 1、多任务并行编译 ; 2、内存虚拟磁盘,纯内存I...

  • iOS 类方法和成员方法

    iOS 类方法和成员方法 类方法 静态方法,在类编译时在内存中创建,常驻内存,适用于,不需要访问该类成员变量的时候...

  • Java泛型实现机制

    原理Java泛型是通过类型擦除来实现。 类型擦除的好处运行时内存负担小诸如List 、List 等在运行时只会存在...

  • 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