您可能已经知道,隔离标志是在代理(浏览器、邮件客户端等)将文件保存到您的计算机时设置的。这是您第一次尝试打开从 Internet 下载的应用程序时出现的警告的原因。
所有这些信息都已存储,并且每个用户都有完整的历史记录。
前 4 位数字是一组我希望在 Apple 的开源代码中定义的标志quarantine.h
,这似乎是copyfile.c中包含的私有标头。
这些标志代表状态,例如文件是否被隔离。
仔细分析,内核扩展quarantine.kext
负责处理这个,反汇编后,我们可以看到函数quarantine_get_flags
。
这里只是一个反汇编的 kext 片段
注意 xattr 输出的前 4 个标志的格式为_sscanf(rbx, "%04x;") == 0x1)
这调用quarantine_get_info
.
我们可以在这里看到,flags 表示文件在系统上的各种状态,其中 vfs 是虚拟文件系统,vnode 是文件的基本表示结构。
至于xattr
输出的其余部分,每个用户都有一个本地sqlite3
数据库,用于记录下载的每个项目。它的位置是
~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2
数据库只有一张表LSQuarantineEvent
。sqlite3
您可以使用终端中的命令读取所有数据
sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "select * from LSQuarantineEvent;"
如果您过滤结果(grep 或替代),您将能够匹配构成xattr
输出后半部分的 GUID,您将看到有关该特定下载的所有信息,包括哪个代理负责下载文件,甚至是从中检索它的 URL。