首页
社区
课程
招聘
[翻译]发现iOS INstruments服务器
发表于: 2018-8-8 16:10 7837

[翻译]发现iOS INstruments服务器

2018-8-8 16:10
7837

Recon Montreal 2018

(译者按:原文来自于一个安全会议上的演讲PPT,有疑问处请直接访问这里)

Instruments是一个由苹果开发的调试工具集
– 时间分析
– 泄露检测
– 追踪文件I/O操作
所有的这些任务都能在iOS上运行

为此,苹果实现了一个服务器,该服务器旨在为在OSX上运行的Instruments前端提供iOS调试统计数据
这个服务器简直就是我们所有想要的有用信息的宝库
图片描述

不管怎么说,我们会和iOS的一个内部进程通信(通常在iOS上被禁止)

MobileDevice.framework提供了OSX上应用和iOS上进程通信的能力,也就是 “Services”

这是IDA和iOS debugserver通信的方式

$ hdiutil mount DeveloperDiskImage.dmg
– com.apple.debugserver.plist
– com.apple.instruments.remoteserver.plist
– com.apple.instruments.deviceservice.plist

浏览 Xcode IDE 二进制文件, 我们在 IDEiPhoneSupport 中发现了这一点:
图片描述
这个关键的代码块实际上是一个反编译的block函数。原始源代码可能类似于:

结论: DTXMessage 是一种通过网络传输Objective-C消息的机制。这允许进程在另一个进程中有效地 "调用" 给定的方法 (可以在完全独立的设备上运行)

现在怎么办?

可以从反汇编中逆向工程序列化Objective-C消息的, 但这是一个艰难的战斗

即使我们完全理解消息序列化, 它仍然没有把故事讲完整。如果服务器只响应特定的消息序列, 该怎么办?

另一种方法是获取通过导线传输的原始数据的样本。静态 + 方法动态获取的成功几率更高。

再次, iOS 调试器的救援!

特别设置的断点将允许我们记录服务器收到的每个序列化消息:
图片描述

我开发了一个 IDA 插件自动记录消息

https://github.com/troybowman/dtxmsg

插件使用反汇编的微代码检测在内存中序列化消息的位置和时间, 并将字节转储到文件
更多关于微码, 详见Ilfak在Recon Brussels 2018的谈话

该插件还可以反序列化每个截获的消息, 并以纯文本的形式将有效负载打印到文件中 (稍后再详细介绍)

图片描述
它看起来像是使用 NSKeyedArchiver 序列化方法选择器, 但是方法参数呢?
runningProcesses 不接受任何参数, 所以让我们看一个不同的消息:

真相正在浮出水面, 但仍然有一个缺失的链接: 消息接收器。谁来决定接收邮件的对象?

记得, 我们注意到这样的东西在 Xcode:

-[DTXConnection makeChannelWithIdentifier:] 似乎确定消息接收器。这个方法做了什么?请注意, 我们捕获了此消息:
图片描述
让我们总结一下:
在查询进程列表时, Xcode 向仪器发送了5条消息
服务器:

请记住, 我们的目标是独立地与服务器通信, 而无需 Apple 代码的帮助。

我们对序列化消息的理解必须是完美的
幸好我们已经有了很多线索
IDA 在这里是无价之宝。我们可以积极改进反编译迄今为止我们已经找到了的所有关键方法。

反编译产生一些重要的结构体:

图片描述

我们终于准备好开始自己发送消息了

独立应用程序 (dtxmsg_client) 也包含在 dtxmsg 插件源中。

此应用程序能够调用 runningProcesses 方法, 检索其返回值, 并以纯文本形式打印它

目标完成!

此应用程序的源代码可供参考

我们还有其他一些可能感兴趣的方法:

dtxmsg_client 可以调用所有这些方法

它们提供了对如何处理复杂方法参数和返回值的更多了解

Instruments服务器负责的不仅仅是简单的进程控制

DTXMessage 也被其他 iOS 开发工具使用

希望这只是个开始!

谢谢大家赏脸!

原文:https://github.com/troybowman/dtxmsg/blob/master/slides.pdf

翻译:daemond【看雪翻译小组】

 
 
 
 
 
 
 
 
 
 
 
 
 

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 1
支持
分享
打赏 + 1.00雪花
打赏次数 1 雪花 + 1.00
 
赞赏  junkboy   +1.00 2018/08/08
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//