NextWeb4/phone-record-manager

GitHub: NextWeb4/phone-record-manager

一款本地 Windows 桌面应用,帮助用户记录手机号在各类网站和应用上的绑定情况,并以任务清单方式管理手动换号流程。

Stars: 160 | Forks: 1

English 简体中文 日本語

# 手机号记录管理器 一款本地 Windows 桌面应用程序,用于记录手机号绑定情况,并管理手动换号工作,无需自动化访问第三方账户。 [![最近提交](https://img.shields.io/github/last-commit/NextWeb4/phone-record-manager?style=flat-square)](https://github.com/NextWeb4/phone-record-manager/commits/main) [![仓库大小](https://img.shields.io/github/repo-size/NextWeb4/phone-record-manager?style=flat-square)](https://github.com/NextWeb4/phone-record-manager) [![GitHub stars](https://img.shields.io/github/stars/NextWeb4/phone-record-manager?style=flat-square)](https://github.com/NextWeb4/phone-record-manager) ![Python](https://img.shields.io/badge/Python-3776AB?style=flat-square&logo=python&logoColor=white) [![MIT License](https://img.shields.io/github/license/NextWeb4/phone-record-manager?style=flat-square)](LICENSE) ## 概述 手机号记录管理器 v1.2.0 使用 Python、PySide6 和 SQLite 构建。其数据库保存在本地 Windows 账户下,提供中文和英文界面模式,并将手机号更换视为由用户手动完成的核对清单。 该应用程序不提供云同步、登录网站、提交短信验证码、修改第三方资料、抓取提供商仪表板,或绕过验证码、速率限制或账户安全检查的功能。 ## 功能 | 领域 | 应用程序提供的功能 | | --- | --- | | 本地访问 | 首次运行主密码设置、PBKDF2-HMAC-SHA256 验证、明确的未初始化/已配置/损坏状态,以及 1 到 1440 分钟的空闲锁定间隔 | | 手机号码 | 多个号码、绑定计数,以及独立的活跃、更换中、已暂停、已取消或异常的生命周期状态 | | 注册信息 | 创建、编辑、搜索、排序、软删除和恢复网站/应用记录,包含账户、URL、辅助恢复邮箱、标签和笔记 | | 模板 | 常用网站/应用模板以及完全自定义的记录 | | 更换工作 | 手动任务、项目状态、批量换号、历史记录,以及防止活跃任务冲突或记录被删除的保护机制 | | 数据传输 | 流式和有界 CSV 导入、CSV 导出,以及使用 `cryptography.fernet` 进行身份验证的加密备份导入/导出 | | 桌面体验 | 浅色/深色主题、中文/英文导航和设置、单实例启动、操作历史记录和隐私受限的滚动诊断 | 普通的记录编辑和批量更改无法静默绕过活跃的更换任务。该仓库在其服务/仓库层强制执行换号、删除和手机状态的不变性,并在恢复备份期间再次对其进行验证。 ## 要求与兼容性 - **操作系统:** 应用程序 UI、PowerShell 打包、可执行文件元数据和 MSI 均针对 Windows x64。 -**发布版 Python:** CI 和发布版本使用 CPython 3.12.7。 - **锁定版本的包:** `requirements.txt` 固定了 wheel 版本和 SHA-256 哈希值,包括 `PySide6_Essentials==6.11.1`、`shiboken6==6.11.1`、`cryptography==49.0.0` 和 `pyinstaller==6.21.0`。 - **存储:** SQLite 来自 Python 的标准库。当前用户需要对应用程序数据目录的写入权限。 - **MSI 构建:** WiX Toolset CLI 5.0.2 由 CI 安装。本地 MSI 构建需要在 `PATH` 中包含 WiX;而源码执行和仅便携版构建则不需要。 Windows 软件包特意安装了 `PySide6_Essentials` 和 `shiboken6`,而不是 PySide6 元包或 `PySide6_Addons`。打包钩子排除了未使用的 Qt PDF、虚拟键盘、Network 和 Mesa OpenGL 组件。 ## 安装与运行 ### 使用发布包 从 [GitHub Release v1.2.0](https://github.com/NextWeb4/phone-record-manager/releases/tag/v1.2.0) 下载其中一项资产: - `phone-record-manager-windows-v1.2.0.zip`:解压并运行 `手机号记录管理器.exe`; - `phone-record-manager-windows-v1.2.0.msi`:Windows 安装程序; - `SHA256SUMS.txt`:ZIP 和 MSI 的 SHA-256 值。 该发布版本未进行代码签名。在运行之前,请根据 `SHA256SUMS.txt` 验证下载的 ZIP 或 MSI,尤其是在 Windows 报告未知发布者时。 ### 从源码运行 ``` python -m venv .venv .venv\Scripts\python -m pip install --require-hashes -r requirements.txt .venv\Scripts\python -m phone_record_manager ``` 使用与发布工具链匹配的 CPython 3.12 Windows 环境。应用程序入口点和 PyInstaller 入口点都委托给 `phone_record_manager.app`。 ## 典型工作流 1. 首次启动时,创建一个至少包含八个字符的主密码。 2. 添加手机号码,选择其生命周期状态,并添加与其绑定的网站/应用。 3. 通过全文搜索、状态过滤器和表格排序查找记录;根据需要软删除或恢复它们。 4. 在将注册信息移动到另一个活跃号码之前,创建一个更换任务,然后更新每个手动工作项。 5. 在“设置”中设置空闲锁定间隔、主题和中/英文界面语言。 6. 导出加密备份,将其密码单独保存,并在删除旧数据副本之前验证恢复情况。 记录中的登录 URL 仅限于有效的 HTTP/HTTPS 地址。打开已保存的链接仍然是用户操作;应用程序不会提交凭据或验证码。 ## 本地数据与恢复 默认数据位置为: ``` %LOCALAPPDATA%\PhoneRecordManager\phone_records.sqlite3 ``` 开发或测试运行可以使用隔离的目录: ``` $env:PHONE_RECORD_MANAGER_HOME="D:\Temp\PhoneRecordManagerData" .venv\Scripts\python -m phone_record_manager ``` 同一个数据目录可能包含 `runtime-errors.log`,这是一个限制为异常类型和代码位置的滚动诊断文件。它不得包含异常消息、手机号码、密码、备份路径或业务字段。 - CSV 适用于审查和迁移,但未加密;请保护并删除临时的 CSV 副本。 - 加密备份提供经过身份验证的加密。丢失备份密码将使该备份无法恢复。 - 导出使用同一目录下的临时文件,将其刷新并原子替换目标文件。实时的 SQLite 文件及其 `-wal`、`-shm` 和 `-journal` 伴随文件不能作为导出目标。 - 恢复操作将在一个事务中替换数据之前,验证表/字段结构、值类型、主键、软删除状态、引用和替换工作流不变性。 - 如果四个主密码设置不完整或格式不正确,启动时将拒绝运行。不存在未经身份验证的密码重置途径。 在迁移之前,请阅读[备份与恢复](docs/BACKUP_AND_RESTORE.md);在处理真实个人数据之前,请阅读[安全模型](docs/SECURITY_MODEL.md)。 ## 测试与验证 ``` python -m unittest discover -s tests python -m compileall -q phone_record_manager scripts tests python -m pip check ``` 九个测试模块涵盖了生命周期和单实例行为、数据库 schema、诊断、CSV/加密传输、打包入口点、密码哈希、手机/注册服务、替换工作流以及离屏 UI 行为。 Windows CI 还会解析每个 `scripts/*.ps1` 文件,使用 `--require-hashes` 安装依赖项,构建便携版 ZIP 和 MSI,并在隔离的 `PHONE_RECORD_MANAGER_HOME` 中启动打包后的可执行文件。没有声明单独的 lint 或 formatter 命令。 ## 构建与发布 仅构建 PyInstaller 目录包: ``` .\scripts\build_exe.ps1 ``` 构建无需 WiX 的便携版 ZIP: ``` .\scripts\build_release.ps1 -SkipMsi ``` 在将 WiX Toolset CLI 放入 `PATH` 后构建完整的本地发布版本: ``` .\scripts\build_release.ps1 ``` 完整构建会运行测试、创建 PyInstaller 目录包、复制许可证/源码提供材料、审核 Qt 清单和私有工件、生成 ZIP 和 MSI、验证 MSI 并写入校验和。 ``` release-assets\phone-record-manager-windows-v1.2.0.zip release-assets\phone-record-manager-windows-v1.2.0.msi release-assets\SHA256SUMS.txt ``` 如果 WiX 或 MSI 不可用,默认构建将失败;对于仅需便携版验证的情况,请明确使用 `-SkipMsi`。发布工作流仅在接受与 `phone_record_manager.__version__` 匹配的新 `v..` 标签时,从已验证的标签提交进行发布,并拒绝覆盖现有的 Release。 ## 项目结构 | 路径 | 职责 | | --- | --- | | `phone_record_manager/app.py` | QApplication 设置、数据目录、单实例锁、数据库生命周期、登录和主窗口 | | `phone_record_manager/ui/` | PySide6 窗口、对话框、页面、图标、格式化和浅色/深色主题 | | `phone_record_manager/services/` | 身份验证、注册、替换工作、设置、日志记录和导入/导出工作流 | | `phone_record_manager/db/` | SQLite schema、连接、仓库、统计信息、操作历史记录和备份持久化 | | `phone_record_manager/security/` | 密码哈希和敏感字段定义 | | `phone_record_manager/diagnostics.py` | 隐私受限的滚动未处理错误日志 | | `tests/` | 标准库 `unittest` 和离屏 Qt 回归测试套件 | | `scripts/` | 版本元数据、PyInstaller、MSI、校验和、隐私和发布编排 | | `packaging_hooks/` | 已审核的 PyInstaller Qt 收集/排除规则 | | `installer/phone_record_manager.wxs` | WiX x64 MSI 定义 | | `docs/` | 备份、安全和 v1.2.0 代码审计证据 | ## 安全说明 - 主密码是应用程序的访问门禁,而非数据库加密。请使用 Windows 设备加密或 BitLocker,并将数据目录排除在共享/云同步文件夹之外。 - 当算法、迭代次数、Base64、盐值或摘要结构无效时,密码配置将拒绝运行。 - 备份恢复在删除或替换任何现有行之前会验证所有输入。 - CSV 和备份输出无法通过规范化路径、符号链接或硬链接来别名化实时数据库。 - 类电子表格的导出必须对以 `=`、`+`、`-` 或 `@` 开头的单元格保留公式注入防御。 - 发布版校验和证明的是文件完整性,而不是发布者身份;当前的包保持未签名状态。 ## 状态与限制 - 该仓库处于活跃状态,并记录了 v1.2.0 的 Windows 发布路径。 - 手机号更换是刻意手动进行的;没有账户自动化或远程恢复功能。 - 应用程序 UI 支持中文和英文。三种 README 语言并不代表存在日语应用程序界面。 - 可用性取决于用户的本地磁盘和备份操作;该项目不提供云同步。 - 单个 SQLite 连接由 Qt 主线程拥有。大型导入、PBKDF2 工作或备份恢复可能会暂时阻塞界面。 - 自动锁定会保护可见会话,但可能会关闭活跃的模态窗口;未保存的表单输入可能会丢失。 ## 作者 - HaoXiang Huang - [didadida1688@gmail.com](mailto:didadida1688@gmail.com) - - ## 许可证与第三方组件 应用程序源代码在 [MIT License](LICENSE) 下发布。Windows 包还包含单独授权的运行时组件,详见 [THIRD_PARTY_NOTICES.md](THIRD_PARTY_NOTICES.md) 和 [`THIRD_PARTY_LICENSES/`](THIRD_PARTY_LICENSES)。 对于此包,Qt/PySide6 是在 LGPL-3.0-only 下分发的。Qt 共享库保持在 `_internal/PySide6` 下独立且可替换;对应源代码位置、三年书面要约和替换说明在 [QT_SOURCE_OFFER.md](QT_SOURCE_OFFER.md) 中。
标签:PySide6, Python, SQLite, 信息记录, 无后门, 本地数据管理, 桌面应用, 漏洞挖掘, 逆向工具