零成本解锁 Microsoft 365 全功能:Ohook 钩子激活方案从入门到排错
【免费下载链接】ohookAn universal Office "activation" hook with main focus of enabling full functionality of subscription editions项目地址: https://gitcode.com/gh_mirrors/oh/ohook
Microsoft 365 订阅到期后,Excel 的进阶数据分析、Word 的实时协作、Outlook 的自动化规则会逐一变灰。Ohook 是一个面向订阅版 Office 的通用激活钩子开源项目,它通过在许可证检查环节做一层"透明转发",让本机 Office 始终认定自己持有有效授权,全程不修改系统核心文件,只需几条命令即可完成部署。这篇文章会从原理讲到实操,再带你扫清最常见的坑。
订阅到期后,Office 会变成什么样子
月初打开 Excel 准备处理季度报表,顶部弹出一行红字:"产品已停止授权"。透视表的高级选项被禁用,Word 的云端另存为变成灰色按钮,Outlook 的自动归档规则彻底失灵。这不是电脑出了问题,而是本地许可证过期后,Office 主动锁死了订阅专属功能。对很多只在单机环境办公的用户来说,每年为这些功能付订阅费,心里多少有些不是滋味——而 Ohook 恰好解决了这个具体问题。
为什么不直接装 Mondo 2016 的许可证
常逛软件论坛的人多半听说过 Mondo 2016 许可证:一张证书让全家桶应用全部可用,还支持 KMS 批量激活。听起来很美,但它有一个硬伤——Mondo 2016 的授权文件只针对旧版本 Office 做过完整更新,装到新版本上时,产品策略(product policy)里大量以office-UUID为键值的配置项是缺失的。这些策略条目恰恰决定某个功能是否对用户开放,缺了哪些、影响了什么,普通用户根本无从逐项排查。
Ohook 的思路完全不同:它让 Office 使用与当前安装版本完全匹配的许可证结构,策略完整、配置齐全,功能自然一个不少。这也是它被称为"通用激活钩子"的原因——不依赖某一代旧证书,而是跟着你装的版本走。
一个 DLL 的传话把戏:Ohook 的工作原理
把原理拆开看,其实非常克制。Office 应用启动时,会调用系统软件授权服务里的SLGetLicensingStatusInformation函数,这是它为数不多的真实许可证检查点。Ohook 的核心思路就是在这一处做文章:给 Office 一个"已授权"的回答。
具体实现靠的是一个精心包装的 DLL。它并没有重新发明一套许可证系统,而是把除了目标函数之外的所有调用原样转发给系统真正的sppc.dll——项目里的sppc.def导出了一长串转发映射,一眼就能看出这个"包装层"的身份。唯独SLGetLicensingStatusInformation这一项被替换成了自己的版本:先老老实实跑一遍真实结果,只要检测到非宽限期产品,就把状态改写为已授权,同时清空宽限时间、错误码和到期时间。整段逻辑集中在源码文件sppc.c中,篇幅很短,任何人都能打开逐行核对。
为什么这样足够安全?因为 Office 会优先加载自己 System 目录下的同名 DLL,钩子文件只要放进那个目录就能被 Office 认领,而系统全局的授权库分毫未动;其他软件照常调用系统原件,互不干扰。
动手前先选好版本:标准版还是 plus 版
项目提供两种构建,选择会直接影响侵入程度。
- 标准版:只做上面描述的许可证状态改写,是系统侵入最小的方案。
- plus 版:额外向注册表写入一个远期时间戳(
TimeOfLastHeartbeatFailure,源码里写的是2040-01-01),用来阻止 Office 联网核对订阅到期日。
表面上看 plus 版更"彻底",但它动了注册表,被安全软件误报的概率也更高。作者在项目文档里明确建议:默认用标准版,只有确实遇到在线订阅检查的问题时,才考虑 plus 版。两个版本在Makefile中通过PLUS_BUILD宏区分,编译后会得到sppc32.dll、sppc64.dll以及对应的 plus 变体共四个文件。
四步部署指南(以 64 位 C2R 安装为例)
这套方法针对 Click-to-Run(C2R)安装模式的 Office,也就是如今主流的新式安装方式。先用下面的命令把仓库拿到本地:
git clone https://gitcode.com/gh_mirrors/oh/ohook cd ohook然后以管理员身份打开命令行,依次执行四步。
第一步:把系统授权库"借"给 Office
在 Office 的 System 目录里建立一个符号链接,命名为sppcs.dll,指向系统目录里的真正授权库:
mklink "%programfiles%\Microsoft Office\root\vfs\System\sppcs.dll" "%windir%\System32\sppc.dll"这一步是为钩子 DLL 准备"后援":需要转发时,它能找到系统原件。
第二步:放入钩子 DLL
把编译好的钩子文件复制成sppc.dll放进同一个目录。同名优先,Office 启动时加载到的就是这个转发层:
copy /y sppc64.dll "%programfiles%\Microsoft Office\root\vfs\System\sppc.dll"第三步:按需屏蔽在线查询
某些版本的 Office 在本地检查之后还会去查一次订阅到期日。如果启动后看到"检查此设备许可证状态时出现问题"的横幅,就在hosts文件末尾追加一行,把这个查询地址指向本机:
0.0.0.0 ols.officeapps.live.com第四步:安装空白密钥
为当前 Office 版本安装一枚空白密钥(见下表),然后重启所有 Office 应用,解锁即生效。
空白密钥速查表
空白密钥本身没有实际价值,只是让 Office 认为存在一个合法产品。两个最常用的订阅版本对应关系如下:
| 版本标识 | 营销名称 | 空白密钥 |
|---|---|---|
| O365HomePrem | Microsoft 365 家庭版/个人版 | NBBBB-BBBBB-BBBBB-BBBBG-234RY |
| O365ProPlus | Microsoft 365 企业应用版 | NBBBB-BBBBB-BBBBB-BBBCF-PPK9C |
高频问题一页速查
部署后仍提示检查许可证状态,怎么处理?部分 Office 版本在本地检查之后,还会访问ols.officeapps.live.com查询订阅到期日,服务器查不到关联订阅,Office 便据此弹出横幅。标准版的解法就是上文提到的 hosts 拦截;plus 版则是改写心跳失败时间戳,让 Office 误以为续期检查长期失败而不再打扰用户。改完 hosts 记得执行ipconfig /flushdns并重启 Office。
能解锁 OneDrive 的 1TB 空间或 Python in Excel 吗?不能。这两类功能依赖账号体系与服务器侧授权,属于云端权益,本地钩子管不到。Ohook 只负责把本机客户端的功能开关全部打开,这一点务必提前认清。
杀毒软件报毒怎么办?DLL 注入类工具被启发式引擎误判很常见。优先使用改动更小的标准版,把编译产物加入白名单,并养成从官方仓库自行编译、核对文件来源的习惯。
Office 更新后激活失效了?更新过程可能覆盖 System 目录里的 DLL。此时符号链接通常还在,只需重新执行第二步的复制命令,再重启应用即可恢复。
认清边界:Ohook 能做什么,不能做什么
把话说透:Ohook 解决的是"订阅版本机功能全开"这一件事。它不给你的账号增加任何云端权益,也不等同于拥有真实的微软订阅。项目以 MIT 协议开源,代码完全公开可审查;同时作者声明项目主要面向授权合作方发布,不直接向终端用户提供技术支持,遇到疑难问题建议通过官方合作渠道反馈。
动手前的三点提醒
第一,只在你自己拥有、或明确允许实验的设备上操作,别拿工作电脑当试验田。动手前先备份 Office 的 System 目录,日后想还原时,删掉钩子 DLL 和符号链接即可回到原状。第二,把仓库收藏起来跟进更新,Office 大版本升级后重新走一遍部署流程。第三,本文内容定位是技术原理与学习用途;如果你需要稳定的企业级授权,或者希望完整享受微软在线服务,请通过正规渠道购买订阅——合法授权带来官方更新与客服保障,这笔账值得算清楚。
如果你只是想在单机上把订阅版功能用满,按上面的步骤操作,五分钟后重启 Word,那些灰掉的按钮会全部回来。祝顺利。
【免费下载链接】ohookAn universal Office "activation" hook with main focus of enabling full functionality of subscription editions项目地址: https://gitcode.com/gh_mirrors/oh/ohook
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考