天天看點

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

想必大家還記得,若幹年前還在用Windows XP時候,為了折騰作業系統,不少人應該都嘗試去網上找尋過各種密鑰,由于針對不同激活方式有不同的安裝鏡像,當時找到友善使用的多是VOL密鑰以及與之相比對的VL版CD光牒鏡像。從Windows Vista開始,微軟改進了密鑰管理辦法,針對批量許可證客戶推出了新的密鑰類型:<b>密鑰管理服KMS(Key Management Service)</b>以及<b>多次激活密鑰MAK(Multiple Activation Key)</b>。後者允許對應密鑰能多次永久激活,而KMS主要針對大體量的客戶進行動态激活管理。這裡我們隻讨論KMS。

首先我們看微軟官方的說明:

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.

簡而言之就是KMS用戶端向KMS伺服器定期注冊來維持激活狀态激活。

值得注意的是,KMS的激活方式并非永久激活,而是有180天的有效期,未激活狀态有30天的寬限期,期間預設會每2小時嘗試激活,期間如果仍未激活那麼系統部分功能會受到影響同時可能頻繁重新開機。激活成功後預設每7天用戶端會連接配接KMS伺服器更新激活狀态并重新整理有效期,如果上次激活成功後的180天内用戶端沒有成功更新激活狀态,那麼系統會再次進入未激活狀态。

這裡提到了兩個角色:

即KMS伺服器,基于Windows伺服器安裝批量激活服務角色,使用特定的激活碼向微軟注冊KMS Host,用于管理和維護用戶端的激活請求和資料。在我們雲上環境,經典網絡下是内網10網段位址,對應kms.aliyun-inc.com域名,VPC環境下是100網段内部服務位址,對應kms.cloud.aliyuncs.com,KMS服務預設端口号是TCP 1688。

即KMS用戶端,不同于零售版本以及MAK密鑰,<b>針對不同的作業系統版本,</b>KMS有固定的産品密鑰,使用對應的産品密鑰向KMS伺服器注冊激活,并定期請求KMS重新整理激活狀态。

各版本Windows系統産品密鑰參考:

<a href="https://technet.microsoft.com/en-us/library/jj612867.aspx">https://technet.microsoft.com/en-us/library/jj612867.aspx</a>

在雲上環境,KMS伺服器出問題的可能性很小,是以這裡我們主要讨論用戶端的排查。激活具體涉及的系統内流程十分複雜,我們需要重點關注幾個元件。

部分版本ECS Windows鏡像中存在自動激活腳本,位置在系統盤(預設C槽)根目錄下,内容很簡單,指定KMS伺服器後進行激活。

這裡我們看到使用了slmgr.vbs (Software License Manager),腳本檔案路徑在%windir%\system32\slmgr.vbs,作為統一管理許可證和激活相關操作的接口,提供一系列參數來執行各種操作。

<b>*slmgr.vbs有作業系統版本的差别,不要在不同版本系統中拷貝使用。</b>

具體指令參數請參考:

<a href="https://technet.microsoft.com/en-us/library/dn502540(v=ws.11).aspx">https://technet.microsoft.com/en-us/library/dn502540(v=ws.11).aspx</a>

這裡我們主要關注以下一些指令參數:

對應路徑是%windir%/system32/sppsvc.exe,服務是Software Protection Service,spp是Software Protection Platform的縮寫,在Windows Server 2008 R2之前是Software License Service,激活原理沒有什麼差别,這裡我們隻讨論Software Protection Service的情況。

實際具體的激活流程是由sppsvc.exe來完成,期間會涉及一系列DLL檔案、WMI和系統資料庫的操作。針對這個程式,我們主要關注以下兩個路徑:

Sppsvc.exe還會調用一系列spp相關元件,從Windows 8/Windows 2012開始,還引入SppExtComObj.exe (KMS Connection Broker)來完成激活程式中部分工作。

了解了兩個主要元件,我們可以從以下五個方面來一步步排查和分析:

CPU、記憶體、系統盤空間資源使用正常,系統時鐘同步正常。

另外系統被黑是一個大類,如果遇到激活報錯比較奇怪的情況,可以一開始就快速檢查以下幾個路徑:

<b>*顯示隐藏,以日期排列,重點檢視是否有較近時間點的異常exe/bat/ps1/vbs等檔案,Windows自帶有不少exe檔案,可以通過移動滑鼠到檔案上檢視公司顯示是否是Microsoft Corporation。</b>

首先ping KMS伺服器確定可以正常解析出IP位址,之後可以簡單地通過telnet KMS伺服器1688端口結合同地域其他ECS伺服器測試連接配接相同KMS伺服器能否正常激活來判斷,如果端口是通的同時在測試伺服器slmgr /ato能激活成功,那麼便可以排除KMS伺服器的問題。

基于激活失敗的報錯并通過提示的exe指令檢視錯誤碼資訊或者通過err.exe (error lookup tool,适用于0x8開頭的錯誤碼)擷取錯誤碼的含義,同時對比系統事件日志(事件日志可以通過指令行輸入eventvwr快速打開)。

建議直接解壓到自己的使用者目錄,随時打開指令行就可以跑,下面以激活場景錯誤0x80070424為例,一般主要看winerror.h的資訊,看到描述是服務不存在:

