iOS安全攻防(十八):数据保护API

一款App等保的预检测工具--ApplicationScanner 一、关于ApplicationScanner ApplicationScanner是一个快速稳定的App代码扫描工具,该工具基于Python3.7实现其主要功能,apk检测部分需要JDK 11的支持,因此具备较好的跨平台特性,目前支持在Linux和Mac系统上使用,暂不支持Windows。 二、功能介绍 _____ /\ / ____| 阅读详情

原文地址:http://blog.youkuaiyun.com/yiyaaixuexi/article/details/19486335

开篇先扯几句题外话,许多朋友都问我怎么不写防啊,我确实有点犹豫。

hackers总是想象如果自己是开发者会怎么写,然后才能找到入手点。同理,开发者们也要想象自己是hackers会怎么做,才能采取相应的防御措施。然后,就是一场递归的博弈。
拿越狱检测这件事来说,起初大家只需判断有无安装Cydia就好了,hackers们说好,那我就不安装Cydia也可以动手脚。开发者们又说,那你一定得用的上MobileSubstrate,bash,ssh吧,我去检测手机有没有安装这些工具。可是又有什么用呢?你判断什么我绕过去什么。

当class-dump大肆流行,函数符号都被暴露,开发者想尽办法藏起自己的敏感函数代码。hackers们也知道class-dump的死穴在哪里,于是新的检索办法油然而生。也就说,当一个防御手段成为流行,它就不会再是个让hackers大骂“真特么费劲”的防御手段了。比如之前介绍的一个小技巧:内存数据擦除  ,hackers知道开发者都去擦数据了,那我hook memset在你擦之前去读就好了。开发者说:我直接写硬盘上然后删除!hackers说:难道你没听说过文件恢复?



OK,贫的有点多了,本文介绍一下防御相关的话题————iOS的数据保护API。


数据保护API


文件系统中的文件、keychain中的项,都是加密存储的。当用户解锁设备后,系统通过UDID密钥和用户设定的密码生成一个用于解密的密码密钥,存放在内存中,直到设备再次被锁,开发者可以通过Data Protection API 来设定文件系统中的文件、keychain中的项应该何时被解密。

1)文件保护

  1. /* 为filePath文件设置保护等级 */  
  2. NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete  
  3.                                                        forKey:NSFileProtectionKey];  
  4. [[NSFileManager defaultManager] setAttributes:attributes  
  5.                                  ofItemAtPath:filePath  
  6.                                         error:nil];  

  1. //文件保护等级属性列表  
  2. NSFileProtectionNone                                    //文件未受保护,随时可以访问 (Default)  
  3. NSFileProtectionComplete                                //文件受到保护,而且只有在设备未被锁定时才可访问  
  4. NSFileProtectionCompleteUntilFirstUserAuthentication    //文件收到保护,直到设备启动且用户第一次输入密码  
  5. NSFileProtectionCompleteUnlessOpen                      //文件受到保护,而且只有在设备未被锁定时才可打开,不过即便在设备被锁定时,已经打开的文件还是可以继续使用和写入  


2)keychain项保护

  1. /* 设置keychain项保护等级 */  
  2. NSDictionary *query = @{(__bridge id)kSecClass: (__bridge id)kSecClassGenericPassword,  
  3.                         (__bridge id)kSecAttrGeneric:@"MyItem",  
  4.                         (__bridge id)kSecAttrAccount:@"username",  
  5.                         (__bridge id)kSecValueData:@"password",  
  6.                         (__bridge id)kSecAttrService:[NSBundle mainBundle].bundleIdentifier,  
  7.                         (__bridge id)kSecAttrLabel:@"",  
  8.                         (__bridge id)kSecAttrDescription:@"",  
  9.                         (__bridge id)kSecAttrAccessible:(__bridge id)kSecAttrAccessibleWhenUnlocked};    
  10.       
  11. OSStatus result = SecItemAdd((__bridge CFDictionaryRef)(query), NULL);  

  1. //keychain项保护等级列表  
  2. kSecAttrAccessibleWhenUnlocked                          //keychain项受到保护,只有在设备未被锁定时才可以访问  
  3. kSecAttrAccessibleAfterFirstUnlock                      //keychain项受到保护,直到设备启动并且用户第一次输入密码  
  4. kSecAttrAccessibleAlways                                //keychain未受保护,任何时候都可以访问 (Default)  
  5. kSecAttrAccessibleWhenUnlockedThisDeviceOnly            //keychain项受到保护,只有在设备未被锁定时才可以访问,而且不可以转移到其他设备  
  6. kSecAttrAccessibleAfterFirstUnlockThisDeviceOnly        //keychain项受到保护,直到设备启动并且用户第一次输入密码,而且不可以转移到其他设备  
  7. kSecAttrAccessibleAlwaysThisDeviceOnly                  //keychain未受保护,任何时候都可以访问,但是不能转移到其他设备  



