欧美午夜精品免费观看_中文字幕人妻无码视频1页_免费精品不卡在线播放_在线女同免费观看网站_“内射”的搜索结果_日韩欧美亚洲每日更新在线观看_森川安娜无码视频播放_无码av毛片一区二区

  • WAP手機(jī)版 加入收藏  設(shè)為首頁
希捷硬盤數(shù)據(jù)恢復(fù)

希捷硬盤固件讀取測試

時間:2018/7/7 12:38:36   作者:成都數(shù)據(jù)恢復(fù)中心   來源:本站原創(chuàng)   閱讀:3217   評論:0
內(nèi)容摘要:鑒于最近圍繞惡意軟件的宣傳可以在硬盤固件中保持持久性,尋求更好地了解硬盤內(nèi)部實(shí)際發(fā)生的事情似乎是合理的-特別是對固件的理解。標(biāo)準(zhǔn)硬盤驅(qū)動器的硬件組件眾所周知且易于理解。一目了然,驅(qū)動器的“內(nèi)臟”由圓形鐵質(zhì)盤片組成,數(shù)據(jù)被寫入和讀取。在盤片的中心是主軸,主軸由主軸電機(jī)驅(qū)動,主軸電機(jī)旋轉(zhuǎn)讀寫臂下方的盤片。浮動在板上方,包含...

鑒于最近圍繞惡意軟件的宣傳可以在硬盤固件中保持持久性,尋求更好地了解硬盤內(nèi)部實(shí)際發(fā)生的事情似乎是合理的 - 特別是對固件的理解。

標(biāo)準(zhǔn)硬盤驅(qū)動器的硬件組件眾所周知且易于理解。一目了然,驅(qū)動器的“內(nèi)臟”由圓形鐵質(zhì)盤片組成,數(shù)據(jù)被寫入和讀取。在盤片的中心是主軸,主軸由主軸電機(jī)驅(qū)動,主軸電機(jī)旋轉(zhuǎn)讀寫臂下方的盤片。浮動在板上方,包含微小讀寫頭的讀寫臂由致動器控制,致動器將臂移動到盤片的表面上。從驅(qū)動器“讀取”的數(shù)據(jù)從盤片,通過臂,通過柔性帶狀連接器傳播到印刷電路板(PCB)。

PCB是驅(qū)動器主控制器的所在地,通常連接到HDD外殼的外殼,使其非常容易接近。主控制器實(shí)現(xiàn)計(jì)算機(jī)SATA總線和盤頭之間的位置轉(zhuǎn)換和傳輸協(xié)議。它還通過控制前面提到的驅(qū)動子系統(tǒng)來提供整體磁盤功能。上電時,主控制器從其內(nèi)部非易失性存儲器或外部存儲器芯片執(zhí)行固件。在磁盤初始化過程期間,控制器還可以從HDD的盤片上的服務(wù)位置讀取附加代碼 - 傳統(tǒng)方法無法訪問的位置。HDD所做的所有重要且有趣的,可能未記錄的內(nèi)容都被編程到主控制器固件中。

分散在Web上的大多數(shù)信息與修復(fù)或更換故障HDD的控制器板有關(guān)。很少提及固件重新刷新或檢索。通過ATA接口排除專有更新文件格式和模糊的更新協(xié)議,該過程可歸結(jié)為從外部存儲器芯片讀取固件或掛接JTAG接口并操縱主HDD控制器以通過JTAG端口移位其存儲器數(shù)據(jù)(有用)如果固件位于微控制器內(nèi)部的非易失性存儲器中)。關(guān)于它的棘手問題在于,盡管大多數(shù)主控制器都是由著名的芯片制造商(如ST,LSI,三星和Marvell)制造,但要說HDD微控制器的數(shù)據(jù)表不容易采購將是輕描淡寫的。

在任何情況下,缺少適當(dāng)?shù)奈臋n都很難確定JTAG接口引腳。有許多技術(shù)可以讓人們根據(jù)PCB的布局或標(biāo)記來推斷這些引腳的功能(即引腳排列),但這是一個艱苦的過程,可能導(dǎo)致電路板本身的破壞。看看建立HDD控制器低級接口的其他可能方法,似乎有些硬盤板有許多專用于某種服務(wù)串口的引腳。引腳數(shù)量及其確切功能取決于制造商,但是當(dāng)我開始調(diào)查時,它似乎是在芯片內(nèi)部進(jìn)行對等的最簡單方法。

