iOS 系统分析(一) 阅读内核准备知识

news/2024/6/26 20:46:19

原文出自【听云技术博客】:http://blog.tingyun.com/web/a...

0x01 iOS体系架构
1.1 iOS 系统的整体体系架构

用户体验( The User Experience layer ):SpringBoard 同时支持 Spotlight。

应用软件开发框架(The Application Frameworks layer):Cocoa ( Cocoa Touch )。

核心开发框架(The Core Frameworks):图形和多媒体一类软件的开发环境,包括 核心框架,Open GL和QuickTime等。

Darwin:系统内核核心:包括 内核 和Unix Shell 环境。

图片描述

1.2 Darwin体系

图片描述

1.3 XNU概述

Darwin是一种类似unix的操作系统,他的核心是XNU。

XNU是一种混合式内核。结合了mach与BSD两种内核。

Mach 是微内核实现。

BSD 实现在Mach的上层,这一层提供的API 支持了POSIX标准模型。在XNU中主要实现了一些高级的API与模块。

1.3.1 Mach 微内核简介

在XNU中主要完成以下几个功能:

进程与线程的抽象

虚拟内存管理

任务调度

进程间通信

1.3.2 BSD 内核简介

BSD 实现在Mach的上层,这一层提供的API 支持了POSIX标准模型。在XNU中主要实现了一些高级的API与模块。

UNIX 进程模型;

POSIX 线程模型即pthread,以及相关的同步功能;

UNIX的用户与组管理;

网络协议栈(BSD Socket API),符合POSIX 模型;

文件系统/设备系统;

1.3.3 libKern

实现了一个C+ +的子集(以库的形式为支持C+ +提供了运行时),为I/O kit 提供基础设施;

1.3.4 I/O kit

I/O kit 是XNU 不同于其他操作系统的设备驱动框架。IOKit是一个面向对象的驱动模型框架,它是早期DriverKit的一个翻版,Driver Kit是使用Objective-C写的,而IOKit是一个C+ +的驱动架构,它在DriverKit的基础上做了很大的改进,比如IOKit可以写在用户空间跑的驱动(虽然大多仍是跑在内核空间上的),因而驱动挂了而系统不会挂。另外IOKit考虑到了计算机发展的趋势,所以在电源管理、即插即用、动态加载上做得更好。

0x02 iOS安全机制

2.1 代码签名

在iOS开发者使用的机器上应该已经有一个证书,一个公钥,以及一个私钥。这些事代码签名机制的核心。像SSL一样,代码签名也依赖于采用X.509 标准的公开密钥加密体系。无论是用户还是开发者都不能改变应用开启策略,你必须有一个开发者帐号或者应用发布证书才能让应用运行在 iOS 系统上。

2.2(强制访问控制(Mandatory Access Control)

iOS的entitlement 机制的基础。简称MAC,用于将系统中的信息分密级和类进行管理,以保证每个用户只能访问那些被标明可以由他访问的信息的一种访问约束机制。通俗的说,在MAC下,用户与文件都被标记了固定的安全属性(如安全级别,访问权限等),在每次访问发生时,系统检测安全属性以便确定一个用户是否有权访问该文件)。

2.3 沙盒机制(sandbox)

沙盒是一种安全机制,为运行中的程序提供隔离环境。沙盒在启动的时候可以设置运行的程序是否可以访问网络、文件、目录等。

图片描述

参考 《深入解析Mac OS X & iOS操作系统》


http://lihuaxi.xjx100.cn/news/242437.html

相关文章

Unable to complete the scan for annotations for web application

2019独角兽企业重金招聘Python工程师标准>>> Unable to complete the scan for annotations for web application [/CMIG] due to a StackOverflowError. Possible root causes include a too low setting for -Xss and illegal cyclic inheritance dependencies. T…

Python组合数据类型之字典类型

单元概述 主要解决问题:让程序更好地处理一组数据 三类重要组合数据类型:集合类型、序列类型和字典类型 学完本章,我们能够在头脑中建立集合、序列和字典的模式来表达对一组数据的表达和处理 1. 定义 首先理解“映射”的概念 -映射是一种键…

UI设计培训分享:平面广告设计中的文案表达技巧

UI设计培训包含平面设计,而且其中的应用频率是非常大的,本期小编就为大家详细的介绍一下平面广告设计中的文案表达技巧,希望下面的介绍能够帮助到正在学习UI设计的同学们。 平面广告设计中的文案表达技巧,平面广告中文案的编排创意…

测试两台linux服务器端口,怎么在Linux服务器上测试TCP/UDP端口的连通性?

翻译自:How to Test Port[TCP/UDP] Connectivity from a Linux Server (文档 ID 2212626.1)适用于:Linux OS - Version Oracle Linux 5.0 to Oracle Linux 6.8 [Release OL5 to OL6U8]Information in this document applies to any platform.目标&#x…

android 获取手机GSM/CDMA信号信息,并获得基站信息

本文转自:http://software.intel.com/zh-cn/blogs/2011/12/16/android-gsmcdma/ 在Android中我们常用的轻松获取WIFI信号列表,那如何获取CDMA或者GSM的手机信号呢?系统提供了TelephonyManager类,此类非常丰富,基本你所…

Python jieba库的使用

1. 介绍 jieba是优秀的中文分词第三方库 -中文文本需要通过分词获得单个词语 -提供了三种分词模式,但最简单只需掌握一个函数 安装方式 (cmd命令行)pip install jieba jieba库分词原理:利用中文词库,确认汉字之间的关联概率,例…

linux中ftp用户,linux中怎么添加ftp用户

Linux下创建用户是很easy的事情了,只不过不经常去做这些操作,时间久了就容易忘记。那么linux中怎么添加ftp用户,下面跟着学习啦小编一起来了解一下吧。linux中怎么添加ftp用户在linux中添加ftp用,并设置相应的权限,操作…

Python培训分享:python爬虫可以用来做什么?

爬虫又被称为网络蜘蛛,它可以抓取我们页面的一些相关数据,近几年Python技术的到来,让我们对爬虫有了一个新的认知,那就是Python爬虫,下面我们就来看看python爬虫可以用来做什么? Python培训分享:python爬虫…