应用实例


把一段信息infoStrng字符串写进文件,然后通过Data Protection API设置保护。

  1. NSString *documentsPath =[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];  
  2. NSString *filePath = [documentsPath stringByAppendingPathComponent:@"DataProtect"];  
  3. [infoString writeToFile:filePath  
  4.              atomically:YES   
  5.                encoding:NSUTF8StringEncoding  
  6.                   error:nil];  
  7. NSDictionary *attributes = [NSDictionary dictionaryWithObject:NSFileProtectionComplete  
  8.                                                        forKey:NSFileProtectionKey];  
  9. [[NSFileManager defaultManager] setAttributes:attributes  
  10.                                  ofItemAtPath:filePath  
  11.                                         error:nil];  

设备锁屏(带密码保护)后,即使是越狱机,在root权限下cat读取那个文件信息也会被拒绝。

避坑指南:STM32F4的ADC采样FSR传感器,如何稳定读数并校准压力值? 本文详细解析了STM32F4的ADC采样FSR薄膜压力传感器时遇到的读数不稳定和非线性校准问题,提供了从硬件配置到软件滤波的完整解决方案。通过优化ADC设置、改进滤波算法和实施分段线性校准,帮助工程师实现高精度压力测量,特别适用于智能手套和医疗监测等应用场景。 阅读详情

相关推荐

从部署到养成:Hermes智能体接入DeepSeek与微信机器人的完整实战指南

智能体(Agent)正成为大模型从“对话”走向“行动”的关键形态。它通过拆解指令、调用工具、执行任务,让AI真正参与工作流。Hermes作为可本地部署的开源智能体框架,支持接入DeepSeek等主流大模型,并提供网关、工具调用、记忆管理等模块化能力。从Docker容器部署到微信机器人桥接,从自动化定时任务到Computer Use桌面控制,Hermes将个人助理从概念落地为可运行的工程系统。本文基于真实实践,梳理架构原理、部署流程、API配置与高频故障排查,为技术玩家提供一套从零到一的上手指南。

weixin_29045001的博客 263

App安全测评问题处理

App安全测评问题处理 App安全测评问题分类 1.自身安全 权限信息-info.plist中权限字段访问 行为信息-访问相册、拨打电话 2.客户端数据存储安全 ==动态调试攻击风险== 第三方SDK检测 敏感词 3.二进制代码保护 代码未混淆风险 输入监听风险 调试日志函数调用风险 配置文件信息明文存储风险 动态库信息泄露风险 WebView组件跨域访问危险 数据库明文存储风...

dibu3564的博客 754

Material Studio中分子动力学模拟得到密度density和溶解度参数

使用sketh工具画出全原子分子,以异辛烷为例子。

handsome213的博客 7315

iOS应用程序安全风险及漏洞解析

基础介绍 iOS 系统介绍 移动操作系统 基于在 XNU 内核, Darwin OS iOS 是闭源操作系统 使用 OC 与 Swift 作为开发语言 构建在 Cocoa Touch API iOS 应用沙盒 基于 TrustedBSD MAC 强制访问框架 第三方应用程序运行在 mobile 用户权限下 只有系统应用以 root 用户运行 应用程序只能访问自己的文件和数据 IPC 通信被限制 Jailbreak 不完美越狱:设备重启后,之前的越狱状态会失效,需要手动重新越狱 完美越狱:越狱后设备重

