1、mediaserverd是什么 

  mediaserverd(/usr/sbin/mediaserverd)是被root进程launchd启动的一个后台(daemon)进程,其描述文件为com.apple.mediaserverd.plist存放在
  /System/Library/LaunchDaemon目录下,系统在启动的时候会扫描该目录下面所有的plist文件,分别启动所有后台进程,大概有
  50多个,后台进程是iOS系统实现伪后台的真正原因。

  

  com.apple.mediaserverd.plist 描述了mediaserverd启动、以及服务的相关信息,mediaserverd主要为系统提供音视频编解码的服务,包含声音输出录音,视频解码编码等。

  通过plist中 com.apple.airplay.sender.xpc 的描述,可以看出来mediaserverd提供了一个xpc的服务

  XPC是苹果系统上一种进程间通信的技术,XPC 目的是提高 App 的安全性和稳定性。XPC 让进程间通信变得更容易,让我们能够相对容易地将 App 拆分成多个进程的模式。

<key>MachServices</key>
<dict>
<key>com.apple.BTAudioHALPlugin.xpc</key>
<true/>
<key>com.apple.airplay.sender.xpc</key>
<true/>
<key>com.apple.audio.AUPBServer</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.audio.AURemoteIOServer</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.audio.AudioConverterServer</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.audio.AudioFileServer</key>
<true/>
<key>com.apple.audio.AudioQueueServer</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.audio.AudioSession</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.audio.AudioUnitServer</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.audio.SystemSounds</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.admin</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.asset</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.assetimagegenerator</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.audiodeviceclock</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.audioprocessingtap</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.cpe</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.cpeprotector</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.endpoint</key>
<true/>
<key>com.apple.coremedia.formatreader</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.mutablecomposition</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.recorder</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.remaker</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.sandboxserver</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.videocompositor</key>
<true/>
<key>com.apple.coremedia.videoqueue</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.virtualdisplay</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.coremedia.virtualdisplayserver</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.fig.movie</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.mediaserverd</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.videoconference.avconference</key>
<dict>
<key>ResetAtClose</key>
<true/>
</dict>
<key>com.apple.videoconference.camera</key>
<dict/>
</dict>

2、mediaserverd进程的作用和工作原理

  mediaserverd提供音视频服务功能,用户app进程通过调用xpc服务,对视频进行解码编码。

  xpc调用参考:https://objccn.io/issue-14-4/

  音视频的解码涉及到对硬件的操作,mediaserverd中包含大量调用驱动层的代码,通过xpc可以防止用户进行溢出攻击,提高系统的稳定性。因为同一的xpc接口,跨进程,提高了溢出攻击伪造数据的难度。

  在越狱手机上通过对mediaserverd中声音的服务进行hook,可以进行录音,比如通话录音等。

3、mediaserverd 中有用的方法

  通过反汇编发现mediaserverd由C编写,不是mach-o格式的二进制文件,反汇编之后暴露出来的符号较少,通过class-dump无法提取有用信息。

  下面是一段播放系统铃音的代码

int sub_b4fc() {
sp = sp - 0x8;
r0 = *0x23b50;
if (r0 != 0x0) goto loc_b5fc; loc_b514:
r0 = dlopen("/System/Library/PrivateFrameworks/MediaToolbox.framework/MediaToolbox", 0x1);
*(0x23b50 + 0x4) = r0;
if (r0 != 0x0) goto loc_b54a; loc_b528:
r1 = dlopen("/System/Library/PrivateFrameworks/Celestial.framework/Celestial", 0x1);
r0 = 0x21666967;
*(0x23b50 + 0x4) = r1;
if (r1 == 0x0) goto .l3; loc_b54a:
dlerror();
*0x23b50 = dlsym(*(0x23b50 + 0x4), "FigMediaServerStart");
r0 = dlerror();
if ((r0 != 0x0) || (*0x23b50 == 0x0)) goto loc_b600; loc_b56e:
*(0x23b50 + 0x8) = dlsym(*(0x23b50 + 0x4), "FigMediaServerStop");
r0 = dlerror();
if ((r0 != 0x0) || (*(0x23b50 + 0x8) == 0x0)) goto loc_b600; loc_b58e:
*(0x23b50 + 0xc) = dlsym(*(0x23b50 + 0x4), "FigMediaServerSystemSoundIDShouldPlayWithVolume");
r0 = dlerror();
if ((r0 != 0x0) || (*(0x23b50 + 0xc) == 0x0)) goto loc_b600; loc_b5aa:
*(0x23b50 + 0x10) = dlsym(*(0x23b50 + 0x4), "FigMediaServerVibrateForSystemSoundID");
r0 = dlerror();
if ((r0 != 0x0) || (*(0x23b50 + 0x10) == 0x0)) goto loc_b600; loc_b5c6:
*(0x23b50 + 0x14) = dlsym(*(0x23b50 + 0x4), "FigMediaServerSystemSoundIDActivate");
r0 = dlerror();
if ((r0 != 0x0) || (*(0x23b50 + 0x14) == 0x0)) goto loc_b600; loc_b5e2:
r4 = 0x23b50;
asm{ ldrd r0, r1, [r0] };
asm{ stm.w sp, {r0, r1} };
FigRecalcSumIndex();
r0 = *r4;
goto loc_b5fc; loc_b5fc:
r0 = (r0)(r0);
return r0; .l3:
return r0; loc_b600:
r1 = "%s\n";
r3 = *___stderrp;
fprintf(r3, r1);
r0 = 0x21666967;
return r0;
}

  

