線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1801
推到 Plurk!
推到 Facebook!

CMOS破解完全手冊

 
conundrum
尊榮會員


發表:893
回覆:1272
積分:643
註冊:2004-01-06

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-14 11:37:57 IP:61.221.xxx.xxx 未訂閱
CMOS破解完全手冊 
作者:cartoonboy
http://www.encrypter.net/article_tw/c0007.htm
1)對於CMOS而言,相信大家已經不再陌生。對於破解CMOS密碼的文章也有不少。在這裡偶(cartoonboy)
根據自己的經驗並參考精華區的相關文章來說明如何解開CMOS密碼: 
先向大家說明一下CMOS的一些結構:     00000000H 30 00| FF 00 | 39 00 | FF 00 | 12 00 | FF 00 |01 00 | 18 00 
秒 | 秒報警 | 分 |分報警 | 小時 |時報警 |星期 | 日 
00000010H 11 00| 98 00 | 26 00 | 02 00| 70 00 | 80 00 |00 00 | 00 00 
月 | 年 |寄存器A|寄存器B|寄存器C|寄存器D |診斷 | 下電 
00000020H 40 00| 7E 00 | F0 00| 03 00| 0F 00| 80 00 |02 00 | 00 00 
軟驅| 密碼域 | 硬盤 | 未知 | 設備 |基本內存| 擴充 
00000030H 7C 00| 2E 00 | 00 00| 7F 00| 15 00| 86 00 |00 00 | 00 00 
內存|硬盤類型| 未知 | 密碼數據位 | 未知 
00000040H 00 00| 00 00 | 00 00| 00 00| 00 00| 00 00 |E2 00 | 22 00 
未知 
00000050H 0F 00| FF 00 | FF 00| E1 00| 22 00| 3F 00 |08 00 | 59 00 
未知 
00000060H 00 00| 7C 00 | 19 00| 80 00| FF 00| FF 00 |FF 00 | FF 00 
未知 | 世紀值 | 未知 
00000070H 7D 00| 81 00 | AA 00| 0F 00| 39 00| 9B 00 |E8 00 |19 00 
未知 
上述的內容參考了其他資料,所以不一定完全正確.在38H-3BH這四個字節中,由於39H和3BH這兩個字節一直為00H,
所以就略過,那麼CMOS密碼的關鍵就集中到了38H和3AH這兩個字節上。先介紹一點Award的密碼規則,
Award允許一位至八位密碼,每一個字元的範圍由20H-7FH,也就是由空格到ASCII碼的127號。想必大家已經發現了,
八個字元要放到兩個字節中去,好像不壓縮一下是不行的。的確,Award是將其壓縮了,但是不是普通的壓縮方法,
我想Award另有將其加密的想法,因為在CMOS中空位還很多,要想放八個字節看來是沒有什麼問題的,
不過這麼裸露的密碼就更加沒有什麼用處了。通常的壓縮方式有無損壓縮,如zip,arj等,或者是有損壓縮,
像mpeg,jpeg等。但是對這麼幾個字節,這些方法就沒有什麼用武之地了,而且壓縮過的東西,應該是可以還原的,
否則壓來壓去就沒有什麼意義了。不過Award的方法就不同了,他不僅僅進行了超級的有損壓縮用的是HASH演算法,
而且這種壓縮是不可還原的,下面就給出他的加密壓縮方法(以下數值,運算均基於16進制):假如有一密碼,
八位,記為:ABCDEFGH(每一位的取值範圍為20H-7FH),將其按下列公式運算
:H 4*G 10*F 40*E 100*D 400*C 1000*B 4000*A ,將結果按由低到高保存到:H1,H2,H3,字節中,
然後將H2保存到地址:3AH中,將H1和H3的和保存到38H中。如果密碼不足八位,以此類推。     下面舉一實例:我的密碼為:r*vte,ASCII碼為:72H、2AH、76H、74H、65H,按公式運算得
:72*100   2A*40   76*10   74*4   65=8615,於是H1=00H,H2=86H,H3=15H,
所以3AH的值為86H,38H的值為15H。看來密碼就這麼簡單,在你每次輸入密碼的時候,BIOS將其算算,
再與CMOS中的值比較一下,如果一樣就放行,否則免談。過程就是這樣,不過還是有些問題要說明,
先算算看,兩個字節可以表達的密碼可以有多少種:164=65536種,而八位密碼,每一位有96種選擇,
則可以表示的密碼有:968≒7.2×1015種,所以理論上說,每一個密碼,
都可以找出大約1011這麼多個可以起相同作用的密碼。但是事實上並不是大家都是八位的密碼,
或許沒有大得這麼嚇人,不過也挺多的,就如我那個密碼,光與他相同功能的五位密碼就有二十五萬多個
,而六位,七位,八位的更多,數量不詳,因為從來沒有把他算完過,時間太長了,耗不起。     2)關於通用密碼: 
Award4.51版以前的才有通用密碼, 
wantgirl 
Syxz(pay attension to the capital letter) 
dirrid 
wnatgirl     3)在這裡再向大家介紹一下復旦網友們的破解程式:(道德感不佳者和功力不夠深者略過)     (零) 
這個是斑竹偶(cartoonboy)連破十幾台機器攻無不克的方法,要珍惜哦:) 
you try (under dos) 
debug 
o 70 2e 
o 71 00 
o 70 2f 
o 71 00 
note:在windowsNT下,很多破解程式都無法使用,原因在於WindowsNT的DOS是模擬的禁止對CMOS寫入,請大家注意。     (一) 
//AMIPWD.CPP --- Show AMI Password String 
//Compile with SMALL model Tel:027-7800172 7404402(H) 
//Email:mecad@server20.hust.edu.cn 
#include 
#include 
#define BYTE unsigned char 
char AMI_unEncrypt( BYTE key,BYTE c2){ 
asm xor di,di 
asm mov bl,key 
asm mov cl,c2 
lab1: 
asm test bl,0xc3 
asm jpe lab2 
asm stc 
lab2: 
asm rcr bl,1 
asm inc di 
asm cmp bl,cl 
asm jne lab1: 
return _DI; 
} 
BYTE rbyte(int port){ 
outp(0x70,port); 
outp(0xed, port); 
return inp(0x71); 
} 
// 0x38-3d password code 0x37 initial value 
void main(){ 
int i, length; 
static BYTE secret〔7〕; 
char str〔22〕=""; 
for(length=0; length<7; length  ) 
secret〔length〕 = rbyte(0x37 length); 
secret〔0〕 &= 0xf0; 
for(i=0; i<7 ,secret〔i 1〕>0; i  ) 
str〔i〕 = AMI_unEncrypt(secret〔i〕, secret〔i 1〕); 
str〔i 1〕=0; 
if (secret〔1〕==0) 
printf("No password\n"); 
else 
printf("Password=%s\n",str); 
return;     (二) 
前述針對AMI主板的BIOS口令破譯演算法在BIOS日期為91.5.5, 91.7.7, 91.12.12,92.6.6和92.11.11的微機上測試通過.
 為便於理解,將解密演算法的C代碼列出: 
char AMI_unEncrypt( BYTE key,BYTE c2){ 
BYTE num〔〕={ 0,1,1,2 }; 
int di=0,c; 
do{ 
c=num〔key>>6〕 num〔key&3〕; 
if (c&1) key=0x80 (key>>1); 
else key>>=1; 
di  ; 
}whi[an error occurred while processing this directive]         
發表人 - conundrum 於 2004/02/14 18:17:12
系統時間:2024-06-29 5:18:16
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!