Scorpio_m7 3406

双目相机测距原理

普通双目相机具有如下特点:左右两个相机位于同一平面(光轴平行),且相机参数(焦距f)一致。其原理图如下:如图所示,P点为相应的物体位置,CL和CR为左右相机光心位置,PL和PR分别为左相机和右相机拍摄的P点成像结果。f为相机焦距,Z为物体距相机的深度距离,b为左右相机基线距离根据几何关系有:则相应的深度信息计算公式为:(1)其中XL-XR为视差。其余在两侧的情况同样可以用几何关系分析得到该表达式(1),即对于普通双目相机测距可以直接通过公式(1)得到深度结果。

doudou2weiwei的博客 4542

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

【Python程序开发】湖南省职业院校技能大赛python程序开发赛项样题二

况老师话竞赛&blog 2192

[译]关于iOS和OS X废弃的API你需要知道的一切

原文: Everything You Need to Know about iOS and OS X Deprecated APIs 如你所知,已废弃(Deprecated)的API指的是那些已经过时的并且在将来某个时间最终会被移除掉的方法或类。通常,苹果在引入一个更优秀的API后就会把原来的API给废弃掉。因为,新引入的API通常意味着可以更好的发挥新硬件或操作系统的性能,或者可以使用

jarry622的专栏 1393

展锐 Android 15 无听筒方案删除配置

【代码】展锐 Android 15 无听筒方案删除配置。

m0_60898338的博客 165

苹果APP审核被拒绝-关于“程序使用或引用非公开api”问题

审核 二进制文件被拒绝 Your app uses or references the following non-public APIs: xxx,xxx 年前上线的版本因为使用系统非公开api导致了二进制文件被拒绝没审核过,总结下如何解决问题通过审核 如何在项目上线前检查是否引用了系统非公开api,防止审核被拒 如果在万不得已的情况下使用系统非公开api,如何规避Apple的审查、...

chqj_163的专栏 967

Anomalib库安装以及使用

Anomalib是一个专注于异常检测的深度学习库。它的目标是收集最新的异常检测算法,并提供用于在公共和私有数据集上进行基准测试的工具。该库提供了一系列已实现的异常检测算法,这些算法在最近的文献中有所描述。此外,Anomalib还提供了一套工具,方便开发人员开发和实现自定义模型。该库特别注重基于图像的异常检测,旨在识别数据集中的异常图像或图像中的异常像素区域。通过使用Anomalib,用户可以快速构建和评估各种异常检测算法,以满足其特定需求。

mingo_敏 5197

高云FPGA系列教程(2):FPGA点灯工程创建、程序下载和固化

相比于国外FPGA厂商EDA开发环境,几个G到几十个G的大小,高云云源软件安装包也很小巧,界面也很简洁,综合速度非常快,是我没想到的,好像在使用单片机一样,点一下就编译完成了,以本文简单的LED示例工程为例,比特流文件几乎在几秒钟内生成;无论是下载比特流文件到RAM还是Flash中,速度都很快,而且只有一种fs程序文件格式,不用再进行bit/mcs转换;云源软件自带的编辑器也很好用,和Notepad++界面差不多,而且快捷键很方便,具有基本的自动补全功能。

whik1194的博客 5460

iOS安全攻防

再网上看到一系列帖子觉得不错,但是看起来bu tai f

yangfu132的专栏 808

[游戏排查] Baldur‘s Gate 3 加载完成即崩溃?五步排查帮你快速定位问题

《博德之门3》加载崩溃问题解决方案:针对游戏进度条走完后闪退的情况,提供五步排查法。首先清除LevelCache缓存(成功率最高),其次检查Mod兼容性,然后切换Vulkan/DX11渲染API,再排查存档损坏问题,最后可删除配置目录(需备份存档)。重点提示Steam验证无法解决此类问题,建议按步骤顺序排查,多数情况下前两步即可解决问题。

