查看原文
其他

永久激活!开源~

知彼而知己 知彼而知己 2023-05-28

Windows10/11的永久激活方式之一:数字许可证激活(或数字权利、数字授权)。对于这种激活方式,我虽然介绍过多次,很多人可能并不清楚它的原理,或仅知道个大概。咱们不能仅停留在表面上,还要进一步深入了解。今天的内容可能需要有一定的基础才能看懂,但是为了让小白也能看下去,我还是先用最简单的方法介绍,然后再详细介绍原理。

1.什么是数字授权?

先看一下微软对数字授权的解释。数字许可证与你的电脑硬件是关联的,重装同一版本的Windows后可以自动激活。

这里我需要解释一下什么叫同一版本。它指的不仅仅是系统名称相同,比如专业版既有Retail通道也有Volume通道,虽然它们的功能完全一样,但是算两个不同的版本。不过Retail版和Volume版可以通过安装对应的密钥切换。

再直白一些,如果你安装的专业版(Retail)通过数字授权后,重装系统安装了专业版(Volume),它是不会自动激活的,这个时候你安装一下专业版的Retail密钥(公钥),联网后它会自动激活。

2.数字授权的一些常识

数字授权,仅需要三个步骤:

1、安装通用密钥

slmgr -ipk xxxxx-xxxxx-xxxxx-xxxxx-xxxxx

2、安装数字门票(GenuineTicket.xml)

clipup -v -o -altto 门票路径

3、执行激活命令

slmgr -ato

通用密钥很好办,网上随便就能找到。系统一般也都自带,通过调用pkeyhelper.dll文件里的SkuGetProductKeyForEdition函数即可获取。

数字门票的获取,几年前微软允许已激活的Win7免费升级Win10,在升级的过程中,C:\$WINDOWS.~BT\Sources\Panther目录下会自动生成数字门票。这个数字门票保存好,然后终止升级。格式化重装Win10,这个数字门票是可用的。

激活软件则通过特殊的方式,直接在Win10/11中获取数字门票。一般是通过简单的改造gatherosstate.exe(原版ISO中有),则可以生成数字门票。简单的原理了解到这里就可以了,如果需要进一步了解,请看下一节。

3.数字门票制作方法

数字门票的种类其实至少有三种(下层票、通用票、密码箱票)。其实这三种门票只有一种,那就是密码箱票,是通过密码箱密钥签名的正版票证。另外两种门票,虽然微软直接给你授权,理论上来说是盗版门票。至于为什么让你激活,我只想说,微软是懂市占率的。你以为获得数字授权,就算洗白,微软就识别不出来了?那可就太年轻了。🤣

几乎所有的激活软件都采用的是下层票。第2节介绍的门票,是密码箱票,其实我们也可以通过编程制作密码箱票,不过比较复杂,也没有实际意义。还有一种通用票,制作起来相对简单,今天我就简要介绍一下制作方法。

我们先看一下通用数字门票,用浏览器打开后,可以看到下图中,有两行字符。第一个是SessionID,第二个是clientLockboxKey。仅与系统有关,与硬件无关。(下层票与硬件HWID有关)

到这里就更清楚了,只需知道SessionID怎么生成即可。我们看下面一串数字,由这串数字通过Base64加密即可得到上述的SessionID。而这一串数字中,只有标蓝、标红的部分,不同的系统是不同的。

OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.48.X19-98841_8wekyb3d8bbwe;DownlevelGenuineState=1;

1、首先我们先看48这个数字怎么得到的?它是系统的SKU值,通过命令可以获得。48是Win10/11专业版的SKU值。

wmic Path Win32_OperatingSystem Get OperatingSystemSKU /format:LIST

2、X19-98841这个数字是什么?它是和SKU值一一对应的,固定不变的字符。

3、接下来就是将上述字符串通过Base64加密。一般的编程软件都可以做到。这里我共享一下HEU KMS Activator的部分代码(AutoIT3,以Win10/11专业版为例),其实软件我是想开源的,可现在都有人拿去卖,害,要是开源了,不敢想,还是部分开源吧。