作為一個實(shí)驗(yàn),我決定連接硬盤串行鏈接,看看我是否可以從中獲得任何有用的東西。我有一個相當(dāng)古老的硬盤驅(qū)動器,可用于實(shí)驗(yàn)。從圖1中可以看出,其控制器板上有許多熟悉的連接器,例如用于SATA電源和SATA數(shù)據(jù)的連接器,但也有一個跳線塊。兩個跳線塊引腳用于配置驅(qū)動器的帶寬。其中一個引腳接地(GND),另外兩個很可能是我們正在尋找的 - 串行發(fā)送和接收(Tx和Rx)接口。

希捷硬盤固件讀取測試

圖1帶控制器板的HDD磁盤模塊

仔細(xì)觀察PCB確認(rèn)了我們的觀察結(jié)果:標(biāo)記為T1的跡線之一需要短接到相鄰接地以實(shí)現(xiàn)不同的HDD帶寬。到目前為止,剩下的最右邊的針腳沒有記錄。

希捷硬盤固件讀取測試

圖2控制器板的組件側(cè)

查看電路板的組件(圖2)和底層(圖3),確認(rèn)引腳已連接并布線在主控制器芯片下的某處。

希捷硬盤固件讀取測試

圖3控制器板的底部

因此,我們假設(shè)Tx,Rx和接地(GND)引腳輸出并將控制器連接到串行終端程序。為此,我們需要一個電壓電平(3.3v)和協(xié)議轉(zhuǎn)換器(RS232到USB)。有很多選擇要做,所有這些都同樣有效。我有一個基于FTDI FT232RL的電路板,所以我用它作為PC和HDD控制器板之間的橋梁。我還制作了一個簡易連接器,用于將HDD串口連接到FTDI板; 最后的整個設(shè)置如圖4所示。

希捷硬盤固件讀取測試

圖4簡易連接器和連接到HDD控制器板的USB轉(zhuǎn)COM接口板

將FTDI板連接到PC并安裝FTDI驅(qū)動程序后,它將充當(dāng)COM端口,并可通過任何串行終端程序以編程方式連接。我使用了Termite,因?yàn)樗芎唵尾⑶铱梢栽诒銛y模式下運(yùn)行(也就是說,它不必安裝)。由于我對放在盤片上的信息不感興趣,為了方便我將它們從硬盤盒中拆卸下來。

第一次嘗試將所有接線連接起來并將電源連接到控制器板都沒有產(chǎn)生任何結(jié)果。有很多事情可能會出錯。這些可能包括損壞的控制器板本身,電源不足或串行連接錯誤......但大多數(shù)情況下問題是板上或控制器上的Tx和Rx線交換。FTDI板的Tx 必須連接到HDD控制器的Rx,反之亦然。有時即使引腳被標(biāo)記,它們也會在預(yù)期另一個終點(diǎn)時被標(biāo)記,因此標(biāo)簽并不總是反映標(biāo)記線上信號的真實(shí)性質(zhì)。在硬盤驅(qū)動器控制器板上電時,在終端上交換了這個:

希捷硬盤固件讀取測試

圖5以57600 bps連接的終端程序

傳輸似乎是亂碼,雖然它在電源周期上足夠重復(fù),以假設(shè)它應(yīng)該有一些意義。傳輸不可讀的原因有多種。它可能是原始二進(jìn)制數(shù)據(jù),但也有許多事情我們可能會嘗試確認(rèn)為其他潛在問題。首先是RS232協(xié)議設(shè)置。我們進(jìn)行操作時應(yīng)該擔(dān)心的最重要的參數(shù)是波特率,數(shù)據(jù)位數(shù),停止位數(shù),奇偶校驗(yàn)和流量控制,我已在圖6中指出。

希捷硬盤固件讀取測試 

圖6終端程序連接設(shè)置

假設(shè)我們獲得一致的信息,即使數(shù)據(jù),停止,奇偶校驗(yàn)和流量控制按照它們應(yīng)該的方式設(shè)置,也是有點(diǎn)安全的。但情況并非總是如此,如果使用波特率播放不會導(dǎo)致任何結(jié)果,我們需要重新審視這些參數(shù)。

