大多數現代的基于閃存的設備控制器利用加擾器模式來為他們寫入閃存的數據。該擾碼器通常是控制器制造商所獨有的,有時也是獨立的控制器型號。
只有在加擾模式已知(或可以確定)的情況下才能從以這種方式加擾的設備中恢復數據,因為加擾數據在沒有首先被去除加擾模式的情況下將不可用。
加擾器實現類似于基本加密,其中由控制器對數據進行異或(此處為異或)操作。這是在使用控制器的線性反饋移位寄存器寫入閃存之前發生的。
與真正的加密不同,加擾模式不是出于安全原因而設計的,因此易于識別,提取然后用于數據恢復。
我們應該首先確定我們的NAND芯片的結構,通過它我們可以輕松確定數據區域(可能是異或),備用區域標記和ECC代碼。之后我們肯定需要刪除制造商的備用區域標記和ECC,因為這些區域沒有進行異或,并且不需要通過我們的過程進行排除。有時備用區標記也是異或的,這種情況并不常見,但可能會發生。
可以在文章中找到使用VNR的NAND芯片的目的,識別和結構生成的解釋。
如果您已經花了一些時間處理案例并且無法確定您期望的通常的,可讀的數據結構,則可能是數據被加擾或加密。對于市場上可用的大多數設備,不支持或實施加密。
在實現XOR擾碼器的情況下,通?梢栽陂W存轉儲中找到模式。這些模式通常很容易識別,可以在文章中找到識別這些模式的指南。
要查看上面鏈接的“Xor鍵視覺識別”文章中顯示的可識別結果的類型,我們需要將位圖查看器設置為一頁的大。ㄈ绻J情況下未設置)。一旦我們完成了這個操作,我們就可以滾動NAND轉儲并嘗試找到一個模式,例如與上面鏈接的模式,以便開始我們的提取。
還有另一種瀏覽轉儲的方法,可以節省時間并防止手動設置密鑰的開始和結束偏移。我們可以通過將頁面大小設置為閃存的一個塊來實現這一點(這是我們之前記錄的值之一)。
VNR允許我們將十六進制編輯器設置為Page View,并以恰好一個塊大小的增量逐步執行轉儲。這也將有助于我們以后,因為十六進制編輯器也將只顯示一個塊,我們可以非常簡單地提取整個XOR鍵,然后也保存它。
通過在主VNR界面中選擇它,然后單擊工具欄中的轉儲查看器項,打開您想要處理的“Phy Image”。這將允許我們打開VNR的轉儲查看器顯示。在轉儲查看器的工具欄菜單中,您應確保選擇了十六進制視圖和位圖視圖。此外,單擊十六進制視圖并確保選中“頁面視圖”。
您現在應該有一個類似于以下內容的Window:
1.轉到位圖查看器選項卡
在左上角,您將看到一個標記為“頁面大小”的字段,其右側有一個圖標,由P和兩個綠色箭頭組成。單擊此圖標會將我們的位圖視圖設置為我們在NAND芯片配置中使用的頁面大小。
2.在Hex Viewer中,將頁面大小設置為我們之前提到的NAND芯片“塊大小”。
3.現在您可以通過兩種不同的方式取得進展,您可以:
- 使用滑塊和箭頭一次單步執行1個塊,直到找到您的鍵
- 使用位圖視圖右側的滾動條并嘗試以這種方式定位模式
當密鑰和體系結構未知時(與新的和/或不支持的設備一樣),沒有確切的科學來定位密鑰,但是有一些事情需要牢記。通常,設備的控制器利用閃存最開始的塊來存儲固件代碼。該區域可以包括關于閃存上的數據的邏輯布局,轉換器表和許多其他信息的信息。一次跳過這1個區塊可能非常耗時。通常,我們跳32個塊,如果沒有數據,我們跳到塊64,然后跳到128,依此類推。一旦我們找到了持久的數據區域,我們就可以恢復每次一個塊的步進,直到找到密鑰為止。
在下圖中我們很幸運,我們有兩個包含Xor鍵的連續塊,這在提取“干凈”鍵時非常有用。
這不應該被證明是一個太大的問題,因為塊大小完全可以被XOR鍵大小整除,所以我們仍然可以使用一個完整的塊作為我們的密鑰,只是密鑰將比它需要的大。 。
找到1個密鑰后,我們就遇到了問題。我們提取的塊有可能包含完整的不妥協的密鑰,但這是不可能的。
我們還有一些事情需要考慮:
- 密鑰可能包含已被數據破壞的區域,到目前為止,我們無法判斷密鑰是純XOR密鑰還是只是一個高密度區域濃度為0x00(零)或0xFF。
- 我們沒有考慮ECC,提取的密鑰很可能包含誤碼,我們也沒有考慮過這個問題。
- 仍然有可能(但不太可能)這是一個用不像0x00或0xFF那么簡單的模式編寫的區域。該模式可以在整個密鑰區域上重復相同的字節,或者可以重復2個字節或更多。
為了最有可能減輕上述問題,我們需要從轉儲的不同區域提取密鑰的三個副本。如果我們知道轉儲包含特定數據集,我們可以選擇三個連續的塊 - 如果我們不能確定,那么嘗試找到來自NAND上不同位置的三個塊總是更好。
找到鍵后,我們可以在十六進制編輯器中選擇整個塊(這可以通過單擊并拖動或使用Ctrl + A來完成)。在“轉儲查看器”選項卡中,使用“保存選定”將密鑰保存到案例文件夾,對第二個和第三個區域重復此過程,如下圖所示。
一旦我們有了3個區域,我們就可以開始清理密鑰了。無論ECC如何,都可以清除密鑰,因為即使在TLC內存上也會出現位錯誤的可能性,這些錯誤會影響與我們提取的其他兩個版本完全相同的位,這一點可以忽略不計,也就是說,這并非完全不可能。這發生了,所以要注意它。如果ECC類型在VNR中可用且可用,則理想的是在綠色塊上工作,這通過消除在我們提取的密鑰內的ECC錯誤的可能性來減少等式中的一個未知數。理想情況下,應盡可能避免ECC映射中的紅色塊。
現在我們有了XOR鍵的樣本,我們可以清理它們。通常,特別是如果我們通過VNR啟用了ECC,我們的密鑰已經非常干凈了,但是我們不能排除密鑰區域中存在的實際數據會破壞提取的密鑰。如果密鑰對我們來說是全新的,我們不能排除在模式下隱藏特定模式的數據 - 我們可以做的是最小化密鑰中存在誤碼或偶然字符的可能性,從而破壞提取的內容版。
為此,我們使用VNR的“比特驗證”功能。位驗證器接收輸入并比較它們。如果三個輸入中的兩個包含相同的數據而第三個輸入不一致,則位驗證器會忽略不一致的元素并與其他兩個元素一起使用。這個過程并非萬無一失,但在實踐中它非?煽,特別是與ECC結合使用時。
現在從VNR工作區打開提取的密鑰。使用“打開物理圖像”菜單項,您可以同時選擇所有三個,它們將被添加到VNR工作區。我們現在可以驗證它們。
要使用Bit Verificator,請執行以下操作:
A。將Bit Verificator“V”元素添加到VNR工作區
B.檢查元素數是否已設置為已提取的鍵的版本數
C.加入每個元素提取密鑰到Verificator
你應該留下以下內容:
在大多數情況下,Xor加擾器模式僅適用于閃存的數據區域,一些控制器也在備用區域上實現它,但這種情況不太常見。對于此示例,我們只需要從數據區域中刪除加擾器。我們將完全從提取的密鑰中刪除ECC和備用區域。由于我們已經定義了flash的結構,這個過程很簡單:
A.右鍵單擊具有已定義結構的轉儲,然后選擇“將結構復制到緩沖區”