首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

Windows 98 螢幕保護程式密碼加密演算法深度解析與破解實戰

     編輯:關於C++

前言:Windows 98 安全性的隱憂

眾所周知,Windows 9x 系列僅屬桌面級作業系統,其穩定性與保密性長期備受詬病。本文將透過深入剖析 Windows 98 螢幕保護程式(以下簡稱螢保)密碼的加密演算法,揭示其安全機制的脆弱性,並示範如何編寫程式提取明文密碼,以供技術研究與防禦參考。

一、螢保密碼的加密演算法詳解

1. 密碼限制與儲存位置

Windows 98 的螢保密碼明文長度上限為 128 個字元,字元集包含英文字母、數字及可見標點符號(即可列印 ASCII 字元)。加密後的密文長度為明文的兩倍,以二進位值形式儲存在登錄機碼 HKEY_CURRENT_USER\Control Panel\Desktop 下的 ScreenSave_Data 值中。

2. 加密流程

  1. 大寫轉換:將明文中所有小寫字母統一轉為大寫,其他字元保持不變。
  2. 異或運算:依序取出明文每個字元的 ASCII 值,與固定的 128 Bytes 密鑰對應位元組進行 XOR 運算,得到等長的數值串。
  3. 十六進位編碼:將運算結果的每個位元組轉為兩位十六進位字元(A-F 以大寫表示),拼湊成長度為明文兩倍的密文字串。
  4. 登錄儲存:最終以十六進位 ASCII 碼值形式寫入登錄,結尾補 00h 作為結束標記。

3. 實例演示

假設密碼為 visual basic,轉大寫後為 VISUAL BASIC。對應 ASCII 碼與固定密鑰異或後,得到十六進位字串 1EA72548262581593BDF0EBB。將此字串每字元再轉為 ASCII 碼(如 1→31h, E→45h...),最終寫入登錄的二進位資料為:

31,45,41,37,32,35,34,38,32,36,32,35,38,31,35,39,33,42,44,46,30,45,42,42,00

4. 密鑰提取方法

由於演算法已知且密鑰固定,我們可透過「選擇明文攻擊」輕鬆還原完整 128 Bytes 密鑰:

  • 設定一組已知的 128 Bytes 長度密碼(需記住明文)。
  • 從登錄讀取加密後的 256 Bytes 密文,每兩字元還原為一個位元組,共 128 Bytes。
  • 將已知明文 ASCII 碼(已轉大寫)與上述 128 Bytes 密文逐一異或,即可得到完整密鑰表。

實測獲得的 128 Bytes 密鑰(十六進位)如下:

48 EE 76 1D 67 69 A1 1B 7A 8C 47 F8 54 95 97 5F
78 D9 DA 6C 59 D7 6B 35 C5 77 85 18 2A 0E 52 FF
00 E3 1B 71 8D 34 63 EB 91 C3 24 0F B7 C2 F8 E3
B6 54 4C 35 54 E7 C9 49 28 A3 85 11 0B 2C 68 FB
EE 7D F6 6C E3 9C 2D E4 72 C3 BB 85 1A 12 3C 32
E3 6B 4F 4D F4 A9 24 C8 FA 78 AD 23 A1 E4 6D 9A
04 CE 2B C5 B6 C5 EF 93 5C A8 85 2B 41 37 72 FA
57 45 41 A1 20 4F 80 B3 D5 23 02 64 3F 6C F1 0F

二、程式實作:VB6 提取螢保密碼

掌握演算法與密鑰後,即可使用 Visual Basic 6.0 編寫解密工具。核心邏輯為:讀取登錄 ScreenSave_Data、還原十六進位字串、與密鑰異或、轉換為可見字元。受篇幅限制,完整程式碼略過,關鍵在於正確處理登錄二進位資料讀取與字元編碼轉換。

三、螢幕保護程式密碼驗證機制

許多 VB 教學書籍著重於螢保的啟動參數、鍵鼠事件攔截、AlwaysOnTop 實現等,鮮少涉及密碼驗證。實際上,只需在滑鼠/鍵盤回應事件中加入密碼確認邏輯即可。相關登錄參數包括:

  • ScreenSaveTimeOut:等待時間(秒)
  • ScreenSaveActive:啟用旗標(1=啟用,0=停用)
  • ScreenSaveUsePassword:密碼保護旗標(1=啟用,0=停用)

開發自製螢保時,可依據 ScreenSaveUsePassword 決定是否啟用密碼驗證。

四、安全建議與總結

切勿重複使用重要密碼! 若以銀行提款密碼作為螢保密碼,攻擊者極易竊取。本文旨在揭示 Windows 98 螢保加密的脆弱性,提醒使用者提升安全意識,並為開發者提供防禦參考。現代作業系統(Windows 2000/XP 及更新版本)已大幅強化此機制,不再適用本文攻擊手法。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved