查看 Mac 上运行的所有内容。 了解为什么运行。 决定什么保留。


MacPersistenceChecker 向您展示Mac 上自动运行的所有内容,解释为什么重要,并帮助您决定保留或删除什么。
→ 发现恶意软件 → 检测隐藏的持久化 → 几分钟内了解您的系统
下载 MacPersistenceChecker v2.0.0 (DMG)
→ 在 30 秒内扫描您的 Mac → 无需安装向导,直接打开运行 → 原生 macOS,通用(Apple Silicon 和 Intel),macOS 13+
如果 macOS 提示应用已损坏:
xattr -cr /Applications/MacPersistenceChecker.app
该应用学习您的系统并自动分类数千个项目。
快速开始:
实际成本:活跃使用每月低于 1 美元,稳定状态为 0 美元。
该应用为 Mac 上的每个持久化项目构建一个知识图谱,并使用 Claude (Anthropic) 进行推理。快速分类数千个项目,仅升级真正重要的内容,并学习您的系统,以便无需进一步调用 AI 即可回答大多数问题。
┌──────────────────────────┐
│ Persistence scan │
│ (e.g. 6800 items) │
└─────────────┬────────────┘
▼
┌────────────────────────────────────────┐
│ Concept Extraction (deterministic) │
│ 6 extractors → vendor / software / │
│ pathCategory / pattern / mechanism / │
│ filename. No AI calls here. │
└─────────────┬──────────────────────────┘
▼
┌────────────────────────────────────────┐
│ Knowledge Graph (SQLite) │
│ • concepts (~280 typically) │
│ • concept_links (subsumes / instance) │
│ • item_concepts (m:n) │
│ • concept_verdicts │
└─────────────┬──────────────────────────┘
▼
┌────────────────────────────────────────┐
│ Concept Resolver │
│ for every item, picks the strongest │
│ verdict via a deterministic ladder: │
│ severity → confidence → specificity │
│ → source → recency. │
└─────────────┬──────────────────────────┘
│
┌───────────┴────────────┐
▼ ▼
┌──────────────────┐ ┌──────────────────────┐ │ Item is already │ │ Item is unresolved │ │ classified. │ │ → goes to a cluster. │ │ Filter hides it │ └──────────┬───────────┘ │ from "Suspicious"│ ▼ └──────────────────┘ ┌──────────────────────┐ │ Cluster Builder │ │ groups items by │ │ identical concept │ │ signature (sorted │ │ ids). 6800 items → │ │ ~280 clusters. │ └──────────┬───────────┘ ▼ ┌──────────────────────────────────────────┐ │ User decides per cluster (one click = │ │ N items decided), OR sends batch to AI: │ │ │ │ • Trust / Watch / Block (manual) │ │ • Send unresolved clusters to AI │ │ → Haiku batch (15 cluster per call) │ │ → AI returns verdicts attached to │ │ concepts (not items) — propagate │ │ to ALL items linked to those │ │ concepts, including future ones. │ └──────────────────────────────────────────┘
### AI 工具
| 工具 | 位置 | 模型 | 每次调用成本 |
|---|---|---|---|
| 使用 AI 分析(单个项目) | 项目详情 → 知识图谱 | Haiku | ~$0.003 |
| 智能分类批次 | 工具栏 → 分类 | Haiku 批次 | ~$0.005(15个聚类) |
| 系统报告 | 工具栏 → 报告 | Sonnet | ~$0.05-0.10 |
| 威胁狩猎 | 工具栏 → 狩猎 | Haiku | ~$0.003 |
| 快照差异 | 历史 → 比较 → 使用 AI 分析 | Haiku | ~$0.003 |
每日调用上限(默认30)可在“设置 → AI”中配置。硬性上限,达到后AI自动禁用。
### 信任控制
用户定义的规则**始终优先于**AI提取的规则:
- **信任此项目** — 单个项目规则,您的判断覆盖AI观察列表
- **信任此模式** — 模式规则,包含TeamID/签名锚点(仅限已签名二进制文件)
- **移除信任** — 删除您误添加的用户定义规则
- **监视/阻止** — 对整个聚类应用观察列表/恶意判定(智能分类中)
</details>
---
## 持久性扫描
### 核心扫描器
- **启动守护进程** - 系统范围服务(`/Library/LaunchDaemons`, `/System/Library/LaunchDaemons`)
- **启动代理** - 用户级别代理(`~/Library/LaunchAgents`, `/Library/LaunchAgents`)
- **登录项** - 登录时启动的应用
- **内核扩展** - 传统kext
- **系统扩展** - 现代系统扩展(DriverKit, NetworkExtension, EndpointSecurity)
- **特权辅助工具** - 具有提升权限的XPC服务
- **定时任务** - 计划任务
- **配置描述文件** - MDM和配置描述文件
- **应用支持** - 后台应用和助手
### 扩展扫描器(可选)
- **定期脚本** - `/etc/periodic/` 中的每日、每周、每月脚本
- **Shell启动文件** - `.zshrc`, `.bashrc`, `/etc/profile`,带可疑模式检测
- **登录/注销钩子** - 通过 `com.apple.loginwindow` 的传统登录钩子
- **授权插件** - `/Library/Security/SecurityAgentPlugins` 中的安全代理插件
- **Spotlight导入器** - 自定义元数据导入器
- **Quick Look插件** - 可能被滥用的预览生成器
- **目录服务插件** - 认证插件
- **Finder同步扩展** - 通过 pluginkit 的 Finder 扩展
- **BTM数据库** - 后台任务管理条目(macOS 13+)
- **Dylib劫持** - 检测 `DYLD_INSERT_LIBRARIES` 和可疑的 dylib 注入
- **TCC/辅助功能** - TCC 数据库中具有辅助功能权限的应用
---
## 风险评估
每个持久性项目都会根据多种因素获得**风险评分(0-100)**:
- 无效或缺失的代码签名
- 缺少强化运行时保护
- 临时签名二进制文件
- 可疑的文件位置
- 持久性自动启动配置(RunAtLoad, KeepAlive)
- 已知恶意软件模式
**严重级别:** 低、中、高、紧急 - 项目按风险排序以便快速识别威胁。
### 启动频率异常检测
- **微重启** - StartInterval < 60秒(可能滥用看门狗)
- **激进看门狗** - KeepAlive + 低StartInterval组合
- **无节流限制** - 没有ThrottleInterval的KeepAlive(崩溃重启循环风险)
### 已签名但危险检测
- **危险权限** - 检测风险权限(`com.apple.security.cs.disable-library-validation` 等)
- **苹果冒充** - 试图冒充苹果的非苹果软件
- **隐藏位置** - 在可疑目录中的已签名应用
- **公证缺口** - 近期应用缺少公证
- **开发者证书分析** - 针对已知供应商的Team ID验证
### LOLBins检测(Living-off-the-Land二进制)
检测在持久性上下文中滥用合法macOS二进制文件的可疑使用。**组合至关重要:**
- **osascript + 持久性** = 带自动启动的AppleScript(GUI自动滥用)
- **curl/wget + RunAtLoad** = 下载并执行模式
- **python + 特权辅助工具** = 提升的脚本执行
- **security + KeepAlive** = 凭证窃取风险
- **launchctl + 自动启动** = 元持久性安装程序
- **netcat + 持久性** = 反向shell / C2通道
追踪40多个LOLBins,带有MITRE ATT&CK映射和上下文感知的严重性评分。
### 二进制信誉与行为分析
高级启发式规则,用于检测可疑行为模式:
- **隐藏持久性守卫** - 没有明显看门狗用途的KeepAlive代理
- **激进持久性** - 非服务项目上的RunAtLoad + KeepAlive
- **隐蔽自动启动** - 来自未知供应商的后台进程
- **孤儿持久性** - Plist指向不存在的可执行文件
- **可疑位置** - 可执行文件在 `/tmp/`、`/Users/Shared/` 或隐藏目录中
- **权限提升风险** - 尝试特权操作用户代理
- **联网持久性** - 具有网络能力的持久性
- **基于脚本的持久性** - 通过解释器的内联脚本
- **系统进程冒充** - 使用类似苹果命名的非苹果项目
- **频繁重启模式** - StartInterval < 60秒
### Plist与二进制意图不匹配
检测plist声明与二进制实际行为不匹配的情况 - 这正是现代dropper所做的:
- **无害Plist,重型二进制** - 简单配置但二进制具有危险权限
- **被动辅助工具带有网络** - 具有网络客户端/服务器访问的后台辅助工具
- **被动辅助工具带有Dylib加载** - 可加载未签名代码的辅助工具
- **最小配置,最大能力** - 最小plist但广泛权限
- **简单任务带有钥匙串访问** - 具有凭证访问的简单任务
### 二进制年龄与持久性年龄
检测可疑的时间戳模式,表明安装后的恶意更新:
- **旧Plist,新二进制** - 经典的“安装后恶意更新”模式
- **静默二进制替换** - 二进制修改但plist未更改
- **时间戳篡改** - 修改日期早于创建日期(不可能)
- **可疑修改时间** - 二进制在凌晨2-5点被修改
- **安装后二进制被修改** - 非更新程序的二进制在初始安装后被更改
### 信任级别
- 🟢 **苹果** - 由苹果签名
- 🔵 **已知供应商** - 已验证的第三方软件
- 🟡 **已签名** - 有效签名但未公证
- ⚪ **未知** - 无可验证的可执行文件
- 🟠 **可疑** - 证书过期或路径可疑
- 🔴 **未签名** - 无有效签名
---
## 时间线与取证
每个持久性项目的全面取证时间线:
**发现**
- 首次发现 - 项目首次被发现的时间
**配置文件(Plist)**
- 创建 - 文件创建时间戳
- 修改 - 最后修改时间戳
**可执行文件(二进制)**
- 创建 - 二进制创建时间戳
- 修改 - 最后修改时间戳
- 最后执行 - 最后访问/执行时间
### 时间戳异常检测
- **时间戳篡改** - 创建日期晚于修改日期(反取证技术)
- **文件替换** - 文件在首次发现后被创建
- **二进制替换** - 最近修改的二进制文件带有旧plist(可能被篡改)
- **近期执行** - 二进制文件最近被访问但当前未加载
---
## MITRE ATT&CK集成
每个持久性机制映射到MITRE ATT&CK框架:
- **战术**:持久化、权限提升、防御规避、执行
- **技术**:T1543.001, T1543.004, T1547.001, T1547.015 等
- 直接链接到MITRE ATT&CK文档
---
## 应用侵入性报告
对已安装应用进行全面分析,评估其“侵入性”级别:
### 双重评分系统
**持久性分数(0-100)** - 评估持久性机制:
- 触发类型(RunAtLoad, KeepAlive)
- 权限级别(启动守护进程、内核扩展、特权辅助工具)
- 弹性(自动重启、更新程序)
- 冗余(同一供应商的多个项目)
- 信任级别(未签/可疑惩罚)
**安装分数(0-100)** - 评估“垃圾”占用:
- 文件分布在Library文件夹中
- 总磁盘使用量
- 孤立文件(持久性但没有匹配应用)
- 缓存膨胀
- 系统范围安装
### 等级系统
应用根据综合评分评定**A到F**等级,并详细列出所有评分因素。
---
## 可视化
### 统计仪表板
- **风险分布直方图** - 按风险带(低、中、高、紧急)显示项目
- **信任级别环形图** - 信任级别分布
- **类别分解图** - 每个持久性类别的项目
- **时间线可视化** - 项目生命周期事件(创建、修改、执行、发现)
### 交互式图表
- **完整系统图** - 所有持久性项目及关系的概览
- **聚焦项目图** - 单个项目分析的径向图
- **分析模式**:基础(信任/类别)或完整(包含dylib依赖、网络连接)
- **交互式画布** - 缩放、平移、探索关系
- **按信任级别着色** - 快速视觉威胁评估
### 安全概况雷达图
全面的雷达图显示信任、签名、安全性、稳定性、透明度和年龄维度,一目了然。
---
## 实时监控
持续监控持久性变化,具有两种分析模式。
### 监控模式
**标准模式**
- 基于FSEvents的实时文件系统监控
- 智能噪声抑制,可配置去抖
- 相关性评分以过滤无关紧要的变化
- 对高相关性变化立即通知
**AI模式**(需要Claude API密钥)
- Claude AI分析每个检测到的变化
- 向AI发送完整上下文:签名信息、LOLBins、行为异常、风险评分
- AI根据实际威胁级别决定是否应通知
- 可配置检查间隔(30秒到1小时)
- 严重性阈值过滤(信息、低、中、高、紧急)
### 菜单栏集成
- 实时监控状态指示器
- 显示“AI”或“Std”的模式徽章
- 快速控制(启动/停止监控、触发扫描)
- 设置访问
- 未确认变化的徽章计数
- 上次检测到的变化预览
### 通知去重
- 相同项目在冷却期内不会触发重复通知
- 可配置冷却时间(1-24小时,默认2小时)
- 防止频繁变化项目导致通知疲劳
### 启动通知
当监控启动时,您会收到一个通知确认:
- 活动模式(AI模式或标准模式)
- 检查间隔(AI)或“实时”(标准)
- 通知阈值设置
### 变化检测
- **已添加** - 新的持久性项目
- **已移除** - 已删除项目
- **已修改** - 配置更改(启用/禁用、路径更改等)
- **已启用/已禁用** - 状态更改
### AI分析详情
当AI模式激活时,每次更改将完整的项目数据发送给Claude:
- 基本信息(名称、类别、路径、plist内容)
- 签名详情(已签名、苹果、已公证、Team ID、证书状态)
- 风险评估(分数、详细分解)
- LOLBins检测及MITRE映射
- 行为异常
- 意图不匹配(plist与二进制)
- 年龄异常(时间戳分析)
- 已签名但危险标志
Claude响应:
- `shouldNotify` - 是否提醒用户
- `severity` - 威胁级别评估
- `title` - 通知标题
- `explanation` - 为什么可疑或不可疑
- `recommendation` - 建议的操作
- `mitreTechniques` - 相关的ATT&CK技术
### AI自定义
通过**设置 → AI**控制AI分析变化的方式:
**结构化选项**
| 选项 | 默认 | 效果 |
|------|------|------|
| 忽略苹果签名 | 开 | 降低苹果签名项目(com.apple.*)的优先级 |
| 忽略系统路径 | 开 | 降低/System和/Library路径的优先级 |
| 优先处理未签名 | 开 | 额外关注未签名可执行文件 |
| 聚焦LOLBins | 开 | 优先检测Living-off-the-Land二进制 |
| 最低风险分数 | 0 | 仅分析风险 >= 阈值的项目 |
| 忽略路径 | - | 要跳过的自定义路径(逗号分隔) |
**通知阈值**
- `信息` - 通知所有内容
- `低` - 通知低严重性及以上
- `中` - 通知中及以上(默认)
- `高` - 仅高和紧急
- `紧急` - 仅紧急威胁
**自定义提示**
添加您自己的指令,这些指令会附加到AI提示中。示例:```
Always notify me if an item uses python or osascript.
Ignore anything from Microsoft.
Be more aggressive with unsigned items from ~/Downloads.
AI 使用这些偏好设置来做出更智能的决策。例如:
/tmp/ 的未签名 LaunchAgent → 严重通知RunAtLoad 的 osascript → 高通知MacPersistenceChecker 包含一个 MCP(模型上下文协议)服务器,允许 Claude Code、Claude Desktop 和其他兼容 MCP 的客户端查询持久性数据。
swift build --target MPCServer
二进制文件创建于 `.build/debug/mpc-server`。
### 可用的 MCP 工具
| 工具 | 描述 |
|------|-------------|
| `get_current_state` | 获取所有当前持久化项目,可带可选过滤器 |
| `get_diff` | 获取与基线或特定快照之间的变化 |
| `get_summary` | 简洁概览,包含计数和主要威胁 |
| `get_item_details` | 通过标识符获取特定项目的完整详情 |
| `get_risk_analysis` | 汇总风险分析和建议 |
| `get_snapshots` | 列出可用快照及其元数据 |
| `compare_snapshots` | 比较两个快照的变化 |
### Claude Code 配置
添加到您的 Claude Code MCP 设置中(`~/.claude/claude_desktop_config.json` 或类似文件):```json
{
"mcpServers": {
"macpersistence": {
"command": "/path/to/mpc-server",
"args": []
}
}
}
配置完成后,您可以向 Claude Code 询问:
面向安全管道的机器可读导出:
仅在扫描完成后按钮才可用。
安全地消除可疑的持久化项,无需永久删除:








