前言
想必大家還記得留搔,若干年前還在用Windows XP時(shí)候惰匙,為了折騰操作系統(tǒng)译红,不少人應(yīng)該都嘗試去網(wǎng)上找尋過(guò)各種密鑰预茄,由于針對(duì)不同激活方式有不同的安裝鏡像,當(dāng)時(shí)找到方便使用的多是VOL密鑰以及與之相匹配的VL版光盤鏡像。從Windows Vista開(kāi)始耻陕,微軟改進(jìn)了密鑰管理辦法拙徽,針對(duì)批量許可證客戶推出了新的密鑰類型:密鑰管理服KMS(Key Management Service)以及多次激活密鑰MAK(Multiple Activation Key)。后者允許對(duì)應(yīng)密鑰能多次永久激活诗宣,而KMS主要針對(duì)大體量的客戶進(jìn)行動(dòng)態(tài)激活管理膘怕。這里我們只討論KMS。
基本原理
首先我們看微軟官方的說(shuō)明:
How KMS Works
KMS activation requires TCP/IP connectivity. By default, KMS hosts and client computers use DNS to publish and find the KMS service. The default settings can be used, which require little to no administrative action, or KMS hosts and client computers can be manually configured based on network configuration and security requirements.
KMS Activation Renewal
KMS activations are valid for 180 days—the activation validity interval. To remain activated, KMS client computers must renew their activation by connecting to the KMS host at least once every 180 days. By default, KMS client computers attempt to renew their activation every seven days. If KMS activation fails , the client will retry every two hours. After a client computer’s activation is renewed, the activation validity interval begins again.
簡(jiǎn)而言之就是KMS客戶端向KMS服務(wù)器定期注冊(cè)來(lái)維持激活狀態(tài)激活召庞。
值得注意的是岛心,KMS的激活方式并非永久激活,而是有180天的有效期篮灼,未激活狀態(tài)有30天的寬限期忘古,期間默認(rèn)會(huì)每2小時(shí)嘗試激活,期間如果仍未激活那么系統(tǒng)部分功能會(huì)受到影響同時(shí)可能頻繁重啟诅诱。激活成功后默認(rèn)每7天客戶端會(huì)連接KMS服務(wù)器更新激活狀態(tài)并刷新有效期髓堪,如果上次激活成功后的180天內(nèi)客戶端沒(méi)有成功更新激活狀態(tài),那么系統(tǒng)會(huì)再次進(jìn)入未激活狀態(tài)娘荡。
這里提到了兩個(gè)角色:
KMS Host
即KMS服務(wù)器旦袋,基于Windows服務(wù)器安裝批量激活服務(wù)角色,使用特定的激活碼向微軟注冊(cè)KMS Host它改,用于管理和維護(hù)客戶端的激活請(qǐng)求和數(shù)據(jù)。在我們?cè)粕檄h(huán)境商乎,經(jīng)典網(wǎng)絡(luò)下是內(nèi)網(wǎng)10網(wǎng)段地址央拖,對(duì)應(yīng)kms.aliyun-inc.com域名,VPC環(huán)境下是100網(wǎng)段內(nèi)部服務(wù)地址鹉戚,對(duì)應(yīng)kms.cloud.aliyuncs.com鲜戒,KMS服務(wù)默認(rèn)端口號(hào)是TCP 1688。
KMS Client
即KMS客戶端抹凳,不同于零售版本以及MAK密鑰遏餐,針對(duì)不同的操作系統(tǒng)版本,KMS有固定的產(chǎn)品密鑰赢底,使用對(duì)應(yīng)的產(chǎn)品密鑰向KMS服務(wù)器注冊(cè)激活失都,并定期請(qǐng)求KMS刷新激活狀態(tài)。
各版本W(wǎng)indows系統(tǒng)產(chǎn)品密鑰參考:
https://technet.microsoft.com/en-us/library/jj612867.aspx
排查分析
在云上環(huán)境幸冻,KMS服務(wù)器出問(wèn)題的可能性很小粹庞,所以這里我們主要討論客戶端的排查。激活具體涉及的系統(tǒng)內(nèi)流程十分復(fù)雜洽损,我們需要重點(diǎn)關(guān)注幾個(gè)組件庞溜。
Slmgr.vbs
部分版本ECS Windows鏡像中存在自動(dòng)激活腳本,位置在系統(tǒng)盤(默認(rèn)C盤)根目錄下碑定,內(nèi)容很簡(jiǎn)單流码,指定KMS服務(wù)器后進(jìn)行激活又官。
echo用戶您好!Windwos Server 2012 正在激活中漫试,請(qǐng)稍后...echo.cscript //B"%windir%\system32\slmgr.vbs"/skms? kms.aliyun-inc.comcscript //B"%windir%\system32\slmgr.vbs"/ato
這里我們看到使用了slmgr.vbs (Software License Manager)六敬,腳本文件路徑在%windir%\system32\slmgr.vbs,作為統(tǒng)一管理許可證和激活相關(guān)操作的接口商虐,提供一系列參數(shù)來(lái)執(zhí)行各種操作觉阅。
*slmgr.vbs有操作系統(tǒng)版本的差別,不要在不同版本系統(tǒng)中拷貝使用秘车。
具體命令參數(shù)請(qǐng)參考:
https://technet.microsoft.com/en-us/library/dn502540(v=ws.11).aspx
這里我們主要關(guān)注以下一些命令參數(shù):
/skms? ? – 指定KMS服務(wù)器
/ato? ? – 請(qǐng)求KMS服務(wù)器進(jìn)行激活
/dlv? ? – 顯示詳細(xì)的許可證信息
/rilc? ? – 重新安裝許可證
/upk? ? – 卸載產(chǎn)品密鑰
/ipk? ? – 安裝產(chǎn)品密鑰
Sppsvc.exe
對(duì)應(yīng)路徑是%windir%/system32/sppsvc.exe典勇,服務(wù)是Software Protection Service,spp是Software Protection Platform的縮寫(xiě)叮趴,在Windows Server 2008 R2之前是Software License Service割笙,激活原理沒(méi)有什么差別,這里我們只討論Software Protection Service的情況眯亦。
實(shí)際具體的激活流程是由sppsvc.exe來(lái)完成伤溉,期間會(huì)涉及一系列DLL文件、WMI和注冊(cè)表的操作妻率。針對(duì)這個(gè)程序乱顾,我們主要關(guān)注以下兩個(gè)路徑:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc
C:\Windows\System32\spp
Sppsvc.exe還會(huì)調(diào)用一系列spp相關(guān)組件,從Windows 8/Windows 2012開(kāi)始宫静,還引入SppExtComObj.exe (KMS Connection Broker)來(lái)完成激活程序中部分工作走净。
了解了兩個(gè)主要組件,我們可以從以下五個(gè)方面來(lái)一步步排查和分析:
一孤里、排除基本系統(tǒng)問(wèn)題
CPU伏伯、內(nèi)存、系統(tǒng)盤空間資源使用正常捌袜,系統(tǒng)時(shí)鐘同步正常说搅。
另外系統(tǒng)被黑是一個(gè)大類,如果遇到激活報(bào)錯(cuò)比較奇怪的情況虏等,可以一開(kāi)始就快速檢查以下幾個(gè)路徑:
C:\Windows
C:\Windows\system32
C:\Windows\sysWOW64
C:\Windows\temp
*顯示隱藏弄唧,以日期排列,重點(diǎn)查看是否有較近時(shí)間點(diǎn)的異常exe/bat/ps1/vbs等文件霍衫,Windows自帶有不少exe文件套才,可以通過(guò)移動(dòng)鼠標(biāo)到文件上查看公司顯示是否是Microsoft Corporation。
二慕淡、排除KMS服務(wù)器問(wèn)題
首先ping KMS服務(wù)器確北嘲椋可以正常解析出IP地址,之后可以簡(jiǎn)單地通過(guò)telnet KMS服務(wù)器1688端口結(jié)合同地域其他ECS服務(wù)器測(cè)試連接相同KMS服務(wù)器能否正常激活來(lái)判斷,如果端口是通的同時(shí)在測(cè)試服務(wù)器slmgr /ato能激活成功傻寂,那么便可以排除KMS服務(wù)器的問(wèn)題息尺。
三、獲取報(bào)錯(cuò)信息
基于激活失敗的報(bào)錯(cuò)并通過(guò)提示的exe命令查看錯(cuò)誤碼信息或者通過(guò)err.exe (error lookup tool疾掰,適用于0x8開(kāi)頭的錯(cuò)誤碼)獲取錯(cuò)誤碼的含義搂誉,同時(shí)對(duì)比系統(tǒng)事件日志(事件日志可以通過(guò)命令行輸入eventvwr快速打開(kāi))。
下載地址:https://www.microsoft.com/en-us/download/details.aspx?id=985
建議直接解壓到自己的用戶目錄静檬,隨時(shí)打開(kāi)命令行就可以跑炭懊,下面以激活場(chǎng)景錯(cuò)誤0x80070424為例,一般主要看winerror.h的信息拂檩,看到描述是服務(wù)不存在:
C:\Users\Administrator>err 80070424
# as an HRESULT: Severity: SUCCESS (0), Facility: 0x4c5, Code 0xc718
# as an HRESULT: Severity: FAILURE (1), Facility: 0x7, Code 0x424
# for hex 0x424 / decimal 1060 : RMON_RESTYPE_BAD_TABLE clusvmsg.h SQL_1060_severity_15 sql_err
# The number of rows in the TOP clause must be an integer. ERROR_SERVICE_DOES_NOT_EXIST winerror.h
# The specified service does not exist as an installed# service.# 3 matches found for "80070424"
四侮腹、核實(shí)服務(wù)狀態(tài)和產(chǎn)品密鑰
核實(shí)Software Protection服務(wù)的狀態(tài)(是否存在,是否被禁止稻励,是否能成功啟動(dòng))父阻,slmgr /dlv查詢?cè)S可證信息是否有異常,產(chǎn)品密鑰是否與系統(tǒng)版本一致望抽。
Software Protection服務(wù)默認(rèn)啟動(dòng)類型是自動(dòng)(延遲啟動(dòng))加矛。
注冊(cè)表項(xiàng)HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc是否正常:
slmgr /dlv示例,我們可以獲取激活相關(guān)的不少信息煤篙,同時(shí)“部分產(chǎn)品密鑰”對(duì)應(yīng)的是產(chǎn)品密鑰最后五個(gè)字符斟览。
五、深入分析出錯(cuò)問(wèn)題點(diǎn)
在這之前可以通過(guò)Google或者Bing快速檢索一下相關(guān)報(bào)錯(cuò)辑奈,個(gè)別DLL文件或者權(quán)限引發(fā)的問(wèn)題可能比較典型趣惠,如果有相關(guān)文章和論壇記錄,我們參考進(jìn)行DLL文件重新注冊(cè)以及權(quán)限修改身害。如果仍然沒(méi)有什么線索,通常需要利用微軟sysinternals工具集中procmon(Process Monitor)來(lái)復(fù)現(xiàn)問(wèn)題發(fā)掘具體問(wèn)題點(diǎn)了草戈。
下載地址:
https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
步驟是 procmon開(kāi)啟捕獲(Ctrl+E)-> 復(fù)現(xiàn)問(wèn)題 -> 停止捕獲(Ctrl+E)塌鸯,保存文件后進(jìn)行篩選(Ctrl+L) ,懷疑問(wèn)題出在sppsvc.exe這邊唐片,可以參考以下過(guò)濾器的添加篩選:
以上篩選出現(xiàn)Access Denied的情況丙猬,如果沒(méi)有Access Denied的情況,我們也可以排除結(jié)果是Success的情況進(jìn)一步分析费韭。
一般來(lái)說(shuō)茧球,嘗試修復(fù)問(wèn)題的方法包括但不限于以下一些:
1. 解決網(wǎng)絡(luò)問(wèn)題
2. slmgr /skms重新設(shè)置KMS服務(wù)器。
3. slmgr /rilc重新安裝許可證星持。
4. slmgr /upk后slmgr /ipk 重新安裝產(chǎn)品密鑰抢埋。
5. 重啟Software Protection服務(wù)。
6. 修復(fù)注冊(cè)表。
備份sppsvc注冊(cè)表項(xiàng)揪垄,找到相同版本操作系統(tǒng)穷吮,導(dǎo)出HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc,拷貝并導(dǎo)入到問(wèn)題系統(tǒng)饥努,之后重啟服務(wù)器捡鱼。
7. sfc /scannow嘗試修復(fù)并查看%windir%\Logs\CBS\CBS.log核實(shí)修復(fù)日志。
參考微軟官方文檔:
8. 修復(fù)或重置WMI(一般多為8004開(kāi)頭的報(bào)錯(cuò)酷愧,不建議操作驾诈,可能導(dǎo)致其他問(wèn)題)。
驗(yàn)證和修復(fù):
winmgmt /verifyrepository
winmgmt /salvagerepository
重置:
winmgmt /rebuildrepository
9. 根據(jù)定位的Access Denied文件修改相應(yīng)的文件和路徑權(quán)限溶浴。
10. 回滾和重新初始化系統(tǒng)盤乍迄。
此方法作為最終辦法,重新初始化系統(tǒng)盤相當(dāng)于重裝系統(tǒng)戳葵,系統(tǒng)盤用戶數(shù)據(jù)會(huì)被清除就乓,所以操作前請(qǐng)務(wù)必備份。
重新初始化系統(tǒng)盤操作文檔:
https://help.aliyun.com/document_detail/25449.html
*排查系統(tǒng)問(wèn)題拱烁,請(qǐng)務(wù)必先做好快照備份生蚁。
具體案例
問(wèn)題1:
激活報(bào)錯(cuò):0xC004C003,激活服務(wù)器確定指定的產(chǎn)品密鑰被阻止戏自。
排查:
考慮產(chǎn)品密鑰有問(wèn)題邦投,查詢操作系統(tǒng)版本并導(dǎo)入正確的密鑰:
問(wèn)題2:
激活報(bào)錯(cuò)找不到產(chǎn)品密鑰∩帽剩或者報(bào)錯(cuò)0xC004F050
排查:
slmgr /dlv對(duì)比產(chǎn)品密鑰和系統(tǒng)版本并沒(méi)有異常志衣,重新安裝產(chǎn)品密鑰問(wèn)題一樣,考慮服務(wù)存在異常猛们,重啟Software Protection服務(wù)后問(wèn)題解決念脯。
問(wèn)題3:
激活報(bào)錯(cuò):0xC004F074 軟件授權(quán)服務(wù)報(bào)告無(wú)法激活該計(jì)算機(jī)。密鑰管理服務(wù)(KMS)不可用弯淘。
排查:
- 實(shí)際測(cè)試telnet KMS服務(wù)器1688端口是通的绿店,對(duì)比同地域其他測(cè)試服務(wù)器能正常激活。
- 重新指定并重試激活依然報(bào)錯(cuò)庐橙。
- 重啟Software License Service問(wèn)題依舊假勿。
- 鑒于提示KMS服務(wù)不可用,說(shuō)明與之相關(guān)的服務(wù)或者系統(tǒng)文件存在異程睿或者被破壞穷娱。進(jìn)一步核實(shí)發(fā)現(xiàn)存在病毒文件视译。為了快速恢復(fù)系統(tǒng)淮摔,備份數(shù)據(jù)后操作重新初始化系統(tǒng)盤吧秕。
*殺毒軟件也可能導(dǎo)致類似的問(wèn)題惨寿,另外以下報(bào)錯(cuò)也很可能與病毒或者安全軟件有關(guān)。
問(wèn)題4:
跑任何slmgr命令都直接報(bào)VBScript運(yùn)行時(shí)錯(cuò)誤并提示沒(méi)有權(quán)限羽戒,錯(cuò)誤碼800A0046
排查:
跑slmgr命令出現(xiàn)VBScript運(yùn)行時(shí)錯(cuò)誤一般可以排除sppsvc.exe相關(guān)問(wèn)題缤沦,因?yàn)橐婚_(kāi)始是wscript.exe在加載相關(guān)文件來(lái)運(yùn)行腳本。根據(jù)報(bào)錯(cuò)不一定好定位問(wèn)題易稠,非Access Denied的報(bào)錯(cuò)建議先檢索Bing和Google缸废。
上述報(bào)錯(cuò)需要通過(guò)Process Monitor獲取具體Permission Denied的位置,之后通過(guò)修改權(quán)限或者替換文件的方式修復(fù)驶社。
*Software Protection服務(wù)報(bào)Access Denied/Permission Denied情況企量,方法類似,例如下圖服務(wù)無(wú)法啟動(dòng)的情況亡电。
*類似情況報(bào)Access Denied多跟%windir%/system32/spp/store//data.dat 和 token.dat文件相關(guān)届巩,slmgr /rilc操作不一定能成功重裝許可證,可能需要通過(guò)手動(dòng)刪除兩個(gè)文件再通過(guò)slmgr /rilc的方式修復(fù)份乒。