?? cmos解密.txt
字號:
cmos解密研究 By 天殺(于2004-6-29發表)
--------------------------------------------------------------------------------
CMOS解密心得
我們來看看CMOS密碼的加密算法,不管是Award還是AMI的BIOS(Basic Input Output System基本輸入輸出系統),其中的加密算法都是使用的HASH有損壓縮算法(這種算法是不可還原的)。具體的計算方法為:如有密碼為“ABCDEFGH”,則按下列公式計算:H+G×4H+F×10H+E×40H+D×100H+C×400H+B×1000H+A×4000H,將其計算結果由高到低按字節分別保存為H1、H2、H3,再出計算H2×100H+H3+H1即為最終結果。
我們再來看看CMOS中的數據結構和其讀寫方法。CMOS中主要保存計算機中的硬件配置信息,其地址范圍為:00H-7FH共128個字節。如其中地址00H-09H保存日期時間,10H保存的是軟驅類型,19H、1AH保存的硬盤類型,15H、16H保存基本內存大小,17H、18H保存擴充內存大小等等。以上這幾個是具有標準定義的CMOS地址,其它大部分為保留地址,供BIOS廠商自己定義,如華碩的CUA266主板中管理員密碼保存在4EH、4FH,用戶密碼保存在71H、72H,79H、7AH中保存校驗和。下面說說對CMOS地址的讀寫方法:通常,對CMOS地址的讀寫都是通過70H和71H兩個IO端口進行的,先向70H端口寫入要讀寫的CMOS地址,再通過對71H端口的讀寫即可完成對指定CMOS地址的讀寫。
下面來說說CMOS密碼的破解方法。常見的方法有兩種,一、破壞CMOS參數信息或者更改硬件配置,使其校驗和出錯(此方法最有效,但容易被發現,不推薦使用)。二、將CMOS中的密文進行解密還原。以下就將對此方法進行詳細介紹。
由于CMOS密碼加密采用HASH有損壓縮算法,故可多個明文對應一個密文。其中明文可為20H→7FH中的任意字符,即八位密碼共有95^8種,而密文才兩個字節,即256^2種,所以平均一個密文對應95^8/256^2≈10^10(100多億)個明文。再來看看其加密算法,不難看出其實就是一個將每位密碼擴展到16位再進行循環移位相加(其中的進位規則為:最高位向最低位進/借位)。傳統的破解方法為暴力破解,我見到N個破解軟件都是暴力破解,該辦法速度特慢,得出的結果不具有規律性,如“D2%?>q@-”這種又難看又難記的密碼。下面看看我自己想的破解方法,保證讓你大吃一驚。看好了:如有一密文為WXYZ(十六進制),已知一個八位明文其密文為HIJK將密文與已知明文的密文相減即WXYZ-HIJK=MNOP,將MNOP轉換為四進制并擴展到八位(高位補零)設結果為ABCDEFGH,將原來明文的ASCII碼與ABCDEFGH相加即得到了最終明文的ASCII碼。來個實例瞧瞧:密文為71C4H,已知明文“kkkkkkkk”對應的密文為:AAAAH,相減71C4-AAAA=C719H(最高位向最低位借位),轉化為四進制為30130121,擴展到八位為:0300010300010201H與已知明文“kkkkkkkk”的ASCII碼“6B6B6B6B6B6B6B6B”相加:6B6B6B6B6B6B6B6B+0300010300010201=6E6B6C6E6B6C6D6C,將其轉化為字符為:“nklnklm”。即“nklnklml”即為密文71C4H的一個原文。此解密方法可概括為:基本碼加偏移。其中基本碼為已知明文的密文,偏移為相減后的密文,它表示了最終明文與基本碼之間的距離。其中原則上基本碼和偏移可以為任意值,只要兩者相加后得到的最終明文可以輸入即可(即滿足最終明文的每個字符的ASCII碼在20H和7FH之間)。由于最終明文有范圍限制,下面我們先來討論一下偏移的選取技巧。
由于偏移可以任意選取,故我們可以對其任意假設,如我們為了計算方便,可假設偏移每個字節的高四位為零,即只有低四位有效,看看HASH算法中的循環移位可以發現:最后一位偏移可以完全覆蓋密文最低四位,倒數第三位偏移可完全覆蓋密文中的第9→12位,倒數第五位偏移可完全覆蓋密文中第5→8位,倒數第七位偏移可完全覆蓋密文中的高四位,如果將偏移中的二、四、六、八位全部置零,則密文最低四位等于最后一位偏移,密文中的第9→12位等于倒數第三位偏移,依此類推。可發現將十六進制的密文每一位前面加三個十六進制的0(因為要擴展到一個字節)即為偏移。如明文為十六進制的“CDEF”,其偏移可以為十六進制的“000C000D000E000F”。這是偏移高四位為零的情況,我們再來看看偏移每個字節的高六位為零的情況。這時候只有最低兩位有效,最后一位偏移完全覆蓋密文最低二位,倒數第二位偏移覆蓋密文的13→14位,依此類推。可發現,將密文轉化為四進制,在將這個8位的四進制數每一位前面加上一個0看做十六進制即為偏移。如:密文為十六進制的“FEDC”,轉換為四進制為“33323130”,故偏移的十六進制值為:“0303030203010300”。比較一下這兩種偏移的計算方法可發現還是第二種方法比較方便,而且計算出來的偏移取值范圍較小,為00H→03H,可以擴大基本碼的取值范圍。
我們再來看看基本碼的選取技巧。前面已經說過,基本碼基本上可以任意選取,但基本碼加上偏移后必須要保證其可輸入性,故基本碼每一位的取值范圍為20H→7CH,為方便觀察和計算,我們一般將基本碼的八個字節取相同的值,如為:“aaaaaaaa”。我們再來看看偏移的計算公式:偏移密文=原始密文-基本碼密文,即:原始密碼=基本碼密文+偏移密文,由于其中的最高位向最低位進/借位,因此其中有個特別的基本碼密文:FFFF(十六進制),只有偏移不等于0,則有:原始密文=偏移密文,而只有當原始密文為0(此時表示沒有密碼)的時候,偏移才為0。有了這個特殊的密文后就不必要算那個倒著借位的減法了。好了,我們來看看哪些明文的密文為FFFF,在此我們發現了很多,如:“00000000"、“BBBBBBBB”、“cccccccc”、“<<<<<<<<”、“????????”等等。其實只要某個字符的ASCII碼能夠被3整除就可以,如某個字符的ASCII碼為X=3n,代入原始的密文計算公式:有密文Y=X×5555H=3n×5555h=n×FFFFH,即n個FFFFH相加。前面已經說過:任何數與FFFFH相加后結果不變,故有Y=FFFFH。有了這個特殊的基本碼密文就可以將原始密文的明文輸出為任意的種類,如:純數字、全部大寫、全部小寫、純特殊字符。
并不是所有的貼子都是原創,此時作者均指發表的人而不是文章的作者,作者會說明是否是轉貼
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -