前几天我弄乱了一些扩展属性为 com.apple.quarantine 的文件。我知道它的目的,但我一直很好奇当你输出它的值时,下面的属性意味着什么。
E.g。当我输入
时 xattr -p com.apple.quarantine xmlrpc.php
对于具有上述xattr的文件,我得到如下输出:
0083;59b926ad;Safari.app;55847AA4-5562-42A2-89A7-8FAD394B455C
前4位代表什么?即0083
谷歌没有提出任何好的东西,我发现用户也试图找出这些数字的精确代表。
答案 0 :(得分:11)
您可能已经知道,当代理(浏览器,邮件客户端等)将文件保存到您的计算机时,会设置隔离标志。这是您首次尝试打开从Internet下载的应用程序时出现的警告。
存储所有这些信息,并为每个用户提供完整的历史记录。
前4位数字是我期望在quarantine.h
中定义的一组标志,它在Apple的开源代码中似乎是copyfile.c中包含的私有标头。
这些标志代表状态,例如文件是否被隔离。
仔细分析,内核扩展quarantine.kext
负责处理这个问题,在反汇编时,我们可以看到函数quarantine_get_flags
。
注意xattr输出的前4个标志的格式为 _sscanf(rbx,“%04x;”)== 0x1)
这会调用quarantine_get_info
。
我们可以看到这里的标志表示系统上文件的各种状态,vfs是虚拟文件系统,而vnode是文件的基本表示结构。
对于xattr
输出的其余部分,每个用户都有一个本地sqlite3
数据库,用于记录下载的每个项目。它的位置是
〜/库/首/ com.apple.LaunchServices.QuarantineEventsV2
数据库只有一个表LSQuarantineEvent
。您可以使用终端
sqlite3
命令读取所有数据
sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "select * from LSQuarantineEvent;"
如果您过滤结果(grep或替代),您将能够匹配构成xattr
输出后半部分的GUID,您将看到有关该特定下载的所有信息,包括哪个代理负责下载文件,甚至包括从中检索文件的URL。