【问题标题】:Converting .ichat files into human readable form将 .ichat 文件转换为人类可读的形式
【发布时间】:2018-06-12 14:14:56
【问题描述】:

我想将.ichat 文件(存档的 macOS 消息聊天)中的聊天消息转换为人类可读的形式,如下所示。 (我的谈话都是一对一的,以简化事情!)

  • (13:40) 我:你好
  • (13:41) 你:你好吗?
  • (13:41) 我:太好了,谢谢...

似乎没有执行此操作的现有实用程序,所以我想自己编写,但格式有点神秘,我无法找到任何相关文档。

这些文件充满了奇怪的CF$UID 条目,只是偶尔有几个条目是实际的短信,没有明显的方法可以分辨出哪个人说了什么。

这是一个概述格式的sn-p:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>$archiver</key>
    <string>NSKeyedArchiver</string>
    <key>$objects</key>
    <array>
        <string>$null</string>
        <dict>
            <key>$class</key>
            <dict>
                <key>CF$UID</key>
                <integer>73</integer>
            </dict>
            <key>NS.objects</key>
            <array>
                <dict>
                    <key>CF$UID</key>
                    <integer>2</integer>
                </dict>
                <dict>
                    <key>CF$UID</key>
                    <integer>3</integer>
                </dict>
...
    <dict>
        <key>$class</key>
        <dict>
            <key>CF$UID</key>
            <integer>10</integer>
        </dict>
        <key>NS.string</key>
        <string>Hello, World!</string>
    </dict>

【问题讨论】:

    标签: xml plist imessage


    【解决方案1】:

    这些 plist 采用 NSKeyedArchiver 格式,在 2016 年的这篇博文中进行了解释:Manual Analysis of ‘NSKeyedArchiver’ Formatted Plist Files。简而言之,与$objects 键关联的数组包含一个有序的对象列表,而散布在&lt;string&gt; 标记中的plist 中的十六进制字节是该列表的索引。顶级对象在与$top 键关联的字典中标识。

    unarchive-plist 是一个 Python 脚本,用于将这些 plist 转换为更易于理解的格式,但它仅适用于 macOS。

    【讨论】:

    • 终于有人对此有话要说...我还没有深入研究材料,但我认为答案将在隧道的尽头。等我试过了再回信……“呃,为什么!?”确实……
    • @forthrin 你在什么操作系统上?我需要在 Windows 上阅读其中一些文件,并在试图弄清楚如何做时发现了你的问题。我最终编写了一个 PowerShell 脚本,它丢弃了大部分元数据并生成了一个带有关键细节(消息文本、发件人、收件人、日期)的 JSON 对象,所以如果这有帮助,我可能会清理它,把它在 GitHub 上,然后编辑我的答案。
    • 我在 macOS 上。 unarchive-plist 不会产生可理解的输出吗?
    • 大概,但它“必须在安装了 Xcode 的 OS X 系统上运行,因为它为 Apple 特定的类和对象使用 PyObjC(Python 和 Objective-C 之间的桥梁)”,而我没有手头没有 Mac。
    【解决方案2】:

    如前所述,您可以使用 NSKeyedUnarchiver 解压缩文件。您需要逐步完成调试器中的取消归档过程,以获取归档中使用的所需键和自定义类。

    P.S.:我为此构建了一个应用程序:Past?

    【讨论】:

      猜你喜欢
      • 2010-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-21
      • 1970-01-01
      • 2023-03-23
      相关资源
      最近更新 更多