xprotect 仅在首次打开文件时按需扫描,不预扫描下载目录;检测对象包括可执行文件、宏文档、pdf脚本等;签名库需30天内更新,无手动扫描功能。
xprotect 不会对“下载目录”里的文件做预扫描,它只在你真正打开文件的那一刻才启动检查。
触发时机很明确:首次调用才检测
XProtect 的设计原则是“按需静默扫描”,不是后台常驻查杀。它不会轮询 Downloads 文件夹、也不会定期扫描所有 .dmg/.pkg/.app 文件。只有当你双击一个刚下载的安装包、点击运行某个.app、或者用 Preview 打开一个带脚本的 PDF 时,系统才会调用 XProtect 引擎比对 YARA 规则。
- 已运行过的文件(哪怕只是点开又立刻退出)不会再被重复检测
- 移动或重命名文件不重置检测状态;只有删除后重新下载才会触发新一次检查
- 通过终端直接执行(如
./MyTool)同样会触发,不限于 GUI 操作
检测对象不止是可执行程序
除了常见的 .app、.pkg、.dmg,XProtect 还会检查以下类型文件的嵌入内容:
- Office 文档(.docm、.xlsm)中的宏代码
- PDF 文件内嵌的 JavaScript 或 Launch 动作
- Shell 脚本(.sh)、Python 脚本(.py)等文本类可执行体
- 压缩包(.zip、.tar.gz)解压后首次运行其中的二进制文件时才检测
验证当前签名库是否有效
你可以快速确认 XProtect 是否处于活跃更新状态:
- 终端运行:
defaults read /System/Library/CoreServices/XProtect.bundle/Contents/Resources/XProtect.plist | grep LastModification,输出时间应在近 30 天内 - 检查守护进程是否加载:
sudo launchctl list | grep xprotect,有 PID 表示正常运行 - 注意:XProtect 不提供手动扫描命令,也没有图形界面或日志开关
它不做的事,你得自己补位
XProtect 是一道轻量级守门员,但不是全能防护:
- 不查未签名但合法的开发工具(如自制 CLI 工具),需靠 Gatekeeper +
codesign手动验签 - 不拦截无文件攻击、内存注入或 AppleScript 绕过行为
- 对混淆变种、新出现的恶意样本存在滞后性,依赖 Apple 推送规则更新
- 不清理已落地的恶意残留,清除任务由 XProtectRemediator 在重启后异步完成











