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. 接口API用例自动转locust测试用例

    做接口测试是必要的,写完接口测试用例,再写locust压测脚本,其实差异不大: 写个简单的py,把接口测试脚本转为locust压测脚本,本例只是简单的示范: 原接口校验脚本: 1 # -*- codi ...

  2. Node 中的 Stream ?应用场景?

    一.是什么 流(Stream),是一种数据传输手段,是端到端信息交换的一种方式,是有顺序的,是逐块读取数据.处理内容,用于顺序读取输入或写入输出 在很多时候,流(Stream)是字节流(Byte St ...

  3. WPF/C#:让绘制的图形可以被选中并将信息显示在ListBox中

    实现的效果 如果你对此感兴趣,可以接着往下阅读. 实现过程 绘制矩形 比如说我想绘制一个3行4列的表格: private void Button_Click_DrawRect(object sende ...

  4. 6980. 【2021.02.03冬令营模拟】你的世界(world) Another Solution

    Problem Description Input 从文件 world.in 中读入数据. Output 输出到文件 world.out 中. 输出共 T 行,第 i 行表示第 i 组测试数据的答案, ...

  5. 力扣594(java&python)-最长和谐子序列(简单)

    题目: 和谐数组是指一个数组里元素的最大值和最小值之间的差别 正好是 1 . 现在,给你一个整数数组 nums ,请你在所有可能的子序列中找到最长的和谐子序列的长度. 数组的子序列是一个由数组派生出来 ...

  6. 读书笔记 dotnet 的字符串在内存是如何存放

    本文是读伟民哥翻译的 .NET内存管理宝典 这本书的笔记,我认为读书的过程也需要实践,这样对一知半解的知识也有较为清晰的了解.在阅读到 string 在内存的布局时,我看到 RuntimeHelper ...

  7. 《最新出炉》系列入门篇-Python+Playwright自动化测试-42-强大的可视化追踪利器Trace Viewer

    1.简介 在我们日常执行自动化测试工作的过程中,经常会遇到一些偶发性的bug,但是因为bug是偶发性的,我们不一定每次执行都能复现,所以我们在测试执行的时候,追踪用例执行就变得非常重要了.playwr ...

  8. Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本

    [0]toLua的导入 下载toLua资源包,访问GitHub项目地址,点击下载即可. 将文件导入工程目录中: 导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击Generate All 重新 ...

  9. rails 写入日志函数

    json_object={ "ip"=> "127.0.0.1", "ports"=> '80,135', "data ...

  10. MinDoc 编译安装(linux环境)

    目录 MinDoc 简介 项目地址: 下面以 Linux 系统为例: Gomod方式安装 下载项目代码到本地 写入依赖 下载依赖 创建数据库 配置数据库 编译main.go 提升文件权限 初使化数据库 ...