将.ichat文件转换为人类可读的形式

时间:2018-01-02 21:51:33

标签: xml plist imessage

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

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

似乎没有现成的实用工具可以做到这一点,所以我想写自己的,但这种格式含糊不清,说得温和,我找不到任何相关的文档。

这些文件中充满了奇怪的CF$UID条目,偶尔会有一些条目是实际的短信,没有明显的方法可以告诉哪个人说了什么。

以下是概述格式的摘录:

<?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>

1 个答案:

答案 0 :(得分:1)

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

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