如何偵測損壞的檔案?

如何偵測損壞的檔案?

我有很多文件,MP4、Mp3、Exe 等,在備份期間由於某種原因沒有正確複製到硬碟,我用十六進制編輯器檢查了文件內容,發現許多損壞的文件都填充了 00應該有數據的區域,其中一些區域有隨機數據,而應該有功能數據。至少對於 00 填充的文件,應該有一種方法來搜尋所有這些文件並找到它們。我已經嘗試過 Windows 搜索工具(Windows 8.1)並啟用了文件內容搜索,但是,由於無法在 Windows 搜索中搜索十六進制,所以我搜索了代表 00 Hex 的 ASCII ..... 句點。我從十六進制編輯器複製了正確的...並將其貼上到搜尋中,但它不起作用。

我想找到所有具有大量 00 十六進制填充的文件,但不知道如何執行此操作,任何提示將不勝感激。謝謝。

答案1

二進制檢視器程式有一個功能,可讓您在給定目錄中搜尋十六進位序列和二進位模式(或您可以指定整台機器的根目錄)。

另一種可能的解決方案是以程式設計方式掃描所有文件,並挑選出「00」值數量高於預期的文件(即「00」平均數量較多的文件)。為此,您需要使用程式語言。因為我是統計學家,所以我喜歡R程式語言,因為:

  1. 免費;和
  2. 它相對容易學習。

在 中R,您可以使用以下程式碼檢查檔案的「十六進位」值(我假設您正在查看此處的 1 位元組十六進位)R

install.packages("DescTools")
library(DescTools)
myBinary="D:/temp/2.jpg"

myhex = readRaw(myBinary)
#View first 20 entries
head(myhex$fileRaw, n=20)
 ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00

現在您可以找到「00」條目的平均數量:

#Find the mean number of times a "00" entry appears in this file
mean(myhex$fileRaw=="00")
 0.008298835

您需要做的就是在此程式碼周圍放置一個簡單的循環結構,以循環遍歷目錄中的所有檔案並輸出「00」條目的平均數量。您可以變得更加複雜,並通過一系列運行該演算法來“訓練”最佳樸素平均截止點已知的好的(即未損壞的)檔案並計算其中檔案中「00」條目的平均平均值(即平均值的平均值)。您可能可以圍繞此計算一個典型的置信區間,並可能使用置信區間的上端作為截止點來輸入您的程式以搜尋以下文件未知腐敗。這將幫助你剔除那些腐敗分子。

相關內容