TSforge - 永久激活 Windows 7、Office 2013 之后的全部版本
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
MAS 团队近期发布了名为 TSforge 的激活方案,可激活自 Windows 7、Office 2013 之后的全部版本。方案利用一个漏洞绕过传统的激活验证,实现超过 4000 年的永久激活。 打开 PowerShell 输入:
适用于 Windows 7 到 11 的激活/评估扩展方法的集合。注意:我们不支持直接使用此工具。此处介绍的方法的唯一受支持的实现是在 Microsoft 激活脚本中。 包含的方法和工具:
用法Usage: TSforge [/dump <filePath> (<encrFilePath>)] [/load <filePath>] [/kms4k] [/avma4k] [/zcid] [/rtmr] [/duid] [/igpk] [/kmsc] [/ctpr] [/revl] [/prod] [/test] [<activation id>] [/ver <version override>] Options: /dump <filePath> (<encrFilePath>) Dump and decrypt the physical store to the specified path. /load <filePath> Load and re-encrypt the physical store from the specified path. /kms4k Activate using KMS4k. Only supports KMS-activatable editions. /avma4k Activate using AVMA4k. Only supports Windows Server 2012 R2+. /zcid Activate using ZeroCID. Only supports phone-activatable editions. /rtmr Reset grace/evaluation period timers. /rrmc Reset the rearm count. /duid Delete product key Unique ID used in online key validation. /igpk Install auto-generated/fake product key according to the specified Activation ID. /kmsc Reset the charged count on the local KMS server to 25. Requires an activated KMS host. /ctpr Clear the physical store tamper state. /revl Remove the key change lock in evaluation edition store. /prod Use SPP production key. /test Use SPP test key. /ver <version> Override the detected version. Available versions: vista, 7, 8early, 8, blue, modern. <activation id> A specific activation ID. Useful if you want to activate specific addons like ESU. /? Display this help message. 常见问题这是如何工作的? 该工具处理存储在称为“物理存储”的文件中的数据,Windows 使用该文件来存储关键激活数据,包括到期计时器和绑定到每个许可证的 HWID。由于我们的逆向工程工作,我们能够将自己的数据插入到物理存储中,从而允许我们为 Windows 软件保护平台管理的任何产品添加自定义激活数据。物理存储中的数据也称为“受信任存储”,因此得名“TSforge”。 这种方法相比其他激活方法有什么优势?TSforge 为激活较旧的 Windows 版本(例如 Windows 7 到 8.1)提供了最大的优势,因为它可以永久激活这些版本的任何版本,而无需修改启动过程或 Windows 系统可执行文件。TSforge 也是唯一能够激活任何 Windows 插件的公共激活器,使其对希望激活 ESU 许可证的用户很有用。此外,TSforge 是唯一提供硬件固定激活的公共激活器,无需任何持久网络连接、添加的服务/任务或注入的 DLL。 TLDR:只有当您使用旧的 Windows 版本或想要激活 ESU 等插件以延长支持结束日期时,您才应该使用 TSforge。 缺点是什么?对于 Windows 10 和 11,建议使用 HWID 方法激活 Windows。TSforge 既不太可靠,又缺乏 HWID 提供的功能,例如在功能升级和完成作系统重新安装后幸存下来的能力。对于 Windows 7 到 8.1,没有明显的缺点。 这里的任何方法都需要互联网吗?不,这里介绍的所有方法都不需要连接到互联网才能运行。一切都在本地完成。 如何在不安装相应产品密钥的情况下安装特定许可证?您可以使用 TSforge 中的开关来安装许可证,只需使用激活 ID。您可以通过运行 来获取所有可安装许可证及其激活 ID 的列表。您可以单击弹出窗口并按 CTRL + C 复制所有信息。找到所需许可证的激活 ID 后,按如下方式运行:。/igpkslmgr /dlv all/igpkTSforge.exe /igpk <activation id> 如何激活 KMS 主机服务器?您可以将 和 选项与要激活的 KMS 主机 SKU 的激活 ID 一起使用。然后,您可以使用带有此激活 ID 的选项向 25 个客户端的 KMS 服务器收费。请注意,KMS 服务器将保留其客户端计数最多 30 天。/igpk/zcid/kmsc 为什么任何激活方法都不支持 Windows Vista?Windows Vista 包含一个驱动程序,该驱动程序持有物理存储的永久句柄,即使 SLSvc 未运行时也是如此。这可以防止 TSforge 在系统启动时写入新的受信任的存储数据,而不会滥用对另一个内核驱动程序的访问。尽管可以离线修改物理存储,但这需要在 WinPE 映像中托管 TSforge,而 WinPE 映像缺少 MAS 和 TSforge 所需的许多工具和 API。到目前为止,这阻止了我们实现 Vista 支持。 如何防止因 Windows 7 上的 WAT 而停用?如果安装了通用密钥,则需要运行以删除产品密钥的唯一 ID。这将阻止 WAT 在线验证密钥。安装虚假产品密钥将具有等效效果。或者,您可以使用非通用密钥绕过此检查,尽管 WAT 会阻止许多公开可用的密钥。TSforge.exe /duidTSforge.exe /igpk <activation id> AVMA4k 在我的虚拟机中不起作用,为什么?Windows 不支持在无法提供 Hyper-V 启发的 VM 软件下激活 AVMA。这主要意味着 AVMA4k 仅在正确配置的 QEMU 实例或 Hyper-V 下运行的 VM 受支持。如果您的 VM 的激活状态在使用 AVMA4k 后出现状态代码,则需要使用其他激活方法。Notification0xC004FD01 如何删除此激活?运行 Microsoft 激活脚本,选择 > 。这将重置物理存储并恢复 TSforge 所做的任何更改。TroubleshootFix Licensing Microsoft 可以修补此问题吗?是的,尽管有一些困难。 他们会吗?可能不会。如果他们知道,请告诉我们,这样我们就可以像一群疯子一样在本周剩下的时间里自嘲。 构建说明
学分核心研发
其他贡献SpCreatePackaedLicense - 工具开发、测试
特别鸣谢BetaWiki - 记录用于逆向工程的泄露测试版
许可证该项目根据 GNU 通用公共许可证 v3.0 的条款获得许可。 更多介绍: 介绍2025 年是 Windows 当前 DRM 系统软件保护平台 (SPP) 推出近 20 周年。自 Windows Vista 开发初期以来,它就作为激活的主要网关,许多人想出了巧妙的方法来欺骗它,从重置宽限期计时器到模拟 KMS 服务器再到挂接引导加载程序。虽然所有这些系统都滥用了各种激活方法,但从未有过直接攻击 SPP 本身的漏洞......直到现在。 在这篇博文中,我们介绍了 TSforge,这是我们有史以来最强大的激活漏洞之一。TSforge 能够激活自 Windows 7 以来每个版本的 Windows 的每个版本,以及自 Office 2013 以来的每个 Windows 插件和 Office 版本,它是我们迄今为止在 MAS 中实施的最复杂、影响最广泛的漏洞,只有我们命运多舛的 Keyhole 漏洞才能与之媲美。除了讨论 TSforge 的工作原理外,我还将讨论我们发现和理解它所走的崎岖道路,以及我们在此过程中用它做的一些有趣的事情。 SPPSPP 是一个非常复杂的系统,涉及多个活动部分。为简单起见,我们将只关注与此漏洞相关的部分:
CID 技巧我们第一次出现通用 SPP 漏洞利用的迹象是在 2023 年,我们发现了一种我们称之为“CID 技巧”的方法,它允许我们存入虚假的确认 ID。 确认 ID (CID) 是用于通过电话通过对话框或命令激活 Windows 的数值。由于可以在不连接到任何网络的情况下完成手机激活,因此所有 Windows 版本和插件都至少有一个可以通过手机激活的许可渠道,包括 KMS 服务器和 ESU 插件等其他无法破解的产品。slmgr /atp 认识到这一点,asdcorp 决定研究 CID 验证在内部是如何工作的。在做了一个简单的内存补丁以使提供的任何 CID 有效后,他们注意到它有一些奇怪的效果: 如视频中所示,修补 CID 验证代码允许我们使用全由 0 组成的 CID 进行激活。但至关重要的是,即使在通过重新启动 sppsvc 清除补丁后,此激活仍然存在。对我们来说,这表明了一些非常重要的事情:无论 SPP 保存什么数据以记住它已被激活,在写入后都不会进行验证。sppobjs.dll 这对我们来说是一个非常令人兴奋的发现,因为这意味着如果我们可以编写相同的数据,我们就可以轻松激活 Windows 的任何副本,而无需使用调试器或利用内核驱动程序。对我来说更重要的是,这也意味着这种方法可以扩展到在 Windows 7 和 8 等旧版本上运行,在这些版本中,在运行时修补 SPP 代码要困难得多。 但是,为了使此方法成为可行的方法,我们需要回答以下问题:
初始工作从之前的调查中,我们对第一个问题有了部分答案。使用进程监视器观察 sppsvc,我们可以准确地看到它存储激活数据的位置: 在 Windows 8.1 和 10 上,我们观察到数据主要存储在以下位置:
Windows 8 几乎相同,只是文件存储在 ..datC:\Windows\System32\spp\store 然而,Windows 7 的情况却截然不同: 在这里,我看到了对以下位置的引用:
但是,更奇怪的是,我发现 sppsvc 不会直接写入“7B296...”文件或 WPA 注册表项。相反,它将使用 DeviceIoControl 方法调用称为 .然后,此驱动程序将处理对“7B296...”文件和 WPA 注册表项的写入。spsys.sys 在比较这些文件和注册表项时,我发现了很多相似之处。起初,这些文件大多无趣,因为在所有版本中,这些文件似乎只是将 XML 许可证的内容保存在一个名称相似的文件夹中:。tokens.datC:\Windows\System32\spp\tokens “7B296...”和文件似乎起着类似的作用,因为这些文件不仅被加密,而且似乎还包含某种哈希或签名。损坏或删除这些文件将卸载所有已安装的产品密钥并重置所有其他激活数据(重置计数、KMS 客户端计数等)。在 Windows 7 上,它还会显示以下可爱的错误消息:data.dat 撇开我如何无法获得对自己的计算机进行更改的授权问题不谈,在安装产品密钥后,我收到了多个版本“篡改受信任存储”的通知: 把所有这些放在一起,看起来就像 “7B296...”文件,它们都用作重要激活数据的存储,它们似乎在内部被称为 “可信存储”。data.dat 对 WPA 注册表项进行暴力篡改的类似过程表明,它们以某种方式与受信任的存储相关联。定期添加具有看似加密数据的新密钥,以及在重大许可更改后添加。此外,由于 NtLockProductActivationKeys 函数,这些密钥是完全只读的,无法删除,除非您从 Windows PE 环境中弄乱它们。篡改或删除这些密钥会导致出现类似的“许可证篡改”错误,但如果我们将这些密钥与受信任的存储文件一起从一个安装复制到另一个安装,sppsvc 似乎不再抱怨篡改。HKEY_LOCAL_MACHINE\SYSTEM\WPA 从所有这些工作中,我们学到了以下几点:
不幸的是,在很长一段时间里,我们对此知之甚少。我对 sppsvc 的旧版本和新版本进行反混淆的工作帮助我们确认了我们的一些理论,但在不了解 的情况下,它们并没有做出太大贡献。与此同时,SpCreatePackaedLicense 构建了 CID 技巧的自动化版本,使用自定义内核驱动程序来修补 sppsvc,而无需调整其受保护的进程状态,这对测试 CID 技巧有很大帮助。spsys.sys 不过,除此之外,我们基本上搁置了这项工作,转而研究 CLiP,它似乎有更有前途的开发途径。 当它泄漏时,它会泛滥尽管我们主要关注 Windows 盗版,但我们中的许多 MASSGRAVE 成员也对它的开发历史感兴趣,或者更具体地说,它的各种预发布 beta 版本。研究和弄乱这些版本不仅作为一种新奇事物很有趣,而且在开发过程中留下的工件可以帮助我们了解很多关于 Windows 工作原理的知识。 在与一些测试版专家讨论最近泄露的 Windows 8 版本的激活机制时,我不经意间被几个重大发现弄得措手不及: 尽管内部版本 7792 和内部版本 7850 正在开发 Windows 8 的道路上,但它们的内部版本号与 Windows 7(内部版本 7600)足够接近,因此我对 spsys 的一些新信息充满希望。事实上,在内部版本 7850 的符号存档中,我找到了 spsys 的符号以及激活子系统的其余部分。 Build 7792 也有一个完全未混淆的 spsys 版本,就像宣传的那样,但没有符号。另一方面,Build 7850 的 spsys 具有完整的符号和完全混淆。虽然我没能得到我的蛋糕并吃掉它,但这对仍然是一个非常幸运的发现,所以我决定用它来弄清楚可信商店是如何运作的。 咒语与诅咒像往常一样,幸运的休息时间,这个带有附加条件。最大的一个是,与任何其他普通的 Windows 版本不同,使用 WinDBG 进行内核调试在版本 7792 上根本不起作用,因为这是 Windows 最早的 ARM 端口之一。 因此,尽管我有一个完全去混淆的 spsys 副本,没有任何烦人的反调试功能,但我几乎没有实际调试它的选项。由于此版本是在 QEMU 中模拟的,我仍然可以选择使用其内置的 GDB 调试服务器,但这将非常难以使用,因为我必须在内存中手动定位内核和驱动程序才能执行任何有用的作。幸运的是,我能够与 Rairii 取得联系,由于他在 ARM 上模拟早期 Windows,他对这种调试方法更加熟悉。 不幸的是,我对 QEMU OS 调试或 ARM 或非常低级的 Windows 内部结构知之甚少,所以他的建议一开始有点难以遵循...... 使问题更加复杂的是,我选择为这个项目编写自定义工具,使用 GDB 客户端库来控制 QEMU 并在加载 spsys 时自动中断。就像我尝试自定义工具的大多数尝试一样,这最终是巨大的浪费时间,最终甚至没有奏效,尤其是由于我对 GDB 缺乏一般经验。在浪费了更多时间尝试通过其 Python API 向 GDB 添加 Windows 支持之后,我最终硬着头皮选择了我所知道的魔鬼,即 IDA Pro 调试器。 是的,对于调试内核或调试 QEMU(或者真的任何东西)来说,它是最不“合适”的选择,但对我来说更重要的是我熟悉它。使用我从内部版本 7915 的符号集中抓取和修改的各种内核结构,我能够编写出一个脚本,该脚本将在各种内核函数上断点并获取重要数据,例如内核基址和加载的内核模块列表。通过以编程方式中断 ,我甚至可以在加载每个驱动程序时自动更新模块列表。IopLoadDriver 然而,即使有了这个监控系统,我仍然无法捕捉到加载的时刻。只有在检查了其加载程序的代码后,我才发现了一个有趣的调用:spsys.sysspldr.sysZwSetSystemInformation 参考 Geoff Chappell 的表格,我看到这对应于 ,当然,它在内核代码中有自己的分支,可以在不调用 .SystemLoadGdiDriverInSystemSpaceIopLoadDriver 在这个树枝上也折断后,我终于可以在它加载后立即接住了!spsys.sys 请注意,所有这些工作最终都实现了如果 WinDBG 正常工作的情况。无论如何,我现在能够在 7792 内部版本加载时捕获和调试它,而不会遇到烦人的混淆和反调试。sxe ld spsys 说到混淆,我仍然需要解压缩 Build 7850 的 spsys 才能理解它。幸运的是,这要容易得多,因为我可以搜索对加密函数的调用位置。 然后,我只需在内核调试器中中断这些调用并从内存中转储驱动程序,然后我就相当轻松地解密了所有代码。从这里开始,这只是一个通过眼睛传输符号的漫长过程,我终于回到了原点。 终于进步了标记所有函数后,我注意到代码中生成受信任存储文件的一种有趣模式,该文件似乎称为“物理存储”。Microsoft 似乎没有选择将加密数据存储在单独的缓冲区中的典型方法,而是选择就地进行加密。 这可能会防止某种侧信道攻击,但更重要的是,这意味着我只需在调试器中跳过此调用并让 spsys 将未加密的内容写入磁盘,即可“解密”物理存储。因此,我做到了: asdcorp 和 abbodi1406 立即开始工作,弄清楚数据格式以及其中存储的数据类型。与此同时,我专注于在 Windows 10 上复制这个技巧,在那里分析会容易得多,尤其是因为有一个实际的调试器 (x64dbg) 可用。方便的是,函数 HIDHash 中有一些非常独特的常量: 在 Windows 10 的 sppsvc 中搜索这些常量后,我在 sppsvc 中找到了相同的函数: 正如我发现的那样,spsys 的大部分代码最终都包含在 Windows 10 上的 sppsvc 中。通过比较这些代码库,我发现了所有的加密、解密、签名检查和哈希检查例程。在调试器中修补所有这些例程后,我们不仅可以让 sppsvc 为我们解密它,还可以加载和接受我们在其中所做的任何修改。data.dat 在测试这些补丁的过程中,我们最终找到了失传已久的 Redpill 产品密钥,Redpill 是 Windows 8 测试版的功能锁定系统。 在一些实验和我的一些帮助下,asdcorp 设法重现了 CID 技巧,但这次没有修补 CID 验证例程。 从这里开始,asdcorp 和 Lyssa 找出并测试了更多的漏洞,包括一种 4000 多年来离线激活 KMS 的方法。 尽管这些结果标志着重大进展,但我们仍然需要使用调试器来测试这些方法,因为我们无法自己解密和重新加密物理存储。因此,我的下一个任务是弄清楚如何做到这一点。 私钥派生通过查看 spsys,我知道我需要派生的唯一真正密钥是 RSA 密钥,它对加密物理存储数据的 AES 密钥进行加密。我还从使用 asdcorp 进行的测试中了解到,只有两个这样的密钥:一个用于生产/官方测试版,一个用于内部测试/Windows Insider 版本。在没有原始密钥数据的情况下,我们通过一种非常先进的方法发现了这一点:复制物理存储文件,编辑其版本,然后等待 sppsvc 可怕地崩溃,表明它可以解密但不能解析交换的文件。 检查名为 的 RSA 解密例程,我发现了一个称为 的字节码系统的解释器。通过大量的苦差事和正则表达式,我能够用 Python 编写该系统的模拟器。SpModExpPrvExecCodes 观察这个模拟的输出,我意识到所有这些混淆都掩盖了我以前隐约听说过的一种技术,称为加法链幂运算。经过一番思考,我意识到我可以跟踪和转储每个模乘法的输入和输出,并使用它来派生私钥。只需要 x64dbg 日志记录和几行 python: 最后,我拥有了从 Windows Vista 到 Windows 11 的所有 SPP 的完整生产密钥。 由于模乘法的实现方式存在一些奇怪的差异,因此派生测试密钥需要更长的时间,但最终,我们拥有了我们需要的所有 SPP 私钥。 钉棺材有了私钥,我们就能够轻松激活几乎任何我们想要的版本。不过,仍然存在一点麻烦,那就是获取通用密钥以启用激活。 在 Windows 8 及更高版本上,为您想要的任何版本的任何通道生成通用密钥都相当简单。但是,Windows 7 和 CSVLK(KMS 主机密钥)直到 Server 2022 都使用 PKEY2005,这是一种更复杂的编码系统,需要私钥来生成通用密钥。由于我没有任何加密技巧,因此我们决定解决此问题的最佳方法。 在物理存储中,每个产品密钥都有大型 blob,其中包含各种预先计算的信息,例如产品 ID 和手机激活数据。此外,我们发现令牌存储 () 还包含将产品密钥与当前版本的 Windows 相关联的元数据。因此,我们认为,只需复制此数据就足以欺骗 Windows 认为已安装密钥,而这一次,我们是对的。tokens.dat 与此同时,在为新的 CID 技巧(我们现在称为 ZeroCID)开发编程方法时,我们在处理需要写入物理存储的 HWID 数据时遇到了问题。最初,我们尝试使用 GatherOsState 的 HWID 派生的 C# 端口,但在极少数情况下最终无法验证。由于我们几乎没有选项来调试或修复此端口,因此 asdcorp 决定创建一个适用于所有硬件的 HWID 值,而且它再次运行良好,甚至允许在机器之间传输激活。 随着 HWID 验证和 PKEY2005 的失败,我们现在几乎完全击败了 SPP 的离线保护。 结束语即使我们能够使用调试器和十六进制编辑器对 SPP 造成如此多的损害,我仍然认为它是一个相当先进且构建良好的 DRM 系统。它的内部结构肯定比 Windows XP 的 DRM 有所改进,尽管有些人可能会告诉你,但 DRM 的设计相当糟糕。它还能够很好地保护自己免受最常见的攻击,例如通过交换物理存储文件来重置评估计时器。此外,SPP 还有一些部分我们尚未成功破解,例如用于定义其行为的签名 XML 许可证。毕竟,并不是说有另一个微不足道的补丁可以绕过他们的签名检查...... 学分核心研发
其他贡献
特别鸣谢
该文章在 2025/2/17 18:47:39 编辑过 |
关键字查询
相关文章
正在查询... |