⚠️ 僅供學習 Office 二進位格式弱點、找回自有遺忘密碼、授權安全研究
Word 97-2003 (.doc) 採用 OLE 複合文件格式,表單保護 (窗體保護) 密碼以 **16 位十六進位雜湊值** 儲存於檔案結構中,存在經典繞過漏洞。Word 2007+ (.docx) 採用 OOXML + AES 加密,**此法完全失效**。本文記錄歷史技術細節供研究參考。
核心漏洞原理
- 表單保護密碼經雜湊後存為 2 位元組 (16-bit) 值,空間極小 (65,536 種)。
- 另存為 HTML 時,雜湊值以 `` 標籤明文寫入 HTML 原始碼。
- 十六進位編輯器直接修改 .doc 二進位中對應位置為 `00 00 00 00 00 00 00 00` (8 位元組 0),即可清空密碼驗證。
方法一:HTML 轉存法 (可視化驗證雜湊值)
- 開啟受保護 .doc → 「檔案」→「另存為」→ 存檔類型選 **「網頁 (*.htm; *.html)」** → 儲存。
- 用記事本/Notepad++ 開啟產生的 .htm → 搜尋 ``。
- 觀察標籤內容,如 `5BCECF7A` (此為密碼 "123" 的雜湊值)。
- 此雜湊值可用於驗證密碼猜測,但無法直接逆推明文密碼。
方法二:十六進位編輯器直接清空密碼 (核心實戰)
- 備份原始 .doc 檔案 (極重要!)。
- 用 **UltraEdit / HxD / 010 Editor / WinHex** 開啟原始 .doc。
- 搜尋十六進位序列:**`7A CF CE 5B`** (即 `5BCECF7A` 的小端序列) 或搜尋關鍵字 `UnprotectPassword` 定位區塊。
- 找到後,將該 4 位元組**及其後續相關結構共 8 位元組**全部改為 `00 00 00 00 00 00 00 00`。
- 儲存檔案 (建議另存新檔
_cracked.doc)。
- 用 Word 開啟新檔 → 「工具」→「保護文件」→ 「停止保護」→ 密碼欄留空直接按 Enter/確定 → 保護移除,可自由編輯。
為什麼搜尋 `7A CF CE 5B` 而非 `5B CE CF 7A`?
Intel x86 為**小端序**,記憶體中低位元組在低地址。雜湊值 `0x5BCECF7A` 在檔案中按位元組序存儲為 `7A CF CE 5B`。
關鍵限制與風險
| 限制 | 說明 |
| 僅適用 Word 97-2003 (.doc) | .docx (OOXML) 採用 AES-128/256 + SHA-1/512 + PBKDF2 100,000 迭代,無此漏洞 |
| 僅破解「表單保護/窗體保護」 | 「開啟權限密碼」(檔案加密) 為 RC4 40/128-bit,需暴力/字典破解,此法無效 |
| 修改二進位有損壞檔案風險 | 位置偏移/長度錯誤會導致檔案結構損壞無法開啟,務必備份並驗證 |
| Microsoft 未釋出修補程式 | 屬於格式設計缺陷,唯有升級 .docx 格式根治 |
現代防禦建議
- 全面遷移至 **.docx 格式**並啟用「用密碼加密」(AES-256)。
- 敏感文件部署 **IRM (資訊權限管理)**,權限綁定 Azure AD/AD RMS 身分。
- 禁用舊版二進位格式:群組原則 → Word 選項 → 信任中心 → 檔案封鎖設定 → 勾選「Word 97-2003 二進位文件」→ 「不開啟」。
- 定期稽核共享資料夾中是否仍有 .doc 受保護文件,轉換或淘汰。
這段歷史漏洞見證了「安全性無法事後補丁,必須架構於設計之中」。理解其原理,是為了不再重蹈覆轍,而非製造新的風險。