三星设备电源事件取证分析:eRR.p文件深度解析

本文深入分析三星设备中的eRR.p文件及其相关文件,探讨如何通过这些文件识别设备关机原因,包括用户主动关机、电池耗尽、系统更新、ADB命令及内核崩溃等不同场景的取证方法。

调查三星设备上的电源事件

引言

最近我们在工作中收到一封电子邮件,询问作者在当地电视台看到的一段视频片段。该片段显示一名取证检查员正在检查三星手机上的一个文件,该文件表明有人关闭了手机。事实证明该片段有些误导性,但我熟悉那个文件,这就是我知道被检查的手机是三星的原因。

据我所知,还没有关于这个特定文件(或其相关文件)的博客文章,所以我认为有必要写一篇简短的文章。请注意,本文将围绕三星手机展开,但如果存在普通Android等效文件,我会指出来。

按钮,按钮。谁按了按钮?

在讨论关闭Android手机电源时,了解用户操作方式很重要。如果您是现代iPhone用户,您知道需要按住侧边按钮和音量减小按钮几秒钟,然后有机会向左滑动。根据您的手机型号,Android的操作可能略有不同。

与iPhone类似,当您按住正确的按钮组合几秒钟时,会出现几个选项。参见图1和图2。

图1. 我的三星S22上的Android电源选项。

图2. 我的Pixel 5a上的Android电源选项。

选项相似,但打开方式不同。要调用电源选项,我必须按住至少一个按钮。在Pixel上,只需按住顶部单个按钮。但对于三星来说,调用电源选项屏幕更像iPhone。除了按住底部单个按钮(又名"Bixby"按钮)外,我还必须同时按住音量减小按钮。这种按钮组合是为了保护用户免于意外电源事件。

从这里,用户可以选择他们想要的电源选项、拨打紧急电话或取消操作。

相关文件

当Digital Wellbeing在2019/2020年推出时,检查员获得了一个显示电源事件的新工件。当然,检查员可以使用其他工件来查看电源事件,但Digital Wellbeing更加明确。Digital Wellbeing的问题在于它不会告诉检查员关机事件发生的原因。是由于系统更新、电池没电还是人为操作?从调查的角度来看,原因可能非常重要。

三星手机有一个补充Digital Wellbeing的工件,并且在我看来也同样明确。它还有一个额外的好处,可以显示关机事件发生的原因。该文件是eRR.p,可以在USERDATA/system/users/service/data/中找到,并且由于其位置,仅在完整的文件系统提取中可用。

我在Android 9版本中就见过eRR.p,但可能更早。我的测试和下面的截图显示了Android 13中的情况,但我在Android 12中也观察到了相同的行为。

eRR.p在我测试的取证工具中渲染效果不佳。我发现查看它的最佳方法是使用Visual Studio Code。参见图3。

图3. eRR.p。

读取eRR.p中条目的最佳方法因发生的情况而异。从简单的内容开始,参见图4。

图4. 一次关机。

图4中红色框中的区域代表一个单一事件:我使用手机上的正确按钮序列(音量减小 + Bixby > 选择关机)关闭了手机。您有关机时间09:47:14、事件SHUTDOWN和原因userrequested。eRR.p的好处是它会提供时间戳的时区偏移,这可以在所有屏幕截图中看到。虽然任何情况都有可能,但意外完成正确序列的几率相当低。知道手机以这种方式关机可能具有调查价值。

更进一步,读取图4中的条目加上下一个条目。参见图5。

图5. 关机后开机。

在图5中有一个更广泛的事件。图4中的关机事件存在,但随后的开机事件也可见。在09:52:22,使用Bixby按钮开启了三星手机,这在这里反映出来。时间戳之后,我们有ON,后跟值NP。虽然我还没有找到任何文档支持我的想法,但我怀疑NP代表"no power"。设备从"无电源"状态变为开机状态。NP之后是手机型号(S901B),除此之外我们还有两个字段,OFFSRC和ONSRC。前者的值是PWRHOLD,这表明我遵循了正确的按钮序列(可能是"power hold")。后者ONSRC的值为PWRON,这表明我按住了Bixby按钮来打开手机。

关于ONSRC的补充说明。我还观察到了值ACOKB和INST_ACOK。这两个值都在手机连接充电器时出现,但我无法确定这两个值之间的区别。起初我以为这可能与设备的充电方式有关(例如,使用墙壁充电器与计算机USB充电),但我的结果不一致,因此需要更多测试。

将图5中的两个条目作为一对阅读有助于更好地理解发生的事情。有人可能通过使用正确的按钮序列关闭了手机,随后通过Bixby按钮打开了它。您可以轻松地单独阅读每个条目并得出相同的结论,但我更喜欢围绕每个事件有上下文。

接下来我使用正确的按钮序列(音量减小 + Bixby > 选择重启)重启了手机。参见图6。

图6. 一次重启。

在这里,将此事件作为一对阅读是有益的。我有事件时间(09:54:04)、事件REBOOT和原因(userrequested)。下一行显示设备作为重启过程的一部分开机。时间(09:55:05)、开机事件(值ON),然后是值RP。我怀疑这个值是"reboot power";换句话说,设备从重启状态进入ON状态。与NP一样,我没有文档来确认这一点。继续,字段OFFSRC为空,这是合理的,因为手机从未关闭,但ONSRC具有PWRON值。