所以我將波特率更改為115200.結(jié)果如圖7所示。

希捷硬盤固件讀取測試

圖7以115200 bps連接的終端程序

我完全失去了信息。這意味著完全失去同步,并表明我們的操作方式超出了預(yù)期的協(xié)議波特率。看起來我需要以較慢的速度來看它是否有任何區(qū)別。實(shí)際上,最初將波特率降至38400,然后降至14400,逐漸增加了接收數(shù)據(jù)的復(fù)雜性,如圖8所示。

希捷硬盤固件讀取測試

圖8以14400 bps連接的終端程序

最后,在9600 bps時有8位數(shù)據(jù),1個停止位,沒有奇偶校驗(yàn),我收到了確認(rèn)讀取,如圖9所示。

希捷硬盤固件讀取測試

圖9以9600 bps連接的終端程序

我得到了提示!我正在連接HDD控制器內(nèi)的終端程序。當(dāng)然沒有手冊或幫助打印的暗示,所以為了獲得一系列可接受的命令,我開始采用傳統(tǒng)的“試錯法”方式。我很快就發(fā)現(xiàn)大多數(shù)時候命令都只包含一個字母和一些參數(shù)。例如,a被拒絕,而另一方面b將在沒有給出任何結(jié)果的情況下解析:

希捷硬盤固件讀取測試

圖10 HDD終端的F級別 

它促使我認(rèn)為它可能需要b的一些參數(shù)。當(dāng)然b0和b1緊隨其后:

希捷硬盤固件讀取測試

圖11 b1命令的輸出

這表明b1產(chǎn)生了一些信息,而其他命令可能未實(shí)現(xiàn)或需要更多參數(shù)。看一下b1返回的數(shù)字列表,它們似乎非常熟悉。實(shí)際上,如果我們查看COM接口的標(biāo)準(zhǔn)速度值 - 9600,19200,38400,57600,115200等 - 值得注意的是,最高有效數(shù)字與b1給出的列表中的數(shù)字相似。是否有可能b命令以某種方式操縱HDD終端程序的串行通信速度?如何通過論證?它是由列表中的索引嗎?我嘗試了b2,它沒有給我任何通信速度的變化。我試過b0115它放棄了連接。我將終端程序的速度更改為115200并嘗試再次連接。連接成功,我能夠以更高的速率與HDD終端程序通信,如圖11(上圖)所示。那很整潔!

繼續(xù)以類似的方式,我設(shè)法發(fā)現(xiàn)了一些其他已接受的命令字符,我在下面的圖12中列出了這些字符。

希捷硬盤固件讀取測試

圖12 F級可能的HDD終端命令列表

我在終端程序的F級找到的最有趣的命令是b,d,+, -和=。它們似乎與內(nèi)存操作例程有關(guān)。例如,b和d列出了內(nèi)存塊。兩個命令都接受參數(shù); 例如,b按200h大小塊列出內(nèi)存,參數(shù)反映塊編號,因此b2將給出0x400到0x600范圍內(nèi)的內(nèi)存塊。另一方面,命令d的形式為d <最高有效地址字節(jié)> <低地址字>。值得注意的是,這些命令指的是同一地址的不同存儲塊,如圖13所示。

希捷硬盤固件讀取測試

圖13 b和d命令顯示的內(nèi)存塊

+“, -和=似乎與字節(jié)和字地址操作有關(guān)。例如,以下命令顯示指定位置的內(nèi)存。

希捷硬盤固件讀取測試

圖14使用+, -和=命令進(jìn)行內(nèi)存操作

存儲器也可能被改變。這需要更多的研究; 到目前為止,我還沒有設(shè)法在命令字符串的參數(shù)部分找到一個分隔符,它允許我指定要寫入的數(shù)據(jù)。快速瀏覽一下串行接口,可以看出有多種方法可以訪問硬盤驅(qū)動器控制器的內(nèi)存以及(很可能)更改它。界面也非常不方便和簡陋; 它可以自動進(jìn)行數(shù)據(jù)提取,例如使用Python及其串行接口庫。該b命令呈現(xiàn)的格式如下信息:

希捷硬盤固件讀取測試

圖15 b命令的控制臺輸出

