之前的文章探讨了与解锁过程和WhatsApp应用程序相关的某些iOS统一日志。本文将分享当用户使用iPhone进行通话时可以分析的统一日志。事实上,如果用户通过电话应用程序或Siri等方式呼叫选定的联系人,生成的统一日志会有很大不同,从而提供有价值的说明。
1. 手机应用程序
正如之前所研究的,通过点击图标打开应用程序会产生大量日志。SpringBoard进程尤其会记录日志,明确说明已打开的应用程序(如果是本地应用程序)。下面提供的统一日志分析揭示了该应用程序的打开过程。
时间戳 |
日志 |
2023-12-15 22:02:03 |
SpringBoard: Allowing tap for icon view 'com.apple.mobilephone' |
2023-12-15 22:02:03 |
SpringBoard: Icon tapped: <private> |
2023-12-15 22:02:03 |
SpringBoard: Initiating launch from icon view: <private> |
2023-12-15 22:02:03 |
SpringBoard: Bootstrapping application<com.apple.mobilephone> with intent foreground-interactive |
2023-12-15 22:02:03 |
SpringBoard: [sceneID:com.apple.mobilephone-default] Scene lifecycle state did change: Foreground |
2023-12-15 22:02:04 |
MobilePhone: Resuming to tab type: 4 |
SpringBoard进程记录的前三条日志不言自明,似乎没有必要提供进一步的详细说明,因为它们明确提到"手机"应用程序是从图标启动的,从而表明可能存在对设备的操作。但需要注意的是,第四条日志"Boostrapping application..."只有在应用程序打开前未在后台运行时才会被记录(因此如果在今后的调查中没有发现该日志,请不要感到惊讶)。换句话说,应用程序在用户激活之前就已完全关闭。SpringBoard进程的最终日志记录的是应用程序在iPhone屏幕上打开并准备使用时的情况,而MobilePhone进程的日志则是"电话"应用程序的特有日志,记录的是用户在打开应用程序时进入的"标签页"。当"电话"应用程序打开时,用户会看到以下五个标签页:
电话应用程序中的五个选项卡。
每个标签页都有一个编号,以便调查人员确定电话是从哪个标签页打出的。
时间戳 |
日志 |
标签页 |
2023-12-15 22:02:05 |
MobilePhone: Activity continuity - Activity needs saving as the tab bar tab changed to 1 |
Favourites |
2023-12-15 22:02:05 |
MobilePhone: Activity continuity - Activity needs saving as the tab bar tab changed to 2 |
Recents |
2023-12-15 22:02:05 |
MobilePhone: Activity continuity - Activity needs saving as the tab bar tab changed to 3 |
Contacts |
2023-12-15 22:02:05 |
MobilePhone: Activity continuity - Activity needs saving as the tab bar tab changed to 4 |
Keypad |
2023-12-15 22:02:05 |
MobilePhone: Activity continuity - Activity needs saving as the tab bar tab changed to 5 |
Voicemail |
回到初始表格,可以发现用户在打开应用程序时访问了键盘("MobilePhone: Resuming to tab type: 4")。此外,用户每次切换标签页时,上述表格中都会记录相应的条目。这样,调查人员就可以精确地确定用户所采取的顺序步骤。
同时,当应用程序退出时,无论是将其置于后台还是完全关闭,MobilePhone进程都会记录类似的日志。例如
时间戳 |
日志 |
2023-12-15 22:02:07 |
MobilePhone: Wrote out last tab type: 4 |
因此,通过这两个打开和关闭日志,调查人员可以精确地确定用户在退出应用程序时在应用程序中的位置。
2. 从联系人选项卡拨打电话
在点击联系人姓名之前,用户需要导航到"联系人"选项卡。因此应该在之前的两个统一日志中找到一个提到"选项卡3"(日志"恢复到选项卡类型:3 "或日志"Activity continuity - Activity needs saving as the tab bar tab changed to 3")。进入正确的选项卡后,用户点击要呼叫的联系人姓名,就会记录以下统一日志:
时间戳 |
日志 |
2023-12-15 22:02:07 |
MobilePhone: [CNContactContentViewController] setting contact with identifier BAA334FE-0D1B-4EBA-8676-8E90EE3683A5:ABPerson |
2023-12-15 22:02:07 |
MobilePhone: [CNContactContentViewController] setting contact with identifier C30E9AAC-8263-4B6C-8ED2-26CB345DC30A:ABPerson |
2023-12-15 22:02:07 |
SpringBoard: Received trusted open application request for "com.apple.InCallService" from <FBApplicationProcess: 0x73e92c510; application<com.apple.mobilephone>:1041(vB80)>. |
2023-12-15 22:02:07 |
callservicesd: Call started outgoing: <private> |
2023-12-15 22:02:07 |
callservicesd: All calls ended. Setting uplink and downlink muted to NO. |
如上表所示,每个联系人都有一个唯一的字母数字标识符(上表中第一个和第二个统一日志是两个不同联系人的示例)。一旦用户点击了自己选择的联系人,就可以发起呼叫,生成的SpringBoard日志显示"InCallService"应用程序是由com.apple.mobilephone应用程序打开的。这一点特别有趣。此外,当呼叫开始时,callservcicesd进程会在名为"呼叫开始呼出"的日志中进行记录。最后,通话结束时,callservicesd进程也会记录这一事件。通过这些不同的统一日志,我们可以精确地确定呼叫是如何开始的。
3. 从键盘选项卡拨打电话
与呼叫已保存的联系人类似,用户需要先点击"键盘"选项卡,然后才能键入号码,这样就会生成一个日志,其中提到这是第4个选项卡。找到该日志是一个很好的初始指示器。
当然用户必须在键盘选项卡上键入要拨打的号码。研究过程发现了以下令人惊讶的现象:键盘上的每个数字都会生成不同的日志!换句话说,只需分析统一日志,就能精确确定用户输入的数字:
日志 |
编号 |
mediaserverd: SSServerImp.cpp:732 -> Incoming Request : actionID 1200, inClientPID 1041(MobilePhone), inBehavior 0, customVibeDataProvided 0, loop 1, loopPeriod 0.000000, inFlags 0, inClientCompletionToken 1, inClientAudioSessionID 0 |
0 |
mediaserverd: SSServerImp.cpp:732 -> Incoming Request : actionID 1201, inClientPID 1041(MobilePhone), inBehavior 0, customVibeDataProvided 0, loop 1, loopPeriod 0.000000, inFlags 0, inClientCompletionToken 2, inClientAudioSessionID 0 |
1 |
mediaserverd: SSServerImp.cpp:732 -> Incoming Request : actionID 1202, inClientPID 1041(MobilePhone), inBehavior 0, customVibeDataProvided 0, loop 1, loopPeriod 0.000000, inFlags 0, inClientCompletionToken 3, inClientAudioSessionID 0 |
2 |
…… |
…… |
mediaserverd: SSServerImp.cpp:732 -> Incoming Request : actionID 1207, inClientPID 1041(MobilePhone), inBehavior 0, customVibeDataProvided 0, loop 1, loopPeriod 0.000000, inFlags 0, inClientCompletionToken 4, inClientAudioSessionID 0 |
7 |
mediaserverd: SSServerImp.cpp:732 -> Incoming Request : actionID 1208, inClientPID 1041(MobilePhone), inBehavior 0, customVibeDataProvided 0, loop 1, loopPeriod 0.000000, inFlags 0, inClientCompletionToken 5, inClientAudioSessionID 0 |
8 |
mediaserverd: SSServerImp.cpp:732 -> Incoming Request : actionID 1209, inClientPID 1041(MobilePhone), inBehavior 0, customVibeDataProvided 0, loop 1, loopPeriod 0.000000, inFlags 0, inClientCompletionToken 6, inClientAudioSessionID 0 |
9 |
如上表所示,mediaserverd进程记录的与操作ID(从操作ID1200到操作ID1209)相关的数字告诉我们用户按下的数字!这些统一日志再次显示了用户按下的数字和顺序。最后,当用户决定拨打在键盘上输入的号码时,以及随后通话结束时,之前检查过的两个通话记录都将被记录下来。
4. 从快速拨号呼叫
用户还可以选择将最喜欢的联系人保存为"小工具"。这将在iPhone的"Today"屏幕上为该联系人生成一个图标。当用户滚动到侧面并访问"Today"页面时,SpringBoard进程会记录下表中的前两个统一日志:
时间戳 |
日志 |
2023-12-15 22:03:47 |
SpringBoard: Today view overlay will appear. animated: Yes. |
2023-12-15 22:03:47 |
SpringBoard: Overlay today view did scroll to reveal icons |
2023-12-15 22:03:47 |
SpringBoard: Setting visibility of widget com.apple. PeopleViewService. PeopleWidget-iOS to visible settled |
2023-12-15 22:03:47 |
SpringBoard: [0x73f872800-timeline[com.apple.PeopleViewService.PeopleWidget-iOS:SingleContactWidget_iOS:systemSmall:-9220794473229687680:148.00/148.00/20.20:(null)]] Received actions: {(<UIOpenURLAction: 0x2832254c0; info: <BSSettings: 0x2832273c0> {url = people:showSearchResult?contactIdentifier=BAA334FE-0D1B-4EBA-8676-8E90EE3683A5:ABPerson;}; responder: <_BSActionResponder: 0x281fab640; active: YES> clientInvalidated = NO; clientEncoded = NO;>)} |
2023-12-15 22:03:47 |
callservicesd: Call started outgoing: <private> |
2023-12-15 22:03:47 |
callservicesd: All calls ended. Setting uplink and downlink muted to NO. |
前两条日志提供了用户访问"今日"页面的明确信息。调查过程发现“我的联系人”小部件位于"今日"页面的底部。在点击任何一个小部件之前,我必须向下滚动,当这些小部件显示在我的屏幕上时,上表中的第三个日志就被记录了下来。当联系人的各种小工具显示出来后,用户就可以点击其中一个。点击所需的联系人后,它们各自的"页面"就会打开,并生成上表中的第四条日志。值得注意的是,该日志还提到了分配给联系人的字母数字代码(如前所述),与"联系人"选项卡分配的代码完全相同。
因此,这些不同的统一日志使数字调查人员能够证明手机确实是被人操纵,目的是拨打电话。最后,仅供参考,退出"今日"页面会生成以下两个统一日志:
时间戳 |
日志 |
2023-12-15 22:07:09 |
SpringBoard: Overlay today view did disappear |
2023-12-15 22:07:09 |
SpringBoard: Today view overlay did disappear, animated: YES. |
5. 用Siri打电话
当然,在向Siri提问并得到回复之前,必须先激活Siri。为了强调这一点,下表中的第一个日志可能会有所帮助。事实上,无论手机处于锁定还是解锁状态,该日志都会在Siri激活时(以及用户退出Siri时)进行记录:
时间戳 |
日志 |
2023-12-15 22:10:23 |
SpringBoard: Siri: speech interaction activity started |
2023-12-15 22:10:24 |
SpringBoard: Siri: preheat |
2023-12-15 22:10:24 |
SpringBoard: Siri: Successfully started preheat |
2023-12-15 22:10:24 |
assistantd: Sending SpeechRecognized command |
2023-12-15 22:10:24 |
SpringBoard: Received trusted open application request for "com.apple.InCallService" from <FBProcess: 0x73ee457f0; osservice<com.apple.assistantd>:37(v175)>. |
2023-12-15 22:10:24 |
callservicesd: Call started outgoing: <private> |
2023-12-15 22:10:24 |
SpringBoard: [0x2815616c0:(FBSceneManager):sceneID:com.apple.InCallService-F61C1AB1-9A74-471E-B686-BCCF02BBFEC9] Scene lifecycle state did change: Foreground |
2023-12-15 22:10:24 |
callservicesd: All calls ended. Setting uplink and downlink muted to NO |
SpringBoard进程记录的前三个统一日志只是显示Siri的激活情况,如果需要演示Siri的使用,这可能非常重要,也是一个很好的起点。第四条日志记录的是Siri对我们的请求做出语音回应(例如,确认所说内容和请求确认)的情况。因此,该日志证明了用户与Siri之间的互动。
第五条日志尤其有趣,因为它显示"InCallService"位置的打开是由assistantd进程生成的,而该进程正是与Siri相关的进程。这让我们想起了之前在"从联系人选项卡拨打电话"部分中学习的内容,当时记录的统一日志中写道:"SpringBoard:收到受信任的打开应用程序请求com.apple.InCallService"的受信任打开应用程序请求:0x73e92c510; application<com.apple.mobilephone"。因此,通过调查这两种方法的特定统一日志,我们可以很容易地分辨出电话应用程序拨打的电话和通过Siri发起的电话之间的区别。
6. 结论
使用iPhone拨打电话有无数种方法,在这里只探讨了其中几种。不过本文中研究的各种示例应能准确、详细地调查这些操作,从而揭示用户是否确实操作了他们的手机。
本文对统一日志进行了探讨。通过统一日志,可以突出显示iPhone用户拨打电话的不同步骤。,在点击联系人姓名、在键盘上输入号码或激活Siri时记录的统一日志是截然不同的。因此调查这些统一日志将使调查人员能够确定采用了哪种方法,这在某些数字调查中至关重要。
原文始发于微信公众号(电子取证及可信应用协创中心):iOS统一日志-拨打电话
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论