摘 要:介紹了基于PCI的物理隔離卡基本原理,重點說明如何開發和安裝主引導扇區MBR中的自舉程序,使得開機出現內外網選擇界面,配合隔離卡實現內外網的切換,并給出了BIOS環境下內外網選擇界面中漢字顯示的解決方案。
關鍵詞:物理隔離;MBR;BIOS;漢字顯示
中圖法分類號:TP309.1文獻標識碼:A
文章編號:1001—3695(2007)02—0257—03
計算機網絡和信息技術的迅猛發展,極大地提高了人們獲取與處理信息的能力。同時,黑客利用外網侵入內部網絡、操作系統漏洞和病毒入侵等隱患嚴重威脅著國家的政治和經濟安全。雖然有防火墻、病毒防護和入侵檢測等網絡安全技術提供保護,但由于內外網始終存在物理連接,這樣對于數據安全性和保密性要求高的單位依然存在較大風險[1]。鑒于此,國家保密局頒布實施了《計算機信息系統國際聯網保密管理規定》,規定“涉及國家秘密的計算機信息系統,不得直接或間接地與國際互聯網或其他公共信息網連接,必須實現物理隔離”。本文采用基于PCI 9052接口芯片的物理隔離卡,通過上層管理軟件發送指令來切換內外網。但是由于硬件默認設置每次開機直接進入內網,如果用戶需要開機直接進入外網,則必須等計算機啟動后,通過上層管理軟件發送指令,重新引導操作系統進入外網,這樣不僅浪費了用戶的時間,而且缺乏靈活性和實用性。因此,設計此隔離卡自舉程序,在系統自檢后,操作系統引導之前,給用戶提供一個選擇內外網的機會,避免二次重啟。
1 系統設計原理
設計自舉程序之前,首先介紹一下計算機的啟動過程和硬盤主引導扇區的結構,以便選擇自舉程序的執行時機和程序框架,然后闡述整個系統的設計原理。
1.1 計算機啟動過程
當按下電源開關,CPU初始化后便從地址FFFF0H開始執行指令,一般此處為跳轉指令,跳到基本輸入/輸出系統(Basic Input-Output System,BIOS)啟動代碼處。系統BIOS啟動代碼首先進行加電自檢(Power On Self Test,POST),依次檢測內存、顯卡、設備BIOS和即插即用設備等。
檢測配置完所有硬件后,系統BIOS將根據CMOS啟動順序,自動加載啟動設備第一扇區的自舉程序到內存地址0000:7C00H,然后跳到此處執行。如果是硬盤啟動,自舉程序將查找DPT(Disk Partition Table),找到活動分區引導記錄,進而引導該分區上的操作系統[2]。
1.2 硬盤主引導扇區和MBR
硬盤主引導扇區由硬盤主引導記錄MBR(Main Boot Record)和硬盤分區表組成,不屬于任何操作系統,位于硬盤0柱面0磁道1扇區,大小為512Bytes。此扇區為隱含扇區,而且0柱面0磁道的全部扇區均為隱含扇區。在該扇區512Bytes中,MBR占用前446個字節(偏移0000H—01BDH),另外的 64個字節(偏移01BEH—01FDH)為硬盤分區表,最后兩個字節“55AA”(偏移01FEH—01FFH)是分區結束標志[3]。其結構如圖1所示。
主引導記錄中包含了硬盤的一系列參數和一段引導程序。其中引導程序的主要作用是檢查分區表是否正確,并且在系統自檢之后引導具有活動標志80H分區上的操作系統。
1.3 自舉程序設計原理
為了實現在BIOS自檢后顯示選擇內外網的開機界面,首先將開機自舉程序安裝在硬盤的0柱面0磁道第1扇區,同時備份原來的系統MBR到硬盤0柱面0磁道的某一隱含扇區。由系統BIOS自檢后加載第1扇區的內容到內存地址0000∶7C00H,使本MBR自舉程序得到控制權,然后等待并響應用戶的鍵盤輸入。當按Y鍵時,MBR自舉程序首先加載之前備份在硬盤某隱含扇區的原系統MBR到內存地址0000∶7C00H,之后再將控制權返還給原系統MBR,讓它完成操作系統的引導,從而直接進入內網;N鍵則熱啟動系統,然后配合物理隔離卡切換到外網;若為其他鍵則等待用戶重新輸入。
由于普通的磁盤訪問命令無法直接讀寫硬盤中的隱含扇區,為了將MBR自舉程序寫入硬盤的第1扇區和備份原系統MBR程序,需要開發一個安裝、卸載程序。另外,在開機界面中,筆者顯示了大小兩種字體,可以分別用16點陣和12點陣字庫實現。但由于字庫信息只能存儲在硬盤的隱含扇區中,受存儲空間大小的限制,不可能將整個16點陣和12點陣標準字庫都保存在硬盤的隱含扇區中,而且那樣也不利于自舉程序查找和顯示其中的字模信息。于是,開發了一個程序用來從標準16點陣和12點陣字庫中提取所顯示漢字的點陣字模信息,組成自制漢字庫。因此,整個系統由三個程序組成,即安裝卸載程序、開機自舉程序和字庫提取程序。以下分別予以介紹。
2 安裝卸載程序設計
2.1 安裝卸載程序功能
安裝卸載程序的主要功能是安裝或卸載開機自舉程序。其中,安裝主要實現以下功能:
(1)備份原系統MBR程序到硬盤第6扇區,為了防止卸載恢復原系統MBR時出現讀硬盤扇區錯誤,導致原系統MBR無法恢復而不能引導操作系統,采用同時備份其到文件系統中某個文件的冗余機制;
(2)將MBR開機自舉程序寫到硬盤的第1扇區;
(3)將自制漢字庫寫到硬盤的第4扇區,其中16點陣字庫在前,12點陣字庫在后。
卸載時通過第6扇區或者硬盤備份文件中的備份,恢復原系統MBR到硬盤第1扇區。同時,為了防止開機自舉程序已安裝而再次安裝和沒有安裝而進行卸載等非法操作,導致原系統MBR被破壞,采取了設置安裝卸載標志的解決方案。事先在開機自舉程序首部寫入某個特定字符串作為標志。安裝時,程序查找當前第1扇區特定位開始的字符串是否為標志字符串,如果相同表示已經安裝而忽略本次安裝,否則繼續安裝;同樣,卸載時如果找到標志字符串則進行卸載,否則直接返回。
2.2 安裝卸載程序流程
安裝卸載程序流程如圖2所示。首先顯示提示信息,然后打開自制漢字庫文件,將字庫寫入硬盤第4扇區。接著等待用戶按鍵選擇,其中鍵入1則安裝,鍵入2則卸載。當安裝時,首先判斷安裝卸載標志,如果已經安裝,程序退出;否則,程序將備份原系統MBR并安裝。
由于系統BIOS檢測主引導扇區是否為有效的自舉程序時,并不檢查其具體內容。但會檢測此扇區的結束標志,有無硬盤分區表和可以引導系統的活動分區。沒有則被認為是無效的,而不予執行。因此,首先將開機自舉程序加載到某個內存地址,接著將原系統MBR的后66Bytes加載到開機自舉程序首地址偏移466Bytes處;最后將自舉程序首地址開始后的512Bytes寫入硬盤第1扇區,安裝結束。
如果卸載,開始也要判斷安裝卸載標志,如果之前沒有安裝,則退出。否則進行卸載,首先嘗試著讀備份原系統MBR的文件,成功則寫回硬盤第1扇區;如果文件打開失敗,則加載第6扇區的原系統MBR,最后寫入第1扇區。至此,卸載結束。
3 開機自舉程序設計
3.1 開機自舉程序流程
主程序首先設置安裝卸載標志,該標志為任意指定字符串。接著將自己復制到另一塊內存地址,并跳到該地址繼續之前的狀態執行,然后將備份在第6扇區的原系統MBR加載到地址0000∶7C00H,設置圖形顯示模式,從第4扇區讀取自制漢字庫,調用子函數DIS_8BIT和DIS_HZ顯示提示界面后,程序阻塞,等待用戶按鍵。用戶可以根據提示,按Y或N鍵來進行內外網選擇。如果用戶鍵入Y,則恢復原來的顯示模式,并長跳轉到地址0000∶7C00H處,執行原系統MBR,正常引導操作系統;如果鍵入N,則清內存,熱啟動計算機,觸發RESET信號,配合隔離卡切換網絡。程序流程如圖3所示。
3.2 主要實現技術
3.2.1 BIOS中斷
BIOS是一組工作在硬件與其他程序之間的低級程序。它直接與外設通信,為開發人員提供簡單的編程接口。調用BIOS中斷時,首先設置有關寄存器的數值,然后調用當前中斷號的中斷指令(INT)獲取該服務。當中斷服務完成后,可以通過查看相關寄存器或數據區來獲取返回結果[4]。
由于機器自檢后只有BIOS運行環境,所以開機自舉程序的功能只能調用BIOS中斷實現。其中主要用到了INT 10H和INT 13H,來設置顯示方式、置彩色調色板、畫點顯示漢字和讀寫硬盤隱含扇區等。
3.2.2 漢字顯示
開機自舉程序在進行漢字界面顯示時,首先調用子程序DIS_HZ找到要顯示的單個漢字的字庫信息,解析為一個個的字節,接著調用子程序DIS_8BIT對每個字節的8位進行移位判斷,如果為1,則進行寫點操作,否則繼續判斷下一位。通過如此的三重循環來顯示每個漢字。同時,為了提示的醒目,可將點設置為彩色。
3.2.3 系統RESET和熱啟動
當用戶選擇切換進入外網時,軟件必須產生RESET信號,使得計算機熱啟動。因此,在開機自舉程序中軟件必須實現系統的RESET重啟和熱啟動。當用戶鍵入Y時,程序轉入系統BIOS的入口點,執行該處的跳轉指令,轉向啟動程序。接著,設置復位標志字,使得切換重啟時先檢測并清空內存,防止接入外網時常駐內存的木馬和病毒入侵到內網,或者內網中的涉密信息駐留內存而泄漏到外網,最后重啟系統。
4 字庫提取程序設計
在PC 機中,漢字以雙字節的機內碼存儲,并以點陣字模形式存儲在字庫中,采用區位碼來標志其在字庫中的區號和位號[5]。漢字庫提取程序的設計思想是:首先計算出要顯示漢字的區號和位號,再根據區位號計算出其字模在字庫文件中的偏移量,然后把該地址之后特定長度的點陣信息寫入自制字庫文件中。其中,每個漢字的點陣字模信息在標準字庫中的首地址計算公式如下:
式(1)計算區號,式(2)計算位號,式(3)計算該漢字在標準字庫中的首地址。其中,qhs和whs為文件中存儲該漢字的第一個字節和第二個字節,qh,wh分別為該漢字的區號和位號,loc為計算出的該字字模在字庫中的偏移量。當計算16點陣字庫時,N取32;計算12點陣時,N取24。
最后,把生成的16點陣與12點陣字庫信息合并。
5 結束語
筆者通過以上方法,用匯編語言成功開發出該套軟件。而且測試成功,配合物理隔離卡運行穩定,界面提示美觀大方。本文給出了一種開發即插即用設備自舉程序的方法,對啟動設備自舉程序開發,甚至操作系統方面均有一定的借鑒作用。
同時,本系統可以繼續改進,重新設計基于PCI的物理隔離卡硬件,加入BOOT ROM,把開機自舉程序寫入此ROM中,由系統BIOS在檢測即插即用設備時加載運行,從而避免了對硬盤主引導扇區的不安全操作。
本文中所涉及到的圖表、注解、公式等內容請以PDF格式閱讀原文。