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