NSKeyedArchive反序列化工具更新详解

本文介绍了NSKeyedArchive反序列化库的更新,包括修复错误和新增功能,使其能处理嵌套数据块和递归反序列化,提升了iOS和macOS数字取证的效率。

NSKeyedArchive反序列化工具更新

很久以前,我写了一些代码,使NSKeyedArchives(NSKA)变得易于阅读,基本上是反序列化数据。随后,它被转换成一个库,用于其他项目,如iLeapp和mac_apt。上周我重新审视了这段代码,发现并修复了一个小错误。同时,我还增加了一项新功能,主要是为了方便那些不喜欢接触代码的人。

之前,这个库只能处理NSKA文件。如果文件是一个普通的plist,它会返回一个异常,抱怨在plist中找不到“$archiver”元素。但是,如果你的文件是普通的plist(未序列化),但其中嵌套了作为数据块的NSKA plist呢?实际上,在iOS/macOS上有不少这样的文件。为了使它们易于阅读,你必须编写代码来提取这些数据块,并通过库运行它们。之前的代码即使在NSKA归档内部也无法处理递归反序列化。

现在,随着最新更新(版本1.4.0),deserialize_plist(...)deserialize_plist_from_string(...)函数增加了一个额外的参数来解锁此功能,并执行所有嵌套数据块的完全递归反序列化。

1
def deserialize_plist(path_or_file, full_recurse_convert_nska=False)

默认情况下,该值为False,以模拟旧行为。但是,当设置为True时,对于非NSKA(未序列化或普通)plist,它将不再返回异常,而是始终返回一个plist。如果树中的任何地方有一个数据(二进制块)元素,其值包含NSKA plist的有效标头,那么该元素现在将被替换为代表NSKA数据反序列化版本的树分支。

图1 - 旧代码与新代码反序列化NSKA plist的对比

如果你在任何项目中使用nska_deserialize依赖,请更新到最新版本:

1
pip3 install nska_deserialize --upgrade

旧的已编译exe文件也已更新(标志设置为True)。使用拖放功能也非常方便,如此处所示。

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