5分钟读懂Ohook:免费解锁Microsoft 365完整功能的开源钩子方案
5分钟读懂Ohook:免费解锁Microsoft 365完整功能的开源钩子方案
【免费下载链接】ohookAn universal Office "activation" hook with main focus of enabling full functionality of subscription editions项目地址: https://gitcode.com/gh_mirrors/oh/ohook
每个月末最怕的事是什么?打开 Word 准备交方案,功能区上方却挂着一行刺眼的"许可证出现问题",功能被锁定在只读模式。如果你正在被 Microsoft 365 的订阅费用劝退,又不想在"低价账号"和盗版安装包里来回踩坑,那么 Ohook 这个开源激活方案值得你花 5 分钟认真了解一下:它不修改任何 Office 核心文件,通过一个轻量钩子就能让订阅版 Office 的完整功能正常运转,而且代码全部开源、可自行审查。
每次打开 Office 都提心吊胆?先认识一下 Ohook
先说一个真实的场景:小王是自由职业者,靠 Word、Excel、PowerPoint 接单干活,但按月订阅 Microsoft 365 对他来说是一笔不小的固定开销。他试过网上流传的各种"一键激活",不是被杀毒软件拦下,就是激活后一更新就失效,甚至遇到过捆绑木马的"激活工具"。直到有人给他推荐了 Ohook,他才第一次见到"激活"这件事还能做得这么干净——不动系统文件、不改注册表(普通版)、杀毒软件几乎不报警。
Ohook 是一个面向订阅版 Office 的通用"激活"钩子项目,其核心目标正如项目描述所说:启用订阅版本(Microsoft 365)的完整功能。它把"破解 Office"这件事从"改文件、打补丁"变成了"在门口放一个会撒谎的门卫",思路完全不同,副作用也小得多。
Ohook 是什么:给许可证检查"打掩护"的小门卫
你可以把 Office 的许可证检查想象成小区门口的保安岗亭。每次你开车进小区(启动 Word、Excel),保安都要检查你的门禁卡(许可证状态)。传统激活方式是偷偷把你的门禁卡换成一张伪造卡,一旦物业换系统(Office 更新)就立刻失效;而 Ohook 的做法是站在保安旁边,每当保安问"这张卡能用吗"时,替你说一句"能用,放行"——门禁卡本身还是原来那张,什么都没换。
这个"打掩护"的动作发生在sppc.dll这个系统库里。Office 每次启动都会调用其中的SLGetLicensingStatusInformation函数来确认授权状态,Ohook 提供的钩子库把这一行检查结果"翻译"成"已授权",Office 就开开心心地以完整功能模式运行了。
为什么值得关注:Ohook 的核心价值清单
- ✅系统零修改:不碰 Office 核心文件、不修改原始
sppc.dll,普通版连注册表都不动,安全边界清晰。 - ✅可逆易恢复:删除钩子文件、移除符号链接即可回到原始状态,操作有后悔药。
- ✅正确版本许可证:使用与你安装版本匹配的正版空白密钥,功能按预期工作,而不是"张冠李戴"。
- ✅开源可审查:核心逻辑只有不到 100 行 C 代码,全仓库一眼看得到底,没有藏后门的空间。
- ✅更新耐受性更好:钩子只盯着一个固定函数,Office 更新后通常无需重新部署。
- ✅双架构支持:同时提供 32 位和 64 位版本的钩子库,覆盖主流 Windows 环境。
Ohook 激活原理:为什么改写一个返回值就够了
技术上讲,这套方案的精妙之处在于三个事实的叠加:
- Office 的 C2R(即点即用)版本在安装目录下自带了
System目录,里面放着它自己的sppc.dll,程序启动时优先加载这个目录下的库; - 整个许可证检查流程中,唯一真正影响启动的关键判断就发生在
SLGetLicensingStatusInformation这个函数里; - 于是,只要在这个自带的
sppc.dll位置上放一个"冒名顶替"的钩子库,把检查结果改掉即可——其他所有函数原样转发给系统真实的sppc.dll,功能不受影响。
整个检查链路用一张图就能看清:
对应的核心代码其实只有一小段,位置在 sppc.c 的SLGetLicensingStatusInformationHook函数里:
for(int i = 0; i < *pnStatusCount; i++) { if((*ppLicensingStatus+i)->eStatus == SL_LICENSING_STATUS_UNLICENSED) continue; if(IsGracePeriodProduct(hSLC, &((*ppLicensingStatus+i)->SkuId))) continue; (*ppLicensingStatus+i)->eStatus = SL_LICENSING_STATUS_LICENSED; (*ppLicensingStatus+i)->dwGraceTime = 0; (*ppLicensingStatus+i)->dwTotalGraceDays = 0; (*ppLicensingStatus+i)->hrReason = 0; (*ppLicensingStatus+i)->qwValidityExpiration = 0; }翻译成大白话:先调用系统原函数拿到真实状态,如果本来就是"未授权"或名字里带 Grace(试用/宽限期)的产品就放行不管,其余所有授权相关状态一律强制改成"已授权",并把宽限时间、失效时间等字段清零。sppc.def里的导出表则把其他几十个函数(如SLCallServer、SLInstallLicense等)全部转发给sppcs.dll——这正是安装时那个符号链接的用途。
Ohook 安装步骤:Windows 下几分钟搞定
开始之前,你需要先获取项目文件并准备好编译产物。官方推荐从授权合作伙伴处获取编译好的 dll,如果你想自己动手,也可以按后文的"深入玩法"一节用 Makefile 自行编译。获取源码的方式如下:
git clone https://gitcode.com/gh_mirrors/oh/ohook假设你的环境是64 位 Windows + 64 位 C2R 版 Office,激活流程一共四步:
第一步:创建符号链接,为函数转发搭桥
mklink "%programfiles%\Microsoft Office\root\vfs\System\sppcs.dll" "%windir%\System32\sppc.dll"这一步让 Office 目录里的sppcs.dll指向系统真实库,钩子 dll 里所有未钩取的函数都能通过它"接力"到真实系统库,保证除许可证状态外其他功能毫发无损。
第二步:复制钩子库,实现"冒名顶替"
copy /y sppc64.dll "%programfiles%\Microsoft Office\root\vfs\System\sppc.dll"64 位 Office 用sppc64.dll,32 位 Office 则改用sppc32.dll(32 位 Office 装在 64 位系统时,符号链接目标应对应SysWOW64下的系统库)。注意顺序:先建链接,再复制文件。
第三步:安装空白密钥
给当前版本安装一枚空白密钥,让许可证体系里存在一个"可被钩子改写"的授权项:
| Office 版本 | 营销名称 | 空白密钥 |
|---|---|---|
| O365HomePrem | Microsoft 365(家庭版/个人版) | NBBBB-BBBBB-BBBBB-BBBBG-234RY |
| O365ProPlus | Microsoft 365 企业应用版 | NBBBB-BBBBB-BBBBB-BBBCF-PPK9C |
第四步:重启 Office 应用
关闭并重新打开 Word、Excel、PowerPoint,检查右上角是否还提示未激活。一切正常的话,此时完整功能已经可用。
小提示:个别版本会在顶部弹出"检查此设备许可证状态时出现问题"的横幅,这通常是因为 Office 在尝试联网核对订阅有效期。此时可以在
C:\Windows\System32\drivers\etc\hosts里加一行0.0.0.0 ols.officeapps.live.com屏蔽该检查,然后重启 Office。
实战场景:学生个人与小型团队分别怎么用
场景一:预算有限的学生与个人用户。交论文、做图表、排 PPT 是刚需,但订阅费不便宜。这类用户推荐使用普通版 Ohook:侵入性最小,杀毒软件误报率最低,日常更新 Office 也不容易失效。配合正确的空白密钥,Word 的语法检查、Excel 的动态数组与 Power Query、PowerPoint 的设计灵感等功能都能正常使用。
场景二:需要统一部署的小型团队。创业团队希望给每台员工机装上标准化的 Office 环境,又不想逐台手动操作。可以把安装步骤写成一个批处理脚本,让运维一键执行:
@echo off REM 为 64 位 Office 批量部署 Ohook(需管理员权限) set "SPPCS=%programfiles%\Microsoft Office\root\vfs\System\sppcs.dll" set "SPPC=%programfiles%\Microsoft Office\root\vfs\System\sppc.dll" mklink "%SPPCS%" "%windir%\System32\sppc.dll" copy /y sppc64.dll "%SPPC%" echo 部署完成,请重启 Office 应用脚本跑完后让员工重启一遍 Office 即可,几台到几十台机器都能统一管理。
Ohook 常见问题与避坑技巧
Q1:为什么官方推荐用普通版而不是增强版?普通版(ohook)只做一件事——拦截许可证状态返回;增强版(ohook+)还会在注册表HKCU\Software\Microsoft\Office\16.0\Common\Licensing\Resiliency下把TimeOfLastHeartbeatFailure改成未来时间,用来阻止联网订阅检查。后者对系统侵入更多,被安全软件误报的概率也更高,所以默认选普通版,只有确实遇到横幅提示时才考虑增强版。
Q2:能不能用它换来 OneDrive 1TB 空间、Python in Excel 这类在线功能?不能。Ohook 只解决"本地许可证状态"问题,云端订阅带来的在线权益不在覆盖范围内,不要抱有不切实际的期待。
Q3:为什么不用 Mondo 2016 许可证凑合?Mondo 许可证虽然能让所有 Office 应用跑起来并支持 KMS,但它对新版 Office 只做了部分适配,缺少新版本许可证里的部分产品策略(例如大量office-UUID条目),你无法确认哪些功能会悄悄失效。Ohook 用的是与已安装版本严格匹配的空白密钥,功能行为更接近正规授权。
Q4:激活后功能仍然受限怎么办?按顺序排查:确认密钥版本与 Office 版本匹配;确认符号链接和文件复制顺序正确(先建链接再复制);确认钩子 dll 放进了 Office 的vfs\System目录而不是别处;最后重启所有 Office 应用。若问题依旧,再考虑换增强版并配合 hosts 屏蔽方案。
Q5:Office 更新后失效了?通常是符号链接或钩子文件被覆盖所致。先检查sppcs.dll链接是否仍指向系统库,再检查sppc.dll是否还是钩子库,必要时按安装步骤重新部署一遍即可。
Q6:杀毒软件拦截怎么办?优先把钩子文件加入白名单并确保文件来自可信来源;普通版被误报的概率本身很低,若频繁被拦,考虑从普通版切换到更克制的配置而非反向操作。
深入玩法:自己编译、ohook+ 与批量部署
如果你对源码感兴趣,项目提供了完整的 Makefile,用 MinGW 交叉编译器即可一键产出四个版本:
make all编译产物一览:
| 产物 | 说明 |
|---|---|
| sppc32.dll / sppc64.dll | 普通版钩子库,32/64 位 |
| sppcplus32.dll / sppcplus64.dll | 增强版(PLUS_BUILD),额外修改心跳注册表 |
Makefile 里默认编译器路径为C:/mingw32/bin与C:/mingw64/bin,如果你的工具链在别处,改一下PREFIX32/PREFIX64两个变量即可。值得留意的是 sppc.rc 通过PLUS_BUILD宏区分版本信息,说明"普通版与增强版"本质是同一份源码、同一套机制,差别只有注册表那一步,这本身就是一种克制的设计哲学。
进阶方向还可以研究:IsGracePeriodProduct为什么特意放行名字含 "Grace" 的产品(避免把试用宽限期也误判成已授权);sppc.def里几十个转发条目如何保证"只改一处、其余全转发";以及如何把你的批量部署脚本再封装一层,配合系统镜像或组策略实现开机自动修复。
收尾:动手前记住这几点
- 先备份再操作:涉及 Office 安装目录与符号链接,动手前确认你的重要文档已同步或备份。
- 版本要对号入座:64 位 Office 配
sppc64.dll,32 位配sppc32.dll,密钥按表格严格匹配。 - 优先级排序:默认普通版;遇到横幅提示再考虑 hosts 屏蔽或增强版。
- 保持清醒预期:它解决的是本地许可证状态,云端的 OneDrive 空间、AI 功能不在范围内。
- 源码优先:建议亲自把 sppc.c 通读一遍,上百行 C 代码足以让你完全掌握这套机制的边界。
现在你可以克隆仓库、按四步流程走一遍,亲手验证"门卫撒谎"这套方案是否像传说中一样安静可靠。最后照例提醒一句:请遵守软件许可协议与当地法律法规,本项目更多用于技术研究与学习,请在法律允许的范围内使用并支持正版。
【免费下载链接】ohookAn universal Office "activation" hook with main focus of enabling full functionality of subscription editions项目地址: https://gitcode.com/gh_mirrors/oh/ohook
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
