您可能已经知道,当代理(浏览器、邮件客户端等)将文件保存到您的计算机时,隔离标志会被设置。这是导致在您第一次尝试打开从互联网下载的应用程序时出现警告的原因。
所有这些信息都被存储,并且每个用户都有完整的历史记录。
前4位数字是一组标志,我预计在quarantine.h中定义,该文件似乎是包含在苹果开源代码
copyfile.c中的一个私有头文件。
这些标志表示状态,例如文件是否被隔离。
仔细分析后,内核扩展quarantine.kext负责处理此事,并且在反汇编时,我们可以看到函数quarantine_get_flags。
以下只是内核扩展的一部分反汇编代码
![enter image description here](https://istack.dev59.com/g56r1.webp)
请注意xattr输出的前4个标志的格式与_sscanf(rbx, "%04x;") == 0x1)。
这会调用quarantine_get_info函数。
![enter image description here](https://istack.dev59.com/x7z4Y.webp)
我们可以看到这里的标志表示系统上文件的各种状态,其中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。