如果设备所有者是更高级的用户,使用过ADB怎么办?嗯,也有相关的条目。首先参见图7。

图7. 从CLI进行的ADB关机。

为了这个练习的目的,我在CLI中添加了一些时间戳。在蓝色框中,您可以看到我发送了命令adb shell reboot -p,这是可以用来关闭Android设备的命令。在红色框中,您可以看到在CLI中创建下一个提示符的时间(当我按下ENTER时),这表明命令发送到手机的时间。现在,参见图8。

图8. ADB关机事件后的eRR.p。

图8中的红色框代表关机事件。时间戳与图7红色框中的时间戳相差一秒。还要注意REASON值:shell。

绿色框中突出显示的两行很有趣。通过ADB关闭设备后,我将手机插入计算机。充电指示灯出现在屏幕上,并显示充电百分比为81(81%)。请注意,绿色框中两个事件的时间戳相同,并且它们的偏移已更改为UTC。我怀疑这是因为由于Android未运行,手机不知道其位置。还要注意第一行中的NP值。它从"无电源"状态进入该状态。第一行中的OFFSRC值也很有趣,因为我没有使用按钮序列关闭设备。

绿色框中的下一行只有值LPM。没有任何文档,我只能推测这可能代表"low power mode"。

用户可能还需要启动到fastboot或恢复模式。图9显示了这些REASON值的出现方式。请注意,这是一个重启(例如,adb reboot fastbootadb reboot recovery)。

图9. fastboot和恢复事件。

当手机可能因电池放电而关机时,LPM值也很有用。要了解其外观,参见图10。

图10. 电池耗尽。

我在这里突出显示了两个电池耗尽条目。每次电池耗尽后,我们可以看到在图8中看到的NP - LPM序列。在图10中,我们看到SHUTDOWN事件,REASON值为no power。关机后的行显示手机已失去确定时间的能力(2021-01-01 12:00:07),并且手机从NP(再次,无电源)状态到达该状态。第二行的末尾显示电池百分比水平为0%,这是合理的,因为电池在两种情况下都已耗尽。在这两种情况下,我都将手机插入墙壁充电器。第三行略有不同。在第一种情况下,手机自动重启,您可以通过RP值看到这一点。在第二种情况下,我必须手动打开手机,这可以通过NP值看到。

eRR.p还会显示手机崩溃(即内核恐慌)。参见图11。

图11. 内核恐慌。

eRR.p中的内核恐慌很有趣,因为它们没有前面的关机/重启事件。这是由于电源事件的突然性;手机以非预期、非操作系统的方式关闭。在图11中每个突出显示的行中,我们从时间戳开始,后跟KP,我怀疑是"kernel panic"。在每行的末尾,您可以看到PANIC后跟Oops: Fatal exception。另一个带有稍微不同消息的示例出现在下面的图12中。

图12. 另一个内核恐慌。

其他文件

之前我提到eRR.p有相关文件。这些文件保留与eRR.p中相同的信息,但格式略有不同。另外两个文件的格式使得取证工具和文本查看器/编辑器可以查看这些文件。它们的名称是power_off_reset_reason.txt和power_off_reset_reason_backup.txt。两者都在USERDATA/log/目录路径中找到。后者扩展了前者的事件范围。参见图13了解power_off_reset_reason.txt。

图13. power_off_reset_reason.txt。

我可以描述这个文件(和power_off_reset_reason_backup.txt)的最佳方式是"格式化的eRR.p"。红色框中突出显示的区域包含与图4中突出显示区域相同的时间戳以及关机原因userrequested。蓝色框中的时间戳很有趣。它大约在关机事件前五(5)秒。检查这个文件,我发现了多个类似的条目,其中较早的时间戳比在eRR.p中也出现的时间戳早几秒。此外,power_off_reset_reason_backup.txt包含一些前面的时间戳。

图14和图15显示了与图6和图8中相同的电源事件,但它们在power_off_reset_reason.txt中的出现方式。注意图14中的前面时间戳。

图14. 与图6相同的事件,但来自power_off_reset_reason.txt。

图15. 与图8相同的事件,但来自power_off_reset_reason.txt。

图16显示了图10中的顶部电池耗尽事件,但来自power_off_reset_reason_backup.txt。这也有一个前面的时间戳。

图16. 与图10相同的事件,但来自power_off_reset_reason_backup.txt。

一个额外的说明。检查员可能会在eRR.p中遇到恢复事件,并可能在power_off_reset_reason.txt和power_off_reset_reason_backup.txt中找到围绕该事件的额外上下文,因此检查两个文件很重要。下面是一个例子。图17显示了eRR.p中的恢复事件,图18显示了power_off_reset_reason_backup.txt中的相应条目。

图17. 一次恢复重启。

图18. 来自图17的事件,但带有更多上下文。

此事件是由手机更新引起的。更新是自动的还是由用户触发的是另一回事。

关机

有时调查可能取决于最小的细节,因此围绕事件的上下文总是有价值的。某些细节起初可能看起来很小或无关紧要,但它最终可能成为检查和调查的支点。围绕手机操作的上下文从来不是坏事,无论事件有多小。了解电源事件背后的原因可能很有用,三星提供数据来帮助检查员做出这一决定。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计