资产包括私密消息、媒体、本地数据库文件和数据库密钥。信任边界是文件选择、导入的 JSON/NDJSON、数据库 schema 检查和本地提供的密钥材料。应用按设计没有远程服务边界。
- 用户提供的文件名绝不决定归档目录标识符。
- 媒体按 SHA-256 内容寻址,而不是按文件名寻址。
- SQLite 值会被 prepare 并 bind;搜索文本绝不拼接进 SQL。
- HTML 导出会转义文本和属性;不会把消息内容注入原始标记。
- 验证报告记录路径和失败类别,而不是消息正文、密钥或完整来源路径。
- 密钥提供器是显式且本地的。
ManualKeyProvider在读取后消耗其内存值。 - 快照使用 SQLite 规范的
database-wal/database-shm名称,创建自身的0700目录,将复制文件标为0600,并在复制期间源文件集合、大小或修改时间发生变化时失败。 .gitignore排除数据库、密钥、归档、媒体、解密文件和本地环境文件。- 本地取钥代码在
tools/wechat_keys,运行输出在忽略的wechat/。只修改独立副本的调试权限,保留官方微信;显式选择微信 PID/账号来源,每个导出密钥先通过数据库第一页 HMAC,再由 Core 验证。 - 自动流程默认要求全部数据库有效;缺失必须逐项明确允许,不能跳过错误密钥。账号或来源变化、调试签名被覆盖、读取失败、零数据库和空密钥不会报告成功,报告明确标记未完整覆盖。
Swift Data 不是可保证安全内存的原语。提供器会尽量缩短生命周期和复制次数;SQLCipher 原始密钥字面量仅在进程内生成,绝不会传递给子进程、文件、日志、崩溃报告或诊断。不得记录密钥或将其传给诊断。
SQLCipherDatabaseDecryptor 动态加载本地安装的 SQLCipher runtime,以只读方式验证来源快照,然后在 0700 工作目录中创建加密快照以供导出。临时普通 SQLite 数据库及所有 SQLite sidecar 均为 0600;导出、detach 或验证失败时,会移除 database、database-wal、database-shm 和 database-journal。源文件不会以写入方式打开,也绝不会被传给清理流程。端到端测试只使用随机密钥材料和生成的合成数据库。绝不可添加将密钥字面量置于参数中、SQL 临时文件或日志的 shell-out 解密路径。新增明确密钥导出使用专用私有 JSON,而实际解密继续由 Core 在进程内完成,不将密钥字面量传给子进程。
文件复制加复制前后属性检查可发现变化的来源,但不能证明是事务一致的 SQLite 快照。用户必须在验证或导入真实数据库前完全退出微信。
- 未经明确授权和隐私审查,不得向 Core 添加网络调用。
- 在每个导入提供器边界验证来源文件大小/类型和解码后的形状。
- 保持源数据库只读,并且只在专用临时目录中处理副本。
- 所有普通错误都应保持通用;绝不得包含可能嵌入私有输入的原始 SQL 错误。
- 不得提交真实聊天数据、媒体、数据库快照、测试账号或机密。