最近做了一个小工具,用来恢复自己忘记密码的 Excel 文件。起因很简单:有一个很久以前保存的表格,打开密码完全忘了。手动跑命令虽然可行,但对不熟悉命令行的人不够友好,于是我把整个流程封装成了一个 Windows 图形化工具。ExcelPasswordRecoveryV2.0.7z

## V1.0:先把流程跑通

第一版的目标很直接:能选中文件、设置密码位数,然后自动开始尝试。

核心流程是:

1. 选择 Excel 文件;

2. 提取 Office 加密校验信息;

3. 根据用户设置生成破解范围;

4. 调用 hashcat 执行恢复;

5. 在界面里显示进度、速度、CPU/GPU 使用情况;

6. 找到密码后弹窗提示。

界面中支持两种模式:

- “多少位以内”:例如尝试 1 到 6 位;

- “固定位数”:例如只尝试 8 位。

字符集也可以自由组合,包括数字、小写字母、大写字母、常见符号和自定义字符。

开发过程中我也做了一个取舍:不逐条显示所有已尝试密码,而是展示 hashcat 返回的当前候选范围。原因很现实,逐条打印会严重拖慢破解速度,尤其是 GPU 正在高速工作时,界面刷新反而会成为瓶颈。

## 遇到的问题:换电脑就缺 hashcat

V1.0 在本机能跑,但拿到另一台电脑上就暴露了问题:提示缺少 hashcat。

这说明第一版虽然有界面,但本质上仍依赖本机环境。另一台电脑如果没有 Python、hashcat、相关脚本或依赖库,就无法直接运行。对普通使用场景来说,这不够完整。

所以 V2.0 的目标变成了:**做成离线便携版**。

## V2.0:封装运行环境

V2.0 做了几个关键改动:

- 使用 PyInstaller 将 Python 图形界面打包成 Windows 可执行程序;

- 将 hashcat 完整目录放入程序包的 tools 文件夹;

- 将 office2john.py 一并打包;

- 程序启动时优先使用同目录下的内置工具;

- 不再要求目标电脑预装 Python 或 hashcat;

- 输出结果统一保存到 runs 目录;

- 增加 README_V2.md,说明使用方式和限制。

最终目录结构大致如下:

```text

ExcelPasswordRecoveryV2.0/

├─ ExcelPasswordRecoveryV2.0.exe

├─ _internal/

├─ tools/

│ ├─ hashcat-7.1.2/

│ └─ office2john.py

├─ runs/

└─ README_V2.md

这样只需要把整个压缩包复制到另一台电脑,解压后运行 ExcelPasswordRecoveryV2.0.exe 即可。

一个不能完全封装的问题

虽然 V2.0 已经把 Python、hashcat 和辅助脚本都封装进去了,但仍然有一个限制无法完全绕开:GPU/OpenCL 驱动。

hashcat 要使用显卡加速,目标电脑必须有可用的显卡驱动和 OpenCL 环境。如果驱动缺失或太旧,程序可能无法使用 GPU,甚至无法正常启动 hashcat。这属于硬件和系统驱动层的问题,不是单靠应用打包能完全解决的。

不过相比 V1.0,V2.0 已经从“本机可用”变成了“离线电脑也能直接运行”。

版本总结

V2.0 的重点不是增加复杂功能,而是提升可用性:

  • 从命令行流程变成图形化流程;

  • 从依赖本机环境变成便携式离线包;

  • 从手动配置工具路径变成默认内置工具;

  • 从一次性脚本变成可以给别人直接使用的软件包。

这个小项目也提醒我:很多工具真正的难点不只是“能不能跑”,而是“换一台电脑、换一个用户、换一个环境后还能不能稳定地跑”。工程上的最后一公里,往往就在这些看似琐碎的封装和兼容性里。
```
key: cclddk007