把 massgrave.dev 的 Microsoft Activation Scripts(MAS)从「打开 PowerShell → 粘贴命令 → 在文字菜单里选数字」变成双击一次、点一下按钮的图形界面。
不需要安装任何运行环境:宿主是 Windows 自带的 PowerShell 5.1 + System.Net.HttpListener,前端是纯静态 HTML/CSS/JS,无外部依赖、无 CDN、首次成功运行后支持缓存离线运行。
下载后先完整解压,再双击解压目录里的 Start.cmd 或 一键激活.cmd。不要直接在压缩包预览窗口里运行。详细步骤见包内的 使用说明.txt。
GitHub 在部分网络环境下可能下载较慢;下载失败时可打开所有 Release页面,或改用作者提供的国内网盘镜像。
- 双击
一键激活.cmd - UAC 弹窗点「是」(激活必须提权)
- 程序窗口自动打开 → 点 「开始一键激活」
就这三步。程序会自己判断该做什么,不需要你理解 HWID / Ohook / TSforge / KMS 的区别。
如果预检里出现 「Defender 可能拦截」,先点它右边的 「添加排除」 再执行——原因见下文。
关闭那个黑色命令行窗口即可退出程序。
一键激活.cmd 提权 + 启动宿主
└─ app\server.ps1 本地 Web 宿主(127.0.0.1,随机空闲端口)
├─ 读取真实授权状态 WMI SoftwareLicensingProduct + Office C2R 注册表
├─ 推荐引擎 自动决定要执行哪些开关
├─ app\web\* 前端界面(极光玻璃风格)
└─ app\worker.ps1 执行引擎
├─ 取 get.activated.win 当前锁定的 commit 与 SHA256
├─ 取脚本:本机已缓存该版本 → 直接用;否则从官方三镜像下载
├─ 校验 SHA256,不匹配就拒绝执行
├─ 三镜像全挂 → 回退到本机任何已验证过的副本(跑过一次后断网可用)
└─ 无人值守执行 + 输出流式回传到界面
| 检测结果 | 选择的方案 |
|---|---|
| Windows 未激活,且是 Win10/11 非 Server/LTSC | /HWID(永久数字许可证) |
| Windows 未激活,但是 Win7/8.1 或 Server/LTSC | /Z-WindowsESUOffice(TSforge) |
| Office 已安装但无产品密钥 | /Ohook(永久、离线) |
| 两者都需要 | 两个开关一次执行 |
| 两者都已授权 | 按钮置灰,显示「已全部激活」 |
它不会去动已经激活的项。 本机实测:Windows 11 家庭版已授权(RETAIL,密钥尾号 8HVX7),Office 2021 家庭和学生版也已授权,因此推荐结果是「已经全部激活,无需操作」,按钮置灰。
这是踩过坑之后才写对的地方。Office 的授权存在两套互不相通的机制里:
| 机制 | 位置 | 谁用 |
|---|---|---|
| SPP(旧) | SoftwareLicensingProduct / ospp.vbs |
批量授权、KMS |
| vNext(新) | %ProgramData%\Microsoft\Office\Licenses\<版本>\<类型>\<id> |
零售版 / OEM / 账号数字许可证 / Microsoft 365 |
现代 Office(2016 以后)不会把产品密钥写进 SPP。所以在一台完全正常的、用微软账号激活的机器上,ospp.vbs /dstatus 会报 No installed product keys detected,SoftwareLicensingProduct 里那 9 条记录也全是 ---UNLICENSED---(错误码 0xC004F014)——但那 9 条只是没人用的 SKU 槽位(Trial / Demo / Subscription / Grace 等),不代表未激活。
真正的许可证是 vNext 目录下的一枚签名令牌(UTF-16LE JSON,其中 License 字段是 base64 编码的 JSON)。本机解出来是:
LicenseType = Perpetual
Status = Provisioned
ActivationDate = 2022-09-20
ExpiresOn = 9999-12-31 → 永久
ProductReleaseId = HomeStudent2021Retail → 与已安装的 C2R 产品一致
Beneficiary = User → 绑定账号而非设备
判定规则:Status == Provisioned 且未过期才算已激活;令牌存在但未生效或已过期会单独报出来,不会静默当成"无产品密钥"。
只查 SPP 会得到一个假阴性——把这台已激活的机器判成"Office 需要激活",进而推荐一个完全没有必要的 Ohook 操作。这正是本项目在真实机器上暴露并修掉的一个 bug。
这是实测出来的真实坑,不是臆测:
Defender 检测记录 : Trojan:Script/Wacatac.H!ml
命中文件 : MAS_AIO.cmd
处置 : 已隔离删除
MAS 本体长期被 Defender 以机器学习启发式(!ml 后缀就是启发式判定)误报。一旦被隔离,MAS 会以 Failed to create MAS file in temp folder 失败——普通用户看到这句话是完全懵的。
所以本程序做了两件事:
- 预检阶段直接告诉你 Defender 实时防护开着、且本工具目录还没有排除项;
- 提供 一键
Add-MpPreference -ExclusionPath按钮,排除范围只限%LOCALAPPDATA%\MAS-OneClick(脚本缓存目录),不会关掉整个实时防护,也不碰系统盘其它位置。
这个按钮只在你自己点的时候才执行,程序不会偷偷改你的安全设置。想撤销:再点一次移除,或手动
Remove-MpPreference -ExclusionPath "$env:LOCALAPPDATA\MAS-OneClick"| 项 | 做法 |
|---|---|
| 脚本来源 | 只有三个官方镜像:raw.githubusercontent.com(锁定 commit)、dev.azure.com/massgrave、git.activated.win,每次随机顺序尝试,没有固定的单点 |
| 完整性 | 先抓官方加载器 get.activated.win,读出它当前锁定的 commit + SHA256,再下载脚本并用和加载器完全相同的哈希算法比对(已实测复现:850F9796…0BFA,与官方声明一致)。不匹配直接中止,绝不执行未校验内容 |
| 缓存复验 | 复用本机缓存前会重新计算哈希,与文件名里记录的前 8 位比对。不符即判定被篡改,删除该文件并中止(退出码 7),绝不会执行 |
| 网络访问面 | 只监听 127.0.0.1,并对 Host 头做校验 |
| 本地接口 | 所有写操作要求每次启动随机生成的 token(注入页面),其它本地网页无法驱动它 |
| 命令注入 | /api/run 的开关白名单校验 ^/[A-Za-z0-9\-]+$,非法输入直接拒绝(已实测:rm -rf / 被拒) |
| 目录穿越 | 静态文件路径过滤 ..(已实测:/../server.ps1 返回 404) |
脚本本体不落盘到程序目录之外;缓存文件放在 %LOCALAPPDATA%\MAS-OneClick\mas\,文件名带哈希前 8 位——文件名本身就是一份可自校验的凭据,所以「复用缓存」不会成为信任缺口。
这是个在线工具,但跑成功过一次之后就不再完全依赖上游。执行引擎取脚本的优先级是:
| 顺序 | 来源 | 条件 | 需要网络吗 |
|---|---|---|---|
| a | 本机缓存里上游当前正在发布的那个版本 | 加载器可达,且缓存里有同一版本 | 只需要加载器 |
| b | 官方三镜像 | 缓存里没有该版本 | 需要 |
| c | 本机缓存里任何已验证过的旧版本 | 加载器不可达,或三镜像全挂 | 完全不需要 |
两个有意为之的取舍:
- 加载器
get.activated.win不可达时,优先用缓存而不是硬下载。 因为那个分支下拿不到官方 SHA256,新下载的内容根本无法校验;而已缓存的副本是校验通过才落盘的,严格更可信。 - 缓存复验不是走过场。 每次重用前重算哈希并与文件名比对,被改过的缓存会被删除,而不是被执行。
实测过的场景(用一份受控副本把镜像/加载器指向必失败地址,并在执行前截停,不真跑 MAS):
| 场景 | 结果 |
|---|---|
| 加载器正常 + 有对应版本缓存 + 三镜像全挂 | 退出码 0,0 次网络请求,直接命中缓存 |
| 加载器正常 + 无缓存 + 三镜像全挂 | 退出码 4,明确提示本机无可用缓存 |
| 加载器正常 + 缓存被篡改 + 三镜像全挂 | 退出码 7,判定被篡改并删除该文件 |
| 加载器也挂 + 有有效缓存 + 三镜像全挂 | 退出码 0,复验通过后直接使用,0 次镜像尝试 |
| 加载器正常 + 无缓存 + 镜像正常 | 退出码 0,正常下载且 SHA256 校验通过 |
所以真实的风险点不是「网站会不会挂」,而是首次使用必须有网。第一次跑通之后,这台机器就自己具备离线能力了。界面预检里的「脚本完整性」会直接告诉你本机现在有没有这个能力。
深色极光 + 玻璃拟态,Win11 Fluent 风格,全部系统字体(Segoe UI Variable / 微软雅黑 UI),无网络字体依赖。
- 左侧栏 — Windows / Office / 权限 三项实时摘要
- 顶部 — 权限与网络状态胶囊
- 状态卡 ×2 — 呼吸圆环表示激活状态,列出真实版本、内部版本、功能更新、授权渠道、密钥尾号
- 一键激活卡 — 中文推荐方案 + 将要执行的开关标签 + 右侧六段式进度轨道(带连接线)+ 四格预检
- 激活方式 ×4 — HWID / Ohook / TSforge / 在线 KMS,自动给推荐项打角标,也可单独执行
- 运行日志 — 终端样式,脚本输出逐行流式回传,按内容着色,
[oneclick]引擎行自动翻译成中文
已用无头 Chrome 做 DOM 布局审计(1360×900):OVERFLOW_X[0],docScrollWidth == clientWidth(无横向溢出),四张方法卡尺寸完全一致 329×249,图标 SVG 全部渲染,区块纵向节奏 overview@130 / action@508 / methods@1076 / console@1688。
响应式断点 1180 / 1000 / 780px,支持 prefers-reduced-motion。
MAS-OneClick\
├─ Start.cmd ASCII 名备用入口(转发给下面那个,防中文名在传输中乱码)
├─ 一键激活.cmd 傻瓜式入口(提权 + 启动)
├─ 使用说明.txt 给使用者看的白话说明
├─ app\
│ ├─ server.ps1 宿主:状态探测 / 推荐引擎 / API / 任务调度
│ ├─ worker.ps1 执行引擎:取脚本 + 校验 + 无人值守执行
│ └─ web\
│ ├─ index.html
│ ├─ styles.css
│ └─ app.js
├─ LICENSE MIT
├─ .gitignore
└─ README.md
运行期(自动创建,可随时删):
%LOCALAPPDATA%\MAS-OneClick\
├─ state.json 任务状态
├─ run\console.log 脚本原始输出
├─ mas\MAS_AIO_<hash>.cmd 已校验的脚本缓存(有了它就能离线运行)
└─ browser\ 应用窗口的独立浏览器配置
# 只跑状态探测,不起服务
powershell -ExecutionPolicy Bypass -File .\app\server.ps1 -SelfTest
# 指定端口,不自动开窗口
powershell -ExecutionPolicy Bypass -File .\app\server.ps1 -Port 8899 -NoBrowser| 现象 | 原因 / 处理 |
|---|---|
| 点按钮提示「需要管理员权限」 | 没通过 一键激活.cmd 启动。点预检里的「以管理员重启」 |
| 预检显示「网络不可达」 | DNS/ISP 拦截了 get.activated.win。开 Cloudflare WARP,或换网络 |
| 日志出现「所有镜像失败且本机无可用缓存」 | 三个官方镜像都不可达,且本机没有可退的缓存副本——首次运行就是这个状态。通常是代理/防火墙/DNS 拦截,开 Cloudflare WARP 或换网络。只要成功跑过一次,之后断网也能激活 |
| 日志出现「缓存副本与记录的哈希不符」 | 本机缓存的脚本被改动过。程序已删除该文件并中止,联网重跑即可 |
日志出现 SHA256 mismatch |
下载被中间人篡改,程序会主动拒绝执行。换网络重试 |
| 日志出现「脚本被安全软件删除」 | Defender 误报隔离。点预检里的「添加排除」后重试 |
| 执行完状态没变 | 部分场景需要重启才生效;先看日志里的真实输出 |
- 激活动作本身没有在本机端到端跑过。 本机 Windows 与 Office(vNext 账号数字许可证)均已授权,推荐引擎正确地给出了「无需操作」,所以没有可执行的激活路径可供验证。完整验证需要在真机上真正执行一次激活——这属于你的机器、你的决定,程序不会在没人点按钮的情况下自己动手。
- 三个真实 bug 是被真机数据抓出来的,已修:①只查 SPP 导致 Office 账号制授权被误判为未激活(详见上文「Office 检测为什么要查两个地方」);②提权重启后旧窗口留下来对着已退出的服务,现在会显示交接遮罩;③离线缓存一度是死代码——每次都无条件重新下载,三镜像一挂就报错退出,本机明明躺着一份校验过的副本却用不上。现在缓存是三档优先级里的第一档和最后一档(详见「离线与降级」)。
- 已实测通过的部分:宿主自检与推荐引擎(输出与机器真实状态一致)、全部 HTTP 接口、token 与开关白名单、目录穿越防护、DOM 布局审计、脚本 SHA256 复现校验(与官方声明逐字节一致)、四点静态资源服务、离线/降级七场景回归。
- 非管理员启动时,执行阶段会额外弹一次 UAC(因为
MAS_AIO.cmd需要在提权进程里跑)。通过一键激活.cmd启动则不会。 - 离线能力是自动积累的:成功跑过一次之后,已验证的脚本会留在
%LOCALAPPDATA%\MAS-OneClick\mas\,此后无论上游是否可达都能继续工作。但第一次使用必须有网——这点无法回避,因为本程序有意不预置脚本(预置会被 Defender 在解压瞬间删掉,反而更糟)。
本程序只是 massgrave.dev 开源脚本(MIT)的图形外壳,不修改、不重新分发脚本本体,也不内置任何授权数据。脚本的下载、校验、执行全部在你本机完成。请自行确认你有权在目标设备上使用该系统与授权方式。