mediaserverd的更多相关文章

  1. iOS开发-应用崩溃日志揭秘(一)

    作为一名应用开发者,你是否有过如下经历? 为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! 如果 ...

  2. iOS开发--应用崩溃日志揭秘(二)

    场景 4: 吃棒棒糖时闪退! 用户邮件说, “当rage master吃棒棒糖时应用就闪退…” 另一用户说, “我让rage master 吃棒棒糖,没几次应用就闪退了!”崩溃日志如下: Incide ...

  3. iOS测试常见崩溃

    什么是崩溃日志,从哪里能得它? iOS设备上的应用闪退时,操作系统会生成一个崩溃报告,也叫崩溃日志,保存在设备上.崩溃日志上有很多有用的信息,包括应用是什么情况下闪退的.通常,上面有每个正在执行线程的 ...

  4. 【转】iOS应用崩溃日志分析

    作为一名应用开发者,你是否有过如下经历?   为确保你的应用正确无误,在将其提交到应用商店之前,你必定进行了大量的测试工作.它在你的设备上也运行得很好,但是,上了应用商店后,还是有用户抱怨会闪退 ! ...

  5. 【转】iOS应用崩溃日志揭秘2

    这篇文章还可以在这里找到 英语 场景 4: 吃棒棒糖时闪退! 用户邮件说, "当rage master吃棒棒糖时应用就闪退-" 另一用户说, "我让rage master ...

  6. 【转】iOS应用崩溃日志揭秘

    这篇文章还可以在这里找到 英语 If you're new here, you may want to subscribe to my RSS feed or follow me on Twitter ...

  7. IOS高级开发~开机启动&无限后台运行&监听进程

    一般来说, IOS很少给App后台运行的权限. 仅有的方式就是 VoIP. IOS少有的为VoIP应用提供了后台socket连接,定期唤醒并且随开机启动的权限.而这些就是IOS上实现VoIP App的 ...

  8. 用 iOS-System-Services 框架获取iOS设备所用的设备信息

    参考资料地址 https://github.com/Shmoopi/iOS-System-Services 百度云盘下载地址 http://pan.baidu.com/s/1c05ot1m This ...

  9. 网络电话pjsip Getting Started: Building for Apple iPhone, iPad and iPod Touch

    Getting Started: Building for Apple iPhone, iPad and iPod Touch ¶ Getting Started Preparation Get th ...

  10. iOS 越狱Keynote

    [iOS Keynote] 1.2009年暴露的IKee病毒是iOS上公开的第一款蠕虫病毒,它会感染那些已经越狱并且安装了SSH,但是又没有更改其默认root密码"alpine"的 ...

随机推荐

  1. docker 应用篇————docker 的文件系统[十]

    前言 简单介绍一下docker的文件系统. 正文 docker 容器启动就是一个文件系统的启动. 在docker中,每一层镜像都具备一些文件. 比如说,有一个centos的镜像. 里面就是一个微小版的 ...

  2. Advanced .Net Debugging 7:托管堆与垃圾收集

    一.简介 这是我的<Advanced .Net Debugging>这个系列的第七篇文章.这篇文章的内容是原书的第二部分的[调试实战]的第五章,这一章主要讲的是从根本上认识托管堆和垃圾回收 ...

  3. 力扣182(MySQL)-查找重复的电子邮箱(简单)

    题目: 编写一个 SQL 查询,查找 Person 表中所有重复的电子邮箱. 示例:  解题思路: 方法一: 使用group by 按Email来分组,然后使用having选择count(id)> ...

  4. 力扣697(java)-数组的度(简单)

    题目: 给定一个非空且只包含非负数的整数数组 nums,数组的 度 的定义是指数组里任一元素出现频数的最大值. 你的任务是在 nums 中找到与 nums 拥有相同大小的度的最短连续子数组,返回其长度 ...

  5. 以“升舱”之名,谈谈云原生数据仓库AnalyticDB的核心技术

    简介: 企业级云原生数据仓库AnalyticDB提出了升舱计划,旨在承担和帮助金融.运营商.政务等行业构建下一代数据管理和分析系统,以应对不断增长的数据规模,业务数字化转型,和传统数仓替换升级需求.7 ...

  6. 多任务学习模型之ESMM介绍与实现

    ​简介:本文介绍的是阿里巴巴团队发表在 SIGIR'2018 的论文<Entire Space Multi-Task Model: An Effective Approach for Estima ...

  7. 应对 Job 场景,Serverless 如何帮助企业便捷上云

    简介:函数计算作为事件驱动的全托管计算服务,其执行模式天生就与这类 Job 场景非常契合,对上述痛点进行了全方面的支持,助力"任务"的无服务器上云. 作者:冯一博 任务(Jobs) ...

  8. dotnet OpenXML 解析 PPT 图表 解析日期时间表示内容

    在 OpenXML 里的图表存放的日期时间很多存放的是数值,需要进行转换才能获取到用户可见的字符串 日期在 OpenXML 里可以使用数值存放,需要根据数值和格式化字符串转换为用户可见的字符串 如以下 ...

  9. .NET Aspire 预览版 6 发布

    .NET Aspire 预览版 6 引入了一系列重大更新,主要包括 API 的重大更改.安全性和可靠性的提升.新的资源和组件.应用程序主机的更新.测试支持.模板更新.组件更新.Azure 配置包的更新 ...

  10. SQL 多表关联更新语句

    A表WHERE条件来自B表查询结果集 UPDATE a SET a.is_sync = 0 FROM A表 a LEFT JOIN B表 b ON a.order_id = b.order_id AN ...