核實Software Protection服務的狀态(是否存在,是否被禁止,是否能成功啟動),slmgr /dlv查詢許可證資訊是否有異常,産品密鑰是否與系統版本一緻。

Software Protection服務預設啟動類型是自動(延遲啟動)。

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

系統資料庫項HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc是否正常:

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

slmgr /dlv示例,我們可以擷取激活相關的不少資訊,同時“部分産品密鑰”對應的是産品密鑰最後五個字元。

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

在這之前可以通過Google或者Bing快速檢索一下相關報錯,個别DLL檔案或者權限引發的問題可能比較典型,如果有相關文章和論壇記錄,我們參考進行DLL檔案重新注冊以及權限修改。如果仍然沒有什麼線索,通常需要利用微軟sysinternals工具集中procmon(Process Monitor)來複現問題發掘具體問題點了。

下載下傳位址:

<a href="https://docs.microsoft.com/en-us/sysinternals/downloads/procmon">https://docs.microsoft.com/en-us/sysinternals/downloads/procmon</a>

步驟是 procmon開啟捕獲(Ctrl+E)-&gt; 複現問題 -&gt; 停止捕獲(Ctrl+E),儲存檔案後進行篩選(Ctrl+L) ,懷疑問題出在sppsvc.exe這邊,可以參考以下過濾器的添加篩選:

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

以上篩選出現Access Denied的情況,如果沒有Access Denied的情況,我們也可以排除結果是Success的情況進一步分析。

一般來說,嘗試修複問題的方法包括但不限于以下一些:

<b>1. 解決網絡問題</b>

<b></b>

2. slmgr /skms重新設定KMS伺服器。

3. slmgr /rilc重新安裝許可證。

4. slmgr /upk後slmgr /ipk &lt;product key&gt;重新安裝産品密鑰。

5. 重新開機Software Protection服務。

<b>6. 修複系統資料庫。</b>

備份sppsvc系統資料庫項,找到相同版本作業系統,導出HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\sppsvc,拷貝并導入到問題系統,之後重新開機伺服器。

<b>7. sfc /scannow嘗試修複并檢視%windir%\Logs\CBS\CBS.log核實修複日志。</b>

參考微軟官方文檔:

<b>9. 根據定位的Access Denied檔案修改相應的檔案和路徑權限。</b>

<b>10. 復原和重新初始化系統盤。</b>

此方法作為最終辦法,重新初始化系統盤相當于重裝系統,系統盤使用者資料會被清除,是以操作前請務必備份。

重新初始化系統盤操作文檔:

https://help.aliyun.com/document_detail/25449.html

<b>*排查系統問題,請務必先做好快照備份。</b>

激活報錯:0xC004C003,激活伺服器确定指定的産品密鑰被阻止。

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

排查:

考慮産品密鑰有問題,查詢作業系統版本并導入正确的密鑰:

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

激活報錯找不到産品密鑰。或者報錯0xC004F050

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

slmgr /dlv對比産品密鑰和系統版本并沒有異常,重新安裝産品密鑰問題一樣,考慮服務存在異常,重新開機Software Protection服務後問題解決。

激活報錯:0xC004F074 軟體授權服務報告無法激活該計算機。密鑰管理服務(KMS)不可用。

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

- 實際測試telnet KMS伺服器1688端口是通的,對比同地域其他測試伺服器能正常激活。

- 重新指定并重試激活依然報錯。

- 重新開機Software License Service問題依舊。

- 鑒于提示KMS服務不可用,說明與之相關的服務或者系統檔案存在異常或者被破壞。進一步核實發現存在病毒檔案。為了快速恢複系統,備份資料後操作重新初始化系統盤。

<b>*防毒軟體也可能導緻類似的問題,另外以下報錯也很可能與病毒或者安全軟體有關。</b>

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

跑任何slmgr指令都直接報VBScript運作時錯誤并提示沒有權限,錯誤碼800A0046

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

跑slmgr指令出現VBScript運作時錯誤一般可以排除sppsvc.exe相關問題,因為一開始是wscript.exe在加載相關檔案來運作腳本。根據報錯不一定好定位問題,非Access Denied的報錯建議先檢索Bing和Google。

上述報錯需要通過Process Monitor擷取具體Permission Denied的位置,之後通過修改權限或者替換檔案的方式修複。

<b>*Software Protection服務報Access Denied/Permission Denied情況,方法類似,例如下圖服務無法啟動的情況。</b>

Windows基礎排查之一 - 激活前言基本原理排查分析具體案例

<b>*類似情況報Access Denied多跟%windir%/system32/spp/store/&lt;version&gt;/data.dat 和 token.dat檔案相關,slmgr /rilc操作不一定能成功重裝許可證,可能需要通過手動删除兩個檔案再通過slmgr /rilc的方式修複。</b>

微軟KMS介紹:

<a href="https://technet.microsoft.com/zh-cn/library/ff793434.aspx">https://technet.microsoft.com/zh-cn/library/ff793434.aspx</a>

<a href="https://technet.microsoft.com/en-us/library/ff793419.aspx">https://technet.microsoft.com/en-us/library/ff793419.aspx</a>

微軟官方部落格排查文檔:

<a href="https://blogs.technet.microsoft.com/askcore/2015/11/23/troubleshooting-activation-issues/">https://blogs.technet.microsoft.com/askcore/2015/11/23/troubleshooting-activation-issues/</a>

産品密鑰:

繼續閱讀