File-Command

文件是如何辨識這個特定文件的?

  • November 21, 2015

我正在file針對 wallet.dat 文件(比特幣保存其私鑰的文件)執行,即使似乎沒有任何可辨識的標頭或字元串,file仍然可以判斷它是 Berkley DB 文件,即使我將其減少到 16 個字節。

我知道該文件正在應用某種規則或搜尋某種序列來辨識它。我想知道它在這裡應用的規則是什麼,以便我可以在自己的程序中複製它。

獲取文件命令的來源。大多數(如果不是全部的話)開源 unice 都使用這個。該file命令隨數據庫一起提供,以它描述的幻數magic命名。(此數據庫也安裝在您的實時系統上,但以編譯的形式。)查找包含您看到的描述文本的文件:

grep 'Berkeley DB' magic/Magdir/*

magic手冊頁描述了文件的格式。“Berkeley DB”的觸發線是

0       long    0x00061561      Berkeley DB
0       belong  0x00061561      Berkeley DB
12      long    0x00061561      Berkeley DB
12      belong  0x00061561      Berkeley DB
12      lelong  0x00061561      Berkeley DB
12      long    0x00053162      Berkeley DB
12      belong  0x00053162      Berkeley DB
12      lelong  0x00053162      Berkeley DB
12      long    0x00042253      Berkeley DB
12      belong  0x00042253      Berkeley DB
12      lelong  0x00042253      Berkeley DB
12      long    0x00040988      Berkeley DB
12      belong  0x00040988      Berkeley DB 
12      lelong  0x00040988      Berkeley DB

第一列指定要找到某個字節序列的偏移量。第三列包含字節序列。第二列描述了字節序列的類型:long表示平台字節序中的 4 個字節lelongbelong分別以小端和大端順序表示 4 個字節。

您可能想要呼叫file實用程序,而不是複制規則;它由 POSIX 指定,但它辨識的格式和輸出的描述不是。或者,您可以連結到libmagic並呼叫magic_fileormagic_buffer函式。

引用自:https://unix.stackexchange.com/questions/244502