首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解xattr -p com.apple.quarantine的输出

理解xattr -p com.apple.quarantine的输出
EN

Stack Overflow用户
提问于 2017-09-13 13:12:17
回答 1查看 11.7K关注 0票数 7

前几天,我正在处理一些文件,这些文件上有扩展属性com.apple.quarantine。我知道它的目的,但我一直好奇,当您输出它的值时,下面的属性意味着什么。

当我打字的时候

xattr -p com.apple.quarantine xmlrpc.php

对于具有上述xattr的文件,输出如下:

0083;59b926ad;Safari.app;55847AA4-5562-42A2-89A7-8FAD394B455C

前四位代表什么?也就是说,谷歌没有提到任何好的东西,我从用户那里找到的一些指南也试图找出这些数字到底代表了什么。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 13:02:31

您可能已经知道,当代理(浏览器、邮件客户端等)将文件保存到您的计算机时,将设置隔离标志。这对您第一次尝试打开从internet下载的应用程序时出现的警告负责。

所有这些信息都是存储的,每个用户都有完整的历史记录。

前4位是一组标志,我希望这些标志都是在quarantine.h中定义的,这似乎是苹果开源代码中包含在copyfile.c中的一个私有头。

这些标志表示状态,例如文件是否被隔离。

更仔细的分析,内核扩展quarantine.kext负责处理这个问题,在反汇编时,我们可以看到函数quarantine_get_flags

这里是解压的kext的一个片段

注意使用_sscanf(rbx,"%04x;") == 0x1)格式化xattr输出的前4个标志

这就叫quarantine_get_info

我们在这里可以看到,标志表示系统上文件的各种状态,其中vfs是虚拟文件系统,vnode是文件的基本表示结构。

至于xattr输出的其余部分,每个用户都有一个本地sqlite3数据库,该数据库保存所下载的每一项的记录。它的位置

~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2

数据库只有一个表LSQuarantineEvent。可以使用终端中的sqlite3命令读取所有数据。

代码语言:javascript
复制
sqlite3 ~/Library/Preferences/com.apple.LaunchServices.QuarantineEventsV2 "select * from LSQuarantineEvent;" 

如果您筛选结果(grep或alternative),您将能够匹配构成xattr输出后半部分的GUID,并且您将看到有关该特定下载的所有信息,包括是哪个代理负责下载文件,甚至是从哪里检索到的URL。

票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46198557

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档