/ g* Q9 K: X( D7 V
; n! v! n c1 I' r& Y3 E& B$ h7 g
沒錯,找到了!看起來 Feroceon2 號可以讀取緩存,并對這塊 64MB 的 DRAM 進行了地址映射。/ `3 S4 P9 @! ^1 Y' r
5 P( U" t. L% i
注入代碼" p& r+ S: d7 {: V5 C0 h
# R6 ]7 ], B x7 }/ F 當然了,如果我想要在緩存里修改數據,我可不能每次都完全掃描整個 64MB 的緩存:我需要知道緩存是如何工作的。為此,我需要進行反匯編并理解硬盤的固件,至少要明白緩存的函數。0 f9 F) \; l" `
$ n K0 p- ]3 P) Y 對固件進行反匯編,可不是個簡單的活。首先,代碼混合了 ARM 和 Thumb 指令,如果你沒有自動切換兩種指令的反匯編器就很令人抓狂了。而且,沒有那些能使反匯編更簡單的信息了:一般程序都被寫好了,當有東西出錯總會彈出類似「Couldn’t open logfile!」的信息。這些信息對于了解代碼功能有很大幫助。而這個固件,一條信息都沒有:你得自己看代碼來知道代碼在做什么。代碼庫好像有點老,而且有些時候反匯編的感覺就像給代碼加了很多特性,把所有事情都搞得更復雜。5 ]) ~7 ], W8 e: C/ M* E0 b
4 G8 Z: b+ z' x* E$ S
7 H. e) v! A# n
一勞永逸* ~ a3 L9 y) s) H
, d9 _+ k" k" o" U$ D3 y2 G 當然了,我可以將固件完全破解,但是每次硬盤啟動都需要用 JTAG 修改 RAM,這就得不償失了。我得讓它保持不變,也就是說,我要把我的修改存在某個地方,每次硬盤啟動都會帶上這段修改程序。$ L5 |; h! i g
1 B" n$ q% x+ p' [1 N1 R 我選的地方是閃存。我大概也可以放在磁盤本身的保留扇區上,但是如果我一旦弄錯的話,我就沒法恢復我的硬盤了。閃存芯片只是一個八個腳的標準件,所以我可以輕松地摘下來,刷掉閃存再裝回去。為此,我把它焊下來然后放到萬用板上,這樣我就可以在編程器和硬盤之間輕松切換了。4 l6 |& B5 O: {! e0 l0 d
% v+ |0 E4 B6 y; x (, 下載次數: 37)
上傳
點擊文件名下載附件
下載積分: 威望 -10 點
9 N s3 D% [. E6 [1 H1 B+ [- ~# }- H+ q1 V' @" F. q
現在,應該在閃存里寫什么呢?很幸運的是,芯片中存儲的格式已經找到了:它包含了多塊數據,還有一個表在最開始描述了這些數據。這個表描述了閃存中代碼塊的位置,如何壓縮的(如果壓縮了的話),代碼塊應該在放在 RAM 的什么位置,而且在最后的地址中是一個執行指針,標記了啟動器應該跳到什么地方去執行程序。7 ?: Q5 Q! e. W# Y1 c
$ p, S5 G4 y3 _" \1 G 不幸的是,我不能修改閃存中的代碼;我想加鉤子的地方的數據被某種不知道的壓縮算法壓縮了,我就不能修改了。然而我能做的是增加一個額外的代碼塊,修改執行地址這樣這個代碼塊就可以在其他之前執行了。這樣一來就簡單多了。當我的代碼塊執行的時候,我就可以在已經解壓的代碼中加入我的鉤子了。) n' e+ p. R: t5 i. c6 i3 ]