OSX上的终端应用程序将有关其窗口和内容的信息存储在Library/Saved Application State/com.apple.Terminal.savedState中的状态文件中。

我在崩溃前进行了文件备份,以便能够恢复数据,但是我没有知道现在如何阅读(因为Terminal拒绝使用它)。它以NSCR1000开头,如下所示:

$ hexdump -Cn8 ~/Library/Saved\ Application\ State/com.apple.Terminal.savedState/data.data
00000000  4e 53 43 52 31 30 30 30                           |NSCR1000|


windows.plist文件使用它,可以通过以下方式对其进行解码:

plutil -convert xml1 -o windows.plist windows.plist


我可以使用哪种方法读取.data文件?还是我从哪里开始?

$ strings data.data | head -10
NSCR1000
p+5v
0>[t
kJX6X
@NSCR1000


当您启动并开始键入内容时,此文件是由终端应用自动生成的,因此终端数据存储在其中。 >

#1 楼

它已使用AES加密,因此您将需要windows.plist中的密钥进行解码。

格式为(全部存储在big-endian中):

offset  value
0-3     magic ('NSCR' for PersistentUIRecord)
4-7     version (either '1000' or '0006')
8-11    NSWindowID (used to lookup 128-bit AES key stored in windows.plist)
12-15   record length (including from 0 to xxx)
16-xxx  encrypted binary plist data


文件中可能连续存储了多个记录。

类似的方法AppKit框架用于解密data.data文件。最相关的代码库是+[NSPersistentUIRecord parseOneRecordFromReadBlock:withDecryptionKeys:]块,该块解析data.data文件中的每个记录。

评论


感谢你的回答!我有一个问题:您是如何学习这些细节的?

–斯坦尼斯拉夫·潘克维奇(Stanislav Pankevich)
16年1月15日在11:28

我只是在AppKit框架周围摸索,颠倒了它如何解密data.data文件。要查看的最相关的代码库是+ [NSPersistentUIRecord parseOneRecordFromReadBlock:withDecryptionKeys:]块,它解析data.data文件中的每个记录。

– Cimarron
16年1月15日在16:21



听起来很棒,这很容易做到!令人敬畏的灵感,以了解有关RE的更多信息。再次感谢您的回答。

–斯坦尼斯拉夫·潘克维奇(Stanislav Pankevich)
16年1月15日在17:09

我不确定您会被问到什么样的人,但是如果您可以在博客文章中分享您的精通知识,那的确很棒。我强烈建议您这样做,因为这对每个人来说都是非常有趣的阅读,尤其是如果您可以以简单的方式解释找到正确答案的技巧。如此众多的开发人员可以从您的经验中受益,请这样做!

–斯坦尼斯拉夫·潘克维奇(Stanislav Pankevich)
16年1月15日在20:52