使用Python和PySerial我試圖提取并將此內(nèi)存表示轉(zhuǎn)換為二進(jìn)制文件。在這個過程中,有一些事情需要考慮。首先,我們需要通過COM接口初始化并與控制器板建立連接,如圖16所示。

希捷硬盤固件讀取測試

圖16 Python中的串行端口初始化示例

請注意,端口變量需要設(shè)置為特定于電路板所連接系統(tǒng)的COM端口。就我而言,它是COM14。

建立連接后,我們需要發(fā)出b命令并從板的內(nèi)存中提取格式化信息,如圖17所示。

希捷硬盤固件讀取測試

圖17 Python中的串行端口通信示例

輸入變量首先設(shè)置為b,然后后續(xù)讀取只返回回車符\ r。在循環(huán)中處理數(shù)據(jù)的提取。一旦讀數(shù)結(jié)束,'out'變量將填充來自電路板內(nèi)存的格式化信息。為了使它有用,我們需要解析并將其轉(zhuǎn)換為二進(jìn)制文件。

希捷硬盤固件讀取測試

圖18終端程序的b命令輸出的部分

看圖18,這意味著擺脫'Addr'標(biāo)題(區(qū)域'A')和實(shí)際地址(區(qū)域'B'),連接數(shù)據(jù)(區(qū)域'C'),將其從ASCII十六進(jìn)制轉(zhuǎn)換為原始二進(jìn)制表示,并最終將其寫入文件。這可以通過Python中的幾行代碼以及它的正則表達(dá)式庫的幫助來實(shí)現(xiàn)。幸運(yùn)的是,數(shù)據(jù)塊的格式與地址和地址頭不同,可以通過正則表達(dá)式進(jìn)行過濾,例如[0-9A-F] {8}。正則表達(dá)式獲取一個8位十六進(jìn)制數(shù)字并忽略所有其余數(shù)字。圖19中顯示的Python代碼枚舉了數(shù)據(jù)塊中8位十六進(jìn)制數(shù)的所有實(shí)例,并將它們存儲在raw_bytes_concat變量中。

希捷硬盤固件讀取測試

圖19 Python中固件十六進(jìn)制代碼的正則表達(dá)式過濾器

使用binascii庫處理轉(zhuǎn)換,如圖20所示。

希捷硬盤固件讀取測試

圖20 Python中的ASCII十六進(jìn)制到二進(jìn)制轉(zhuǎn)換

轉(zhuǎn)換數(shù)據(jù)后,它將寫入hexfile2.bin文件。一目了然,提取的文件包含一些有趣的字符串,例如:

“SFlash Unsupported”,“BootAdaptives”,“RsvTrackDefLst”,“AppCode”,“Chksum Err”,“無效地址”,“未知扇區(qū)”,“無效條目”,“SysSecErr代碼”,“前置放大器ID”,“NIGHTHAWKPLUS” ,'旋轉(zhuǎn)不穩(wěn)定','旋轉(zhuǎn)恢復(fù)','Parm Range Err','命令無效 - 未檢測到有效證書代碼','命令被拒絕'

使用ARMB處理器選擇在IDA下加載二進(jìn)制文件為我們提供了可讀的代碼塊,如圖21所示。

希捷硬盤固件讀取測試

圖21 IDA中反匯編的ARMB(Big Endian)代碼(單擊在新窗口中打開)

看起來我們可能已經(jīng)觸及了負(fù)責(zé)終端程序級別F的磁盤嵌入式代碼部分。此代碼還將其余固件從串行閃存復(fù)制到RAM并執(zhí)行它。來自串行閃存ROM的初始固件代碼繼續(xù)從HDD上的預(yù)定義扇區(qū)加載固件。所有這些序列和位置都特定于串行閃存和磁盤本身的固件版本。

要更全面地了解HDD固件,必須在控制器和連接的盤片模塊進(jìn)行分析。 


標(biāo)簽:硬盤 固件 讀取 測試 
相關(guān)評論
不良信息舉報(bào)中心成都網(wǎng)警網(wǎng)警110報(bào)警服務(wù)AAA級互聯(lián)網(wǎng)行業(yè)信用360網(wǎng)站安全檢測

數(shù)據(jù)恢復(fù)QQ交流群:378664983    站長QQ:958754010


蜀ICP備14015947號-2