git clone https://github.com/Pinperepette/MacPersistenceChecker.git cd MacPersistenceChecker ./build.sh
将 `MacPersistenceChecker.app` 复制到 `/Applications/`。
### 系统要求
- macOS 13.0+
- Xcode 15+ 或 Swift 5.9+
### 依赖项
- [GRDB.swift](https://github.com/groue/GRDB.swift) - SQLite 数据库
---
## 权限
需要 **完全磁盘访问权限** 才能扫描:
- `/Library/LaunchDaemons`
- 系统配置文件
- TCC 数据库
- Shell 启动文件
如果没有完全磁盘访问权限,部分项目可能不可见。
---
## 许可证
MIT 许可证 - 详见 [LICENSE](https://github.com/pinperepette/macpersistencechecker/blob/HEAD/LICENSE)。
## 作者
**pinperepette** - 2025
## Star 历史
<a href="https://www.star-history.com/?repos=Pinperepette%2FMacPersistenceChecker&type=date&legend=top-left">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/chart?repos=Pinperepette/MacPersistenceChecker&type=date&theme=dark&legend=top-left" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/chart?repos=Pinperepette/MacPersistenceChecker&type=date&legend=top-left" />
Star History Chart
</picture>
</a>
---
*灵感来自 Mark Russinovich 开发的 Windows 版 [Autoruns](https://docs.microsoft.com/en-us/sysinternals/downloads/autoruns)*