陳一璋王丹陳渝



摘要:當計算機系統遇到到用戶錯誤操作、硬件故障、被黑客或病毒攻擊,造成數據丟失或系統損壞時,通過數據恢復技術可將用戶數據恢復正常或者使系統正常運行,從而減小用戶損失。提出基于Android-x86的Windows恢復系統設計,通過雙系統啟動的方式實現系統恢復功能,從而有效與問題源進行隔離,且在恢復過程中不需借助其它媒介。測試表明,該方法能夠有效恢復Windows系統。
關鍵詞:Andorid-x86;Windows;數據恢復;恢復系統;Wimlib
DOIDOI:10.11907/rjdk.161639
中圖分類號:TP319
文獻標識碼:A文章編號文章編號:16727800(2016)009006504
作者簡介作者簡介:陳一璋(1991-),男,北京人,北京工業大學計算機學院碩士研究生,研究方向為操作系統、計算機信息安全;王丹(1969-),女,遼寧沈陽人,博士,北京工業大學計算機學院教授、博士生導師,研究方向為操作系統、可信計算;陳渝(1972-),男,廣東湛江人,博士,清華大學計算機科學與技術系副教授,研究方向為操作系統、計算機信息安全。
0引言
隨著信息技術的快速發展,信息安全問題越來越受到廣泛關注。據IDC統計,當前數據存儲量正以每年超過50%的速度增長[12]。當遇錯誤操作、硬件故障、被黑客或病毒攻擊等情況時,面臨數據丟失的風險。
數據恢復在國外已經30余年的實踐,僅北美地區擁有的數據修復公司便超過400家,其中包括Ontrack、CBL等知名公司。目前,中國數據恢復產業還處于發展階段。據相關數據統計,中國電腦用戶已經超過2億,數據恢復市場潛力巨大。
針對Windows系統,目前已有一些數據恢復工具,如EasyRecover、Recover、Disk Recover、Wimlib等,其不足之處在于無法通過系統本身進行數據恢復,需要借助光盤、USB等相關存儲工具。本文開發基于Android-x86平臺的Windows恢復系統,可恢復用戶備份的磁盤數據,將不能啟動的操作系統恢復到正常狀態。相關恢復鏡像可以保存在andorid-x86系統中或者通過網絡進行下載,Android-x86系統作為一個輔助系統,方便用戶使用。
1國內外相關工作
數據恢復可分為硬件恢復和軟件恢復兩大類[3],如圖1所示。
硬件恢復分為以下3種方式:固件修復、盤片讀取以及硬件替代[4]。軟件恢復包括系統級恢復和文件級恢復。系統級恢復指系統無法正常啟動時,通過軟件對系統進行修復,從而使系統恢復正常,恢復數據。文件級恢復只是恢復某個損壞的文件。本文恢復系統是一個系統級恢復軟件。
常見的數據或系統恢復軟件主要有:
(1)EasyRecovery[5]。EasyRecovery是由Ontrack公司研發的一款數據恢復工具,它通過模式識別的方式找回硬盤上不同位置的文件碎片,并進行整合。在內存中建立虛擬文件系統,列出所有文件目錄。即使硬盤分區以及相關維護信息非常少,也可以高效恢復。
(2)FinalData[6]。FinalData可以運行在不同系統平臺上,如Windows、Linux。其可以對數據、MBR、引導扇區等進行恢復,恢復完全刪除的數據文件以及目錄,還能對引導扇區中的內容以及通過快速格式化刪除的數據內容進行恢復。
(3)WinHex[7]。WinHex是一款針對數據恢復的磁盤編輯器工具,可以修改Hex和ASCII碼,還能對磁盤磁區進行編輯,對文件進行分析對比,可以作為一個手工修復數據的工具,在ZDNet Software Library上獲得了五星的最高評價。
(4)DISM。DISM的全稱是Deployment Image Service and Management Tool,是一款在Windows7和Windows Server 2008R2引入的工具,能夠完成系統安裝。它的特點在于可對鏡像進行加載和卸載,在鏡像中搜索已安裝的設備驅動。
(5)ImageX。ImageX是一個命令行工具,通過它可以創建、修改以及使用Windows磁盤鏡像(WIM格式)[8],它是一個免費的Windows自動安裝集合。從Windows Vista開始,可以用來完成Windows安裝,對磁盤分區進行映像捕獲,并修改和使用磁盤映像,以快速部署Windows系統。它還支持一些新功能,如分離鏡像文件以及通過最新的LZX壓縮算法[9]完成WIM文件捕獲。
總體來講,上述這些工具都可以對數據或者系統進行恢復,但不足之處在于當系統無法正常啟動時不能使用,需借助光盤、USB等存儲工具。
雙系統目前逐漸被人們所接受,即在一臺計算機上安裝不同的操作系統,當一個系統不能正常運行時,可以啟動另一個系統。本文開發一個基于Android-x86的Windows恢復系統。Android是一個開放源代碼的操作系統,而Android-x86是一個開源項目,在x86平臺上可以使用Android操作系統。該操作系統基于安卓開源項目[10](Android Open Source Project ),并且修改一些組件來允許Android運行在x86的架構上,比如kernel和HALs層。目前,Andorid-x86已成為一個較為穩定的桌面操作系統。相關工具和技術如下:
(1)rEFInd。隨著基于EFI或UEFI的電腦用戶的增多,配置EFI boot loader的需求也越來越大,特別是在有多個操作系統的設備上,如何啟動操作系統成為關鍵。EFI電腦的啟動方式不同于傳統的BIOS啟動,啟動方式更加靈活,并且從理論上要比BIOS啟動容易配置。不足之處在于目前針對EFI的文檔并不多,大多數文檔還是以BIOS為主,使得啟動基于EFI的系統相對較復雜。
rEFInd[11]是一個針對EFI或者UEFI啟動平臺的啟動管理工具。當計算機第一次啟動時,為用戶呈現菜單選項選擇操作系統。然而,rEFInd不是一個boot loader,也不作為程序加載操作系統內核,不影響它們的控制過程。目前,許多啟動管理器同樣是boot loader,使用戶容易混淆。所有兼容EFI模式的操作系統都擁有自身的boot loader,所以rEFInd對用戶沒有太多限制。與傳統的Grub不同,rEFInd將自動搜索磁盤上所有可啟動的操作系統,而EFI的Grub程序只包含Fedora和Ubuntu,所以rEFInd比Grub更加靈活。此外,rEFInd本身更加美觀,用戶可以通過修改配置文件以及添加文件來定制化啟動界面,通過圖形化的方式選擇需要啟動的操作系統,如Windows、ubuntu、Android-x86等。
(2)wimlib。Windows Imaging Format(WIM)是微軟開發的一種基于文件的磁盤鏡像格式,被用于Windows Vista及后續版本Windows操作系統。和其它磁盤鏡像文件格式一樣,WIM文件中包含一組文件和附屬的文件系統元數據。然而,與基于扇區格式不同(比如ISO或者VHD),在一個WIM文件中可以存儲多個映像,并且通過壓縮和單一實例的方法大大壓縮了映像文件大小,被廣泛使用在Windows系統上。
本文恢復系統使用wim文件作為恢復鏡像,并且采用wimlib[12]恢復工具完成恢復。wimlib是一個開源并且跨平臺的庫,通過它可以對WIM文件進行創建、提取和修改。Wimlib采用XPRESS、LZX和LZMS壓縮算法來創建WIM文件。Wimlib還能用來處理ESD文件,ESD文件使用solid模式LZMS壓縮的WIM文件,通常比常規WIM文件更小。
wimlib為用戶提供以下幫助:①在Windows或者UNIX-like系統上操作wim文件,從而實現諸如備份及使用wim文件;②允許用戶在非Windows系統上對WIM文件進行讀寫操作;③開發人員可在非Windows操作系統,比如Linux上完成Windows操作系統開發;④備份、安裝或者保存Windows操作系統。
恢復系統主要通過wimlib來實現對目標磁盤分區的恢復,采用wimapply命令來實現。由于Andorid-x86的庫文件并不支持wimlib,本文采用靜態編譯方式,將所有庫的內容以靜態庫的方式編譯到wimlib-imagex中。
本文基于Android-x86系統的Windows恢復系統可以恢復用戶備份的硬盤數據,恢復操作系統正常啟動。相關恢復鏡像可以保存在Andorid-x86系統中或者通過網絡進行下載,Android-x86系統也可作為一個輔助系統,方便用戶使用。本系統創新之處如下:
(1)將Android-x86與Windows在UEFI下進行雙系統啟動。使Android-x86系統與Windows系統分離,相關錯誤不會影響恢復系統的正常運行。
(2)針對Windows系統的恢復功能,可以在默認恢復系統盤或者其它數據硬盤準確恢復內容,有多個恢復鏡像,供用戶選擇。
(3)提出了基于URL可配置的下載方案,實現相關功能。可以實現從OEM網站上獲得指定鏡像文件,實現鏡像的網絡獲取,方便用戶使用。
(4)提供基于鏡像文件的驗證方案。通過驗證SHA1碼對恢復文件的完整性和正確性進行驗證。
2Windows恢復系統設計
結合對Windows恢復系統的需求分析,本文系統主要考慮以下幾個要求:多系統啟動模式、易操作性、安全性、完整性和可靠性。
2.1系統架構
本文系統總體框架如圖2所示。通過啟動管理器選擇Android-x86進行啟動,將該Android應用運行在Android-x86上。目的在于使恢復系統與Windows系統隔離,互不影響。在恢復系統中可以讀出掛載的Windows硬盤信息,用戶可明確選擇內容。當沒有可用的恢復鏡像時,可以通過網絡下載。當系統擁有鏡像后進行SHA1碼比對,從而保證鏡像正確與安全。最后由恢復系統進行Windows系統硬盤恢復,提醒用戶重啟,完成系統恢復。
2.2恢復系統模塊設計
2.2.1驗證模塊
驗證模塊主要驗證wim文件完整性、正確性。通過一個配置文件完成比對,配置文件由url下載地址、目標wim恢復文件的位置、名稱以及SHA1驗證碼組成。應用初始啟動后,檢查配置文件,若存在則繼續后續操作,若不存在則自動生成指定內容。SHA1碼校驗亦稱安全哈希算法,主要用于校驗數據的完整性。在SHA1算法中,通過補位、補長度、常量、函數計算驗證碼。主要步驟如下:
(1)開啟校驗線程。
(2)從配置文件中獲取信息,將wim恢復文件名以及SHA1碼傳到驗證線程中。
(3)計算SHA1碼并與配置文件中的SHA1進行比較,將結果送至主線程,由handler進行處理。
(4)校驗正確,則繼續進入恢復模塊。
(5)若檢驗錯誤,則重新下載。
(6)校驗模塊結束。
由于SHA1計算工作量大,可開啟新線程來完成驗證功能,主要由SHA1函數完成恢復文件計算,驗證完成后由handler處理結果,如成功則繼續用戶選擇,若失敗則重新下載。
2.2.2下載模塊
本模塊主要負責在沒有恢復鏡像的情況下,從配置的url中下載恢復鏡像,并顯示下載進度。下載url保存在配置文件中,下載由兩個線程來完成,其中一個負責進度條處理,另一個負責下載過程處理,下載步驟如下:
(1)主線程檢查是否成功連接網絡,若順利則繼續,否則提示網絡異常。
(2)啟動更新UI線程。
(3)獲取配置文件中的url以及目標文件名等信息。
(4)啟動下載線程,完成目標url連接。
(5)循環將緩存區所有內容以每次1024字節寫到文件中,并更新UI線程中的進度條。
(6)下載成功則繼續,若失敗則顯示下載超時并取消下載,刪除下載文件。
(7)下載結束,用戶選擇后續操作。
用戶點擊下載后,首先檢查網絡是否連接成功。本模塊分為兩個線程啟動,首先啟動更新UI線程,獲取配置文件信息,并且啟動一個新的下載線程完成下載。更新UI線程主要負責UI進度條更新以及將下載線程結果返回至UI線程。
2.2.3恢復模塊
本模塊主要通過恢復文件(WIM文件)對指定的磁盤分區進行恢復,執行磁盤分區、恢復鏡像。恢復模塊主要由以下3個部分組成:
(1)選擇恢復鏡像。驗證完恢復文件的完整性后選擇恢復鏡像,本文通過wimlib中的info命令來完成相關操作,可以獲取恢復文件的全部鏡像信息,通過執行命令行語句,得到輸出信息供用戶選擇。wimlib-imagex info命令主要用于顯示WIM文件的鏡像內容,系統提取其中鏡像的個數、大小以及描述符等供用戶選擇。
(2)選擇恢復分區。由于不需要對恢復分區進行掛載,只需要了解分區名、分區類型以及分區大小等信息,本文通過fidisk的Android-x86中現有命令來獲取信息。
Android-x86自帶fdisk命令,通過fdisk命令可以得到磁盤大小、設備號和盤符信息。在應用中調用shell命令完成操作,返回信息供用戶進行磁盤分區選擇。
用戶只可選Windows系統分區,防止用戶將重要分區進行誤操作。
(3)完成恢復功能。選擇恢復分區及恢復鏡像后,提醒用戶格式化磁盤,使用mkntfs命令將需要恢復的分區快速格式化。
利用wimlib中的apply實現恢復功能,首先給程序root權限,使用靜態編譯的wimlib,根據用戶提供的設備號以及選擇的恢復鏡像實現系統恢復功能。
由于恢復時間較長,且任務比較復雜,本文使用異步類實現恢復。AsyncTask是Android提供的輕量級異步類,對線程間通訊作包裝,后臺線程與UI線程可以進行簡易通訊。創建一個繼承AsyncTask的MyTask類完成恢復,可以實現異步操作,執行過程不影響UI線程,通過接口及時獲取進度,并將執行結果返給UI主線程。與一般handler相比較,其簡單快捷,過程可控,更加輕量,不阻塞主線程(UI線程)。AsnycTask作為封裝后的后臺任務方便Android開發。在AsnycTask使用過程中,通過表1方法進行重寫和使用。
恢復模塊主要步驟如下:
step1:將WIM文件中的鏡像信息提供給用戶,包括鏡像描述文件、鏡像號等信息,供用戶選擇。
step2:用戶選擇指定鏡像恢復。
step3:得到磁盤設備分區信息,并提供給用戶,包括分區大小、描述符等信息。
step4:用戶選擇恢復分區,如選擇符合要求則繼續,如果出現異常則提示用戶。
step5:提示用戶格式化恢復磁盤分區,用戶確認后將磁盤分區格式化。
step6:開始執行恢復功能。
step7:恢復功能完成,提示用戶是否重啟。
使用wimlib-imagex apply實現恢復功能,通過繼承異步類完成核心恢復任務。
3系統測試
3.1測試環境
測試環境如表2所示。
3.2測試結果
通過在win7、win8、win10三個系統中進行測試,恢復測試結果如表3所示。
針對上述3個Windows系統,在目標測試機上使用Windows恢復系統進行恢復。結果表明,Windows恢復系統能夠在此三個系統Windows系統上正常使用,并啟動正常。運行系統如圖3所示。
4結語
本文設計并實現的Windows恢復系統與傳統恢復工
具的不同之處在于它是基于andorid-x86的Android應用來實現恢復功能,通過雙系統啟動的方式完成系統恢復。其可與Windows系統隔離,因而Windows系統上的故障不影響恢復系統。同時,Android-x86系統可作為一個輔助操作系統,在占用較少資源的情況下完成恢復,不需要其它媒介便可以直接恢復,用戶使用較為方便。此外,恢復鏡像制作簡單,可以在網上下載恢復鏡像,通過SHA1碼進行分析,保證其完整性與可靠性。在Windows恢復系統中,目前主要針對整個磁盤分區進行恢復,后續研究可以指定目錄文件進行恢復,使得恢復系統的功能更加強大。
圖3開始恢復示意圖
參考文獻參考文獻:
[1]王強.Windows平臺下磁盤數據恢復技術的研究與實現[D].成都:四川師范大學,2008.
[2]周渝, 唯奕.大數據——企業運營中的新資本[J].信息與電腦, 2012(11):1921.
[3]文光斌.數據恢復技術的發展前景、技術層次及常用方法[J].網絡安全技術與應用, 2005(5):7476.
[4]LIANG Z H, LUO J Z, LIANG Z Q.System Recovery Testing of Hardware Firewall[J].Procedia Engineering,2011,15:45744578.
[5]李軍.計算機數據恢復技術應用探究[J].電子測試, 2014(16):7071.
[6]趙明.巧用FinalData恢復磁盤數據[J].Computer Knowledge and Technology,2010,6(17):48504851.
[7]SEY E.Tool review-WinHex[J].Digital Investigation, 2004, 1(2):114128.
[8]MILLER W.Inside the Windows Imaging Format[J].Technet Magazine, 2006(15):96102.
[9]RATHORE Y,AHIRWAR M K,PANDEY R.A Brief Study of Data Compression Algorithms[J].International Journal of Computer Science and Information Security,2013,11(10):86.
[10]THONGTANUNAM P,ANA E C C,YOSHIDA N, et al.Reviewer recommendation for peer review based on file path similarity:a case study of the android open source project[J].Technical Report of Ieice Kbse, 2013, 113:2529.
[11]HUEBNER E, BEM D, WEE C K.Data hiding in the NTFS file system[J].Digital Investigation, 2006, 3(4):211226.
責任編輯(責任編輯:陳福時)