隐私体检官 (privacy-checkup)
用途
这是一个离线(无网络、无外部 API)的隐私体检工具。它扫描用户自己拥有或有权处理的文件,自动发现其中可能泄露的隐私信息,帮助用户或企业对可能存储隐私信息的设备进行敏感信息排查,以脱敏或移入回收站的方式处置,在转售、出借、共享设备或清理历史文件前降低隐私泄露风险,保护用户信息安全。
⚠️ 本技能只作用于当前用户账户可读的本地文件。它不会也不能访问其他用户加密的凭据库
(浏览器密码管理器、操作系统凭据保险库等),也不会尝试破解任何加密存储。仅识别以明文/可读文本
形式存在的隐私信息。
何时使用
- 用户说「帮我找出电脑里有没有身份证号/手机号/银行卡/密码」「清理一下我的隐私文件」
- 用户要「脱敏一份文档」「把这些含地址的文件处理掉」
- 用户准备卖/扔/借设备,要求「做个隐私体检」
- 用户要求扫描手机里的隐私文件(仅当手机以媒体设备/MTP 挂载为盘符,或提供本地备份目录时)
- 隐私泄露风险排查
- 信息安全检查
- 敏感信息扫描
- 用户说「下载隐私卫士离线版」「把exe下到本地」「我要离线运行的exe」「获取隐私体检官安装包」「生成exe」「打包离线版」
核心原则(强制)
- 先报告,后动作。 任何扫描都必须是只读的,先产出报告,绝不边扫边改。
- 逐文件确认。 处置(脱敏/删除)前,必须把待处理清单列给用户,等用户明确选择后再执行。
不要批量静默处理。 - 删除 = 回收站,默认先备份;但确认删除可不留备份。 「删除」一律走 Recycle Bin(
send_to_trash.py),
默认先复制原文件到备份目录,绝不执行永久删除(del/rm/shutil.rmtree)。
若用户明确选择「确认删除即彻底清除」(CLI--no-backup/--purge-backup,GUI 勾选「回收站不保留备份」),
则移入回收站前不创建新备份、并清除该文件已存在的备份,使删除后不留任何副本(仅回收站可恢复)。
这一选项只在用户明确要求时使用,且必须逐项确认。 - 小批量。 单次最多处理 10 个文件,每批执行后向用户汇报结果。
- 不碰系统禁区(指"处置"环节)。 扫描可覆盖任何用户可读目录,包括
Temp、AppData、
各类缓存目录——这些地方常保留自动保存稿、浏览器缓存、聊天记录临时副本等敏感内容,必须核查。
但删除/脱敏只针对用户逐文件明确选定的文件,绝不递归批量清理C:\、Windows、Program Files
等系统目录;系统目录仅作遍历时的"提速排除项"(见下),不主动处置其中的文件。 - 只处理本人数据。 不将此能力用于无权访问的他人数据。
文件溯源分类引擎(智能区分「用户文件」与「系统 / 软件自带文件」)
隐私体检的最大痛点:全盘扫描时,大量软件自带文件会被误报成隐私——Office 激活脚本、WPS 插件池前端代码、Chromium 开源许可证、云盘运行日志等。这些文件不含任何用户隐私,却会产生上千条无关命中、严重拖慢扫描并淹没真实风险。
本技能内置一套统一的"文件溯源分类引擎"(scan_pii.classify_path() / should_skip_file())。对每一条路径,它只回答一个问题——"这个文件是谁产生的?"——并据此决定扫描或跳过;每个判断都带可解释的 reason 字段。
归属分六类:
| 归属 (bucket) | 含义 | 动作 |
|---|---|---|
SYSTEM |
Windows / Program Files / ProgramData 等系统安装树 | 整树跳过 |
VENDOR |
应用安装器及其自带代码/文档/日志/插件池(WPS addons、Chrome 扩展、mCloud 日志…) | 跳过 |
VENDOR_ATTR |
许可证/版权声明文件(LICENSES.* / open_source_licenses / directui…),任意位置 | 跳过 |
USER_APP_DATA |
厂商树里但属于用户的文件(.env、密钥、本地数据) |
扫描 |
USER_DATA |
用户文件 / 应用代用户产生的数据(浏览器历史、聊天记录、文档) | 扫描 |
UNSCANNABLE |
不在扫描扩展名集合内的文件 | 跳过 |
引擎由四道互不依赖、可独立生效的拦截线组成,从根本上消除"发现一类误报补一条规则"的打补丁模式:
- Tier1 系统树整树跳过:
C:\Windows、Program Files、ProgramData、$Recycle.Bin等(仅当为卷根直接子目录时)整棵跳过。 - Tier2 程序树逐文件判断:
D:\tools\Python314、E:\apps\MyApp等应用安装树下,跳过二进制/编译码/打包资源/厂商文档,但保留.env、密钥、用户数据等。 - AppData 厂商子树安全网:
AppData\*\已知应用\addons|pool|extensions|cache|...纯路径前缀匹配,零 I/O,不依赖遍历状态。 - 全局厂商归因:
LICENSES/licence/notice/copying/third_party/open_source_licenses… 无论位于何处都跳过。
> 关键设计:分类逻辑收敛在 classify_path() 单一决策点,而非散落多处。任何代码改动都必须先跑 verify_classification.py 全绿才能发布——这是"区分能力"的可回归载体(详见配套资源)。
工作流程
第 0 步:确认范围(不要静默全扫)
- 向用户确认要扫描的路径。默认建议扫描个人文件夹(如
Desktop、Documents、Downloads、
Pictures),或用户指定的目录/盘符。 - 扫描整块系统盘(如
C:\)需用户显式确认,且要说明耗时与可能的大量结果。 - 手机扫描说明:本机只能读到手机以「媒体设备/MTP」挂载出来的盘符(如
D:\下的DCIM、
以及可读的备份目录)。无法直接读取手机系统分区或 App 私有加密数据。让用户把手机连成媒体设备,
或对本地 iTunes / Android 备份目录指路径。
第 1 步:只读扫描,生成报告
运行扫描脚本(纯本地、离线):
python "~/.workbuddy/skills/privacy-checkup/scripts/scan_pii.py" \
--paths "C:/Users/lenovo/Documents" "D:/phone_dcim" \
--output pii_report.json --max-bytes 3000000
- 本技能脚本目录为
~/.workbuddy/skills/privacy-checkup/scripts/。 - 扫描范围默认覆盖用户目录与缓存:
C:\Users\<账户>\(桌面/文档/下载/图片,以及用户自己的AppData\Local\Temp、浏览器缓存、文档自动保存、聊天记录临时副本等最易藏敏感文件的区域)照常核查。 - Windows 系统目录树自动整体豁免:扫描卷根(如
C:\)时,凡直接挂在盘符下的系统目录Windows、Program Files、Program Files (x86)、ProgramData、$Recycle.Bin、System Volume Information、Recovery、Boot、EFI等整棵子树一律跳过——这些目录(及其下的SystemApps、Licenses、SecureBoot、Speech_OneCore、SysWOW64、WinSxS等)只含操作系统代码与许可证文件,绝不含用户隐私,跳过既提速又根除此类误报。判别规则:仅当目录是卷根的直接子目录时才按系统树处理,用户自建的深层windows文件夹不会被误伤。 - 安全组件缓存自动跳过(任何深度):凡属已通过安全审查、不可能包含用户隐私的 OS/驱动缓存(如
NVIDIA/AMD/Intel的着色器缓存GLCache/ComputeCache/D3DSCache、IconCache、Thumbnails、FontCache等)一律跳过,不浪费时间也不产生噪音。 - 仍会跳过
.git、node_modules、__pycache__、site-packages等开发/版本控制缓存(任何深度,纯提速)。 - 「快速重点扫描」模式(
--focus,GUI 勾选「快速重点扫描」):跨机器、跨账户、跨安装位置通用——自动枚举本机所有真实用户账户(不限当前登录账户),扫描每个账户的文档/桌面/下载/网盘及整个 AppData 树(覆盖非默认安装位置的软件,因其用户数据仍落 AppData),并做有界签名探测捕捉被搬出 AppData 的浏览器/微信数据目录(含其它盘浅层探测)。专门解析浏览器 SQLite 数据库(Chromium 的History/Cookies/Web Data/Login Data(无扩展名)、Firefox 的*.sqlite),从 URL、自动填充、用户名等明文列提取隐私;同时仍覆盖即时通讯(微信/QQ/钉钉/企业微信/飞书)、网盘(OneDrive/百度网盘/阿里云盘/Dropbox)、邮件(Outlook/Foxmail)、Office/WPS 自动保存与备份。系统/驱动缓存与无关应用数据一律不碰。 - 如需连系统目录也扫(极少见),加
--include-system;如需额外跳过别的目录,加--exclude-dirs。 - 大文件(默认超过 3MB)对纯文本只读头部 3MB 以保证速度;Office/PDF/图片过大则跳过。
如需更完整覆盖,调大--max-bytes。 - 输出
pii_report.json,含每个命中文件的类型统计、脱敏后的片段(不含原文明文)、行号、置信度。 - 提速要点:仅打开文本类扩展名(
.txt/.md/.csv/.json/.log/.xml/.py/.docx/.xlsx/.pdf等),
对无扩展名的点文件(.env/hosts/passwd/.bash_history等)也按明文密钥核查;
GUI 扫描在后台线程运行,带进度条与「取消」按钮,结果实时显示、不再卡死;并带「快速重点扫描」勾选框(只查最易泄露隐私的位置,最快出结果)。 - 支持的识别类型与稽核规则:
- 手机号:11 位,以
1[3-9]起;前 3 位号段(MOBILE_PREFIXES,涵盖移动/联通/电信/广电/虚商分配号段)命中→高置信度,号段未分配→中置信度。已覆盖 13x/14x(145-149)/15x/16x(162/165/166/167)/17x(170-178)/18x/19x(190-199,剔除 194)。 - 固定电话:区号 =
0+(10|2x|[3-9]xx),本地号 7–8 位;区号命中AREA_CODES(真实大陆区号表)及结构合法→高置信度,仅结构合法→中置信度;非法区号(如0123)直接排除。可选带+86。 - 经纬度(敏感位置):十进制经纬度对(如
31.2304, 121.4737,需落在合理经纬度范围且至少一值 ≥10 以排除折扣0.15, 价格0.99这类噪音)、度分秒(如31°13'49"N 121°28'25"E)、或关键词引导的单个坐标(纬度:/lat=/gps等)→ 与住址并列归为「可定位的敏感位置信息」。 - 身份证号(带 GB11643 校验位)、银行卡号(按卡组织 IIN 前缀 + Luhn 校验)、邮箱、家庭住址(启发式,低置信度)、明文密码/密钥(启发式 + 后验过滤,中置信度)。详见
references/patterns.md。
第 2 步:呈现报告,让用户选择
- 汇总命中数量(按类型)与文件清单。
- 对住址/密码等低中置信度命中,明确标注「建议人工核对」,不要直接处置。
- 询问用户:对每个文件(或批量)要 脱敏 还是 移入回收站,还是跳过。
- 不要替用户做删除决定。
第 3 步:执行处置(逐文件、先备份)
- 脱敏(就地替换隐私片段,原文件先备份):
bash
python "~/.workbuddy/skills/privacy-checkup/scripts/redact_file.py" --files "a.txt" "b.docx"
支持纯文本与 Office(.docx/.xlsx/.pptx,基于 zip/XML 的最佳实践脱敏);
PDF 文本不在此脚本重写,建议人工处理(可在报告中标注)。
备份位于 ~/.workbuddy/privacy-checkup/backups/。
- 移入回收站(先备份,再进回收站,非永久删除):
bash
python "~/.workbuddy/skills/privacy-checkup/scripts/send_to_trash.py" --files "c.txt"
若用户确认要彻底清除、不保留任何副本,加 --no-backup(不建新备份)或 --purge-backup(连已存在的备份一起删):
bash
python "~/.workbuddy/skills/privacy-checkup/scripts/send_to_trash.py" --files "c.txt" --purge-backup
- 单次最多 10 个文件;执行后向用户汇报成功/失败与备份位置。
第 4 步:收尾
- 提示用户:所有原文件均备份于
~/.workbuddy/privacy-checkup/backups/,误删可恢复。 - 若做了脱敏,提醒用户检查脱敏后文件是否仍满足使用需求(尤其是 Office/PDF 中图片内的文字不会被识别)。
隐私与信息安全风险排查提示词
本技能不仅能"扫出隐私",还能作为风险排查的引导框架——扫描出命中后,用下面这套提示词(可直接复制给使用者 / AI)进一步判断泄露风险与信息安全隐患,而不只是简单删除。完整版见 references/risk_prompts.md。
提示词 A:用户隐私泄露风险排查(直接可用)
> 请基于隐私体检官的扫描报告,做一次隐私泄露风险排查,聚焦三类风险:①暴露位置(在浏览器缓存/聊天临时副本/Office自动保存/云同步目录?云同步目录=高泄露风险);②外发可传播性(是否经微信/QQ/邮件/网盘发出过);③身份关联(多条隐私能否拼出完整身份=高危)。输出按【高危/中危/低危】分级的风险清单与处置优先级(立即处置/确认后处置/可暂缓)。
提示词 B:信息安全风险问题排查(直接可用)
> 请基于扫描报告做一次信息安全风险排查,按四类归类:①明文凭据(.env/hosts/passwd/配置/脚本里的 password=/api_key=/Token);②暴露位置(经纬度、住址散落于日志/截图/备注);③缓存与历史(浏览器历史/自动填充/聊天临时副本/Office自动保存残留);④未加密明文库(SQLite/Excel 明文存放可被任意程序读取)。输出隐患清单与整改建议,表述中立合规,强调本人数据本人处置。
> ⚠️ 提示词必带合规边界:仅作用于本人有权处理的设备/数据;不访问他人加密凭据库、不破解加密;先报告后动作、逐文件确认、删除走回收站且先备份、单次最多 10 个文件。
局限与边界
- 手机:仅可读挂载目录/备份;无法读取系统分区或 App 私有加密数据。
- 密码:只识别明文凭据(如
密码:xxx、password=xxx、.env中的密钥)。浏览器/系统凭据保险库里的加密密码不在范围。 - 住址/密码为启发式,必有漏报与误报,处置前必须人工核对。
- 图片/扫描件中的文字:默认不识别。可选启用 OCR 的两种方式:
- 命令行/Python 环境:
pip install Pillow pytesseract并把tesseract.exe(+tessdata)放到脚本目录或 PATH 即可识别图片内文字; - 离线 exe:构建时加
--with-ocr(见references/distribution.md),把 Tesseract 引擎直接打进 exe,对方无需额外放文件。
未启用时图片会被统计为「跳过(未启用OCR)」而非误报。 - Office/PDF 脱敏为最佳实践:Office 通过 XML 替换文本节点;若隐私信息以图片形式嵌入(如截图),不会被脱敏。
配套资源
scripts/patterns_lib.py— 检测与脱敏核心库(纯标准库,离线)。scripts/scan_pii.py— 只读扫描,产出 JSON 报告;内置文件溯源分类引擎(classify_path/should_skip_file),--html额外生成离线 HTML 仪表盘。scripts/verify_classification.py— 文件溯源分类引擎的回归测试与单路径诊断工具。运行全套断言(规则级 + 路径级)确保"用户文件 / 系统 / 软件自带文件"区分能力不被破坏;也可python verify_classification.py "某路径"直接查看该文件被如何分类及原因。开发或改动规则后必须先跑它全绿再发布。scripts/redact_file.py— 就地脱敏(先备份)。scripts/send_to_trash.py— 移入回收站(先备份)。scripts/ocr_support.py— 可选图片 OCR(需 Pillow + pytesseract + Tesseract,缺依赖时自动跳过)。scripts/html_report.py— 生成离线 HTML 仪表盘(内联 SVG,无 CDN)。scripts/gui.py— 原生 tkinter 离线界面,给不懂命令行的用户使用。scripts/build_portable.py— 用 PyInstaller 打出单文件 exe(免装 Python);支持--with-ocr打包 OCR、--sign代码签名、--icon嵌入图标。scripts/make_icon.py— 纯标准库生成盾牌图标assets/privacy_checkup.ico(无需 PIL)。scripts/build_local_exe.py— 一句话本地生成离线版(推荐):用本机 PyInstaller 把隐私卫士打包成单文件 exe,输出到下载/隐私卫士离线版/,双击即用、无需联网、无需任何服务器托管。可选--with-ocr打包图片识别。scripts/download_offline.py— 可选·直链下载:若你已把 exe 托管到固定 URL,本脚本从地址拉取 exe/zip 到本机(仅在你已有托管地址时使用)。references/patterns.md— 各类型识别规则、校验逻辑与调优说明。references/distribution.md— 分发与离线运行的完整指引(exe 构建、OCR 打包、代码签名)。references/usage_guide.html— 面向被审计人的图文使用说明(离线可读,可随 exe 发放)。references/risk_prompts.md— 隐私泄露 / 信息安全风险排查提示词(给使用者的引导,含可直接复制的提示词与分级判定标准)。
分发与离线运行(目标对象没有 Python 时)
绝大多数被审计对象不会装 Python,本技能已为此准备好「免安装离线版」:
- 给 WorkBuddy 用户:直接分享
privacy-checkup.zip,在 WorkBuddy 里导入技能即可(本机已有 Python 运行时)。 - 给没有 Python 的普通人:把打包好的单文件可执行程序
PrivacyGuardian.exe发给他们,双击即用,无需安装、无需联网。
- 该 exe 由 PyInstaller 把 Python 解释器与本技能全部脚本一起打进一个文件,目标机器只要装有 Windows 即可运行。
- 构建方式:在本机用「带 tkinter 的 Python」执行python build_portable.py(详见references/distribution.md)。
- 分发渠道:U 盘、企业内网、网盘、邮件附件都行,因为是单文件、纯离线。
- 安全提示:exe 由本开源技能构建,对方可以审计源码;未签名的 exe 可能被杀毒软件误报,可代码签名或加入白名单。 - OCR 可选:exe 默认不含 OCR(避免体积过大)。两种方式识别图片文字:
- 随 exe 附tesseract.exe与tessdata文件夹到 exe 同目录即自动启用;
- 或构建时加--with-ocr把引擎直接打进 exe(对方无需放任何文件,但 exe 体积增至 50–90MB)。 - 跨平台:在 macOS / Linux 上同样用
build_portable.py可打出对应平台的单文件程序(需该平台的 Python + tkinter)。
一句话本地生成离线版(最省事,推荐)
用户无需任何下载或托管:只要在 WorkBuddy 说一句「生成exe」「打包离线版」或「我要离线运行的exe」,本技能即在本机运行 scripts/build_local_exe.py——用 PyInstaller 把隐私卫士源码现场打包成单文件 exe,输出到 下载/隐私卫士离线版/PrivacyGuardian.exe,双击即用。全程只在本机发生、无需联网、无需任何服务器托管。
- 触发话术示例:「生成exe」「打包离线版」「下载exe」「我要离线运行的exe」「获取隐私体检官安装包」。
- 首次运行会自动
pip install pyinstaller(约几十秒);之后每次几秒。需要本机有 Python(WorkBuddy 自带)+ tkinter(Windows 官方 Python 自带)。 - 构建完成后默认自动打开输出目录(
下载/隐私卫士离线版/),方便立刻拿到 exe;可加--no-open关闭此行为。 - 可选开关:
--with-ocr:把图片文字识别引擎(Tesseract/pytesseract)一起打进 exe,生成带 OCR 的离线版(体积变大,且运行环境需本机已装 Tesseract-OCR 引擎)。脚本会自动检测tesseract是否在 PATH,未安装时给出安装提示但仍继续打包。--no-open:构建完成后不自动打开输出目录。--no-icon:不嵌入盾牌图标。- 对目标机器:把生成的 exe 拷过去双击即用,无需 Python、无需联网(带 OCR 版仍需对方机器装 Tesseract-OCR)。
> 备选·直链下载:若你已把 exe 托管到固定 URL(自有服务器/OSS),也可用 scripts/download_offline.py 从地址直链拉取(地址配置见 download_url.txt 或环境变量 PRIVACY_GUARDIAN_DOWNLOAD_URL)。
核心原则不变:扫描只读、处置前确认、删除走回收站且先备份、单次最多 10 个文件。