技术小甜甜:传播可落地技术,帮助个人和企业降低解决真实场景问题的成本 3254

IOS安全[转载]

IOS安全 转载自 http://blog.youkuaiyun.com/column/details/hackingios.html iOS安全攻防(十八):数据保护API   数据保护API 拿越狱检测来说,起初大家只需判断有无安装Cydia就好了,hackers们说好,那我就不安装Cydia也可以动手脚。开发者们又说,那你一定得用的上MobileSubstrate,bash,ssh吧,

bcbobo21cn的专栏 978

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

各种杂七咋八的整理

iOS 7、iOS 8屏幕适配 http://blog.youkuaiyun.com/zhangao0086/article/details/42916713 iOS开发工具系列(按功能分) http://www.cocoachina.com/ios/20140417/8187.html IOS框架和服务 http://blog.youkuaiyun.com/goohong/article/detai...

C 983

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

规避IaaS风险 你要提防不安全的API

把数据、系统和应用放到云环境中的风险已经是众所周知的事情。现今像云安全联盟(CSA)这样的组织一直描述各种云部署模型中存在的风险,并在2015年 5月发表题为“IaaS云存在的错误可能让你的数据处于危险之中”的文章,Symantec描述了一些可能对基础设施及服务(IaaS)云服务的客户产成风险的主要领域。在一次采访中,亚马逊Web服务的资深安全项目经理...

weixin_33798152的博客 470

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

调用ios私有方法,而不被审查出来的方法

简述: 1. 动态的生成私有方法的方法名字,例如,用几个str串 动态的拼接成 方法名字。或者将方法名字加密写着文件中,只有在运行时,读取,解密 加载 调用。 2. 用@selecter()进行调用。

bravegogo的专栏 2696

【最新实验】文件判断函数的安全风险

文件判断函数的安全风险 PHP是以C语言为底层语言的通用开源脚本语言,支持几乎所有流行的数据库以及操作系统,执行效率比完全生成HTML标记的CGI要高许多,主要适用于Web开发领域。最重要的是PHP可以用C、C++进行程序的扩展! 所有文件操作函数都属于敏感函数,当此类函数使用不当或者不安全引用,就会导致业务逻辑上出现问题,会导致诸多安全...

weixin_34195546的博客 217

Android静态安全检测 -> 敏感函数调用风险

敏感函数调用风险 一、API 【1】android.telephony.TelephonyManager.getNetworkOperator( )   获取运营商信息 【2】android.telephony.TelephonyManager.getDeviceId( )   获取设备信息 【3】android.telephony.TelephonyMan

4lwin博客 5593

iOS 判断App是否安装(私有Api)

私有Api 私有 API 是指存放在 PrivateFrameworks 框架中的 API。苹果明确规定上架 Appstore 的应用不能使用私有 API,不过自己私下玩一玩还是挺有意思的。私有 api 的头文件在 Xcode 中是无法查看的,需要使用class-dump导出,不过早有大神导出了完整的头文件供我们使用,大家可以前往 Github 查看。 打开App代码 Class ...

闫海强的博客 2552

Mac下检测ios应用内是否有私有API

背景:当前苹果在审核时只会告诉你项目中使用了私有API,然后拒绝你,不会给你多提供一点点信息,这种情况下,通常我们需要自己去查找项目中使用的私有API或者使用了私有API的第三方库,而这是一个非常麻烦的事。         网上找了一圈,没有发现特别有价值和帮助的文档,许多文档都是直接转载,即使有极少数极个别的文档有点参考价值,但是也存在语焉不详,着实让初学者感到迷惑,浪费了大量的时间,因此,本

老谭编程 5788
上一篇: iOS安全攻防(十七):Fishhook
下一篇: IOS常用开源库
直隶码农
博客等级 码龄19年 95粉丝 103原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值