Windows 95的引導圖形界面及抖動變色圖像的形成

學識都 人氣:2.3W

摘要 該文剖析了Windows 95 的部分文件,給出了人們很感興趣的用戶定做啓動徽標和關機圖像的方法,並使其顯示啓動徽標抖動和變色。

Windows 95的引導圖形界面及抖動變色圖像的形成

一、引言
Windows 95以更新更好的界面展現在用戶面前,而給人印象最深的是表明其是"徹底"圖形界面的引導及結束時的標誌圖形。Windows 95使系統由圖形引導啓動並在圖形界面中關閉,系統在顯示微軟啓動徽標的同時進行初始化,在顯示等待信息的同時完成系統退出並以一個圖形化的提示信息結束系統工作。此外,Windows 95還爲舊DOS程序的運行設計了很好的圖形化界面, 從而使系統的整個工作過程完全可以脫離過去的命令行方式。本文介紹這些界面圖形的定製和使啓動封面圖形抖動變色的方法。

二、Windows 95的三幅界面圖
Windows 95用三幅圖完成其初始化和關閉傳遞信息工作,即啓動徽標(封面)、封底1(顯示 "Please wait while your computer shuts down")、封底2(顯示 "It's now safe toturn off your computer") 。其中封底1和封底2的圖形是兩個256色的位圖文件,名字分別爲和,存放在Windows的工作目錄下,負責這兩個圖形顯示的程序分別是和,它們在打開相應的圖形文件後分別作文件格式檢查。
的檢查段代碼爲:
debug
-u 3b68 3b83
0AF4:3B68 813F424D CMP WORD PTR [BX],4D42
0AF4:3B6C F9 STC
0AF4:3B6D 75B9 JNZ 3B28
0AF4:3B6F BBCE40 MOV BX,40CE
0AF4:3B72 833F28 CMP WORD PTR [BX],+28
0AF4:3B75 75F5 JNZ 3B6C
0AF4:3B77 837F0C01 CMP WORD PTR [BX+0C],+01
0AF4:3B7B 75EF JNZ 3B6C
0AF4:3B7D 837F0E08 CMP WORD PTR [BX+0E],+08
0AF4:3B81 75E9 JNZ 3B6C
0AF4:3B83 60 DB 60
寄存器BX中裝的是打開成功的文件首地址的偏移值,通過對比位圖文件的首部結構,我們可以立即得到所打開的文件是一個非壓縮、位面數是1、256色的位圖圖像文件(關於位圖文件的頭部標誌域可見附錄1 的簡述)。實際上文件確實是一個完整的位圖文件,可以用Paintbrush編輯,它顯示封底2的信息。因此我們可產生相應格式的位圖文件取代,試驗證明完全可行。
對也作類似處理,只是對位圖標誌域檢查對比的部分語句不連續,其各項檢查如下:
ren userexe
debug userexe
-u 5ada:abb8
5ADA:ABB8 813F424D CMP WORD PTR [BX],4D42
-u 5ada:abc4
5ADA:ABC4 833F28 CMP WORD PTR [BX],+28
-u 5ada:abcb
5ADA:ABCB 837F0C01 CMP WORD PTR [BX+0C],+01
-u 5ada:abd3
5ADA:ABD3 837F0E08 CMP WORD PTR [BX+0E],+08
其中寄存器BX中爲打開的存儲首址。由此可見,可以用相應格式的位圖來取代用作封底1的顯示。
值得注意的是,顯示時自動按設定的屏幕分辨率來做全屏幕顯示,對640×480、256色的屏幕,其位圖大小最好設定爲320×400像素。

三、啓動徽標封面的定做方法
Windows 95的封面沒有獨立文件形式的位圖文件,這與對的處理和對的處理不同。筆者在剖析引導文件的過程中發現,Windows 95的啓動封面徽標是嵌入在引導文件中的,並經DBLSPACE壓縮過,圖像數據區長度爲64KB。在筆者剖析的Windows 95版本中,圖像數據佔據(文件長度223748B)217~344扇區,數據內部有多處"DS"標識,這是DBLSPACE壓縮文件的標誌,由於DBLSPACE是分段校驗壓縮文件,因此,即使此區內有一個字節的改動也會造成圖像的大幅破壞。在上述中,圖像顯示執行
代碼部分起始於以"DBLSBIN$"標誌的地方並佔據110-112扇區。由於DBLSPACE的壓縮文件很複雜並分段校驗,使我們不能像對Windows3.1的 那樣通過改動組合文件或重編的部分代碼來定做啓動封面,但可以在中以Logo=0來消隱顯示。關於配置文件的設定已有文獻可查,本文附錄2簡述了其配置設定選擇。
實際上,啓動封面也是可以定做的。筆者在分析的過程中發現,在顯示內部嵌入封面前先試圖打開一個在引導目錄下名爲的文件(利用DOS功能調用INT 21H,AH=3DH子功能),若打開失敗(此文件不存在)則轉顯示內部嵌入封面(在及中打開文件失敗時則不顯示圖形,而代之以文本顯示有關信息),若打開成功則做文件格式檢查,其要求的格式比對的檢查條件苛刻。
對檢查的代碼如下:
debug
-u de0e
12B9:DE0E 813C424D CMP WORD PTR [SI],4D42
12B9:DE12 0F DB 0F
12B9:DE13 854801 TEST CX,[BX+SI+01]
12B9:DE16 83C60E ADD SI,+0E
-u de19
12B9:DE19 833C28 CMP WORD PTR [SI],+28
-u de20
12B9:DE20 837C0C01 CMP WORD PTR [SI+0C],+01
-u de28
12B9:DE28 837C0E08 CMP WORD PTR [SI+0E],+08
-u de30
12B9:DE30 817C044001CMP WORD PTR [SI+04],0140
-u de39
12B9:DE39 817C089001CMP WORD PTR [SI+08],0190
-u de42