Global $OperatingSystemSKU = 48Global $Windows_Digital_KPN = 'X19-98841'Global $Windows_Digital_Signature = 'K3qev/5gQpX1RK1F9M9beEWWv/di1GsRF7OUcEMGTGDTYnaRenRcJaO8zOHQQvKDc57fon/v77ZpHQHT/jWWhWnLm7Ssory+s8tOs72fPjivVBDwpSPIEC1v+8Vpb4a3XCZet2e/Z5wmpCq9XDkowys3IcxYM0mHWBaNPu8gIe4'_Generate_GenuineTicket()
Func _Generate_GenuineTicket() Local $Ticket, $Fh, $string, $result, $arr Local $Signature, $SessionId Local $Dir = @ScriptDir $string = 'OSMajorVersion=5;OSMinorVersion=1;OSPlatformId=2;PP=0;Pfn=Microsoft.Windows.' & $OperatingSystemSKU & '.' & $Windows_Digital_KPN & '_8wekyb3d8bbwe;DownlevelGenuineState=1;' & Chr(0) $arr = StringSplit($string, "") For $i = 1 To UBound($arr) - 1 $result &= $arr[$i] & Chr(0) Next $SessionId = _Base64Encode($result) $SessionId = StringStripWS($SessionId, 8) $Signature = $Windows_Digital_Signature $Ticket = '<?xml version="1.0" encoding="utf-8"?><genuineAuthorization xmlns="http://www.microsoft.com/DRM/SL/GenuineAuthorization/1.0">' _ & '<version>1.0</version><genuineProperties origin="sppclient"><properties>OA3xOriginalProductId=;OA3xOriginalProductKey=;SessionId=' & $SessionId & ';' _ & 'TimeStampClient=2022-08-08T12:00:00Z</properties><signatures><signature name="clientLockboxKey" method="rsa-sha256">' & $Signature & '=</signature></signatures></genuineProperties></genuineAuthorization>' FileWrite($Dir & "\GenuineTicket.xml", "") $Fh = FileOpen($Dir & "\GenuineTicket.xml", 128 + 2) FileWrite($Fh, $Ticket) FileClose($Fh)EndFunc ;==>_Generate_GenuineTicket
Func _Base64Encode($Data, $LineBreak = 76) Local $Opcode = "0x5589E5FF7514535657E8410000004142434445464748494A4B4C4D4E4F505152535455565758595A6162636465666768696A6B6C6D6E6F707172737475767778797A303132333435363738392B2F005A8B5D088B7D108B4D0CE98F0000000FB633C1EE0201D68A06880731C083F901760C0FB6430125F0000000C1E8040FB63383E603C1E60409C601D68A0688470183F90176210FB6430225C0000000C1E8060FB6730183E60FC1E60209C601D68A06884702EB04C647023D83F90276100FB6730283E63F01D68A06884703EB04C647033D8D5B038D7F0483E903836DFC04750C8B45148945FC66B80D0A66AB85C90F8F69FFFFFFC607005F5E5BC9C21000" Local $CodeBuffer = DllStructCreate("byte[" & BinaryLen($Opcode) & "]") DllStructSetData($CodeBuffer, 1, $Opcode) $Data = Binary($Data) Local $Input = DllStructCreate("byte[" & BinaryLen($Data) & "]") DllStructSetData($Input, 1, $Data) $LineBreak = Floor($LineBreak / 4) * 4 Local $OputputSize = Ceiling(BinaryLen($Data) * 4 / 3) $OputputSize = $OputputSize + Ceiling($OputputSize / $LineBreak) * 2 + 4 Local $Ouput = DllStructCreate("char[" & $OputputSize & "]") DllCall("user32.dll", "none", "CallWindowProc", "ptr", DllStructGetPtr($CodeBuffer), _ "ptr", DllStructGetPtr($Input), _ "int", BinaryLen($Data), _ "ptr", DllStructGetPtr($Ouput), _ "uint", $LineBreak) Return DllStructGetData($Ouput, 1)EndFunc ;==>_Base64Encode

最后-炒鸡简单使用教程!

本文介绍了如何制作通用数字门票,如果你没有看懂也没关系,我已经制作好了几个通用的数字门票(专业版、企业版、教育版、LTSC等),直接拿来用即可。

通用数字门票下载:

https://wwi.lanzoup.com/b00qjmbod 密码:db6d

怎么用?炒鸡简单!以Win10/11专业版为例:

1、安装通用密钥

slmgr -ipk VK7JG-NPHTM-C97JM-9MPGT-3V66T

2、安装通用数字门票

把GenuineTicket.xml复制到目录下:

C:\ProgramData\Microsoft\Windows\ClipSVC\GenuineTicket\

以管理员身份运行命令:

Powershell Restart-Service ClipSVC

此命令运行后,上述目录下的数字门票“消失”,代表门票安装成功。

3、以管理员身份执行激活命令

slmgr -ato

至此大功告成!

大家应该都看懂了吧

​​​​​

​​​​​

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存