File-Command
文件是如何辨識這個特定文件的?
我正在
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 個字節;lelong
並belong
分別以小端和大端順序表示 4 個字節。您可能想要呼叫
file
實用程序,而不是複制規則;它由 POSIX 指定,但它辨識的格式和輸出的描述不是。或者,您可以連結到libmagic
並呼叫magic_file
ormagic_buffer
函式。