檔案型別檢測器

檔案的副檔名只是一個標籤 —— 把 virus.exe 改名為 photo.jpg,檔案內部不會有任何改變。本頁讀取每個上傳檔案的開頭位元組,與 60 多個真實的魔數簽名比對:影像、文件、壓縮包、音訊/影片、字型、執行檔、資料庫和金鑰檔案。你會得到檢測出的型別、MIME 型別、該格式常用的副檔名、副檔名與內容矛盾時的警告,以及格式自帶的後設資料(影像尺寸、PDF 版本、MP4 brand)。所有檢查都在瀏覽器本地完成。
把檔案拖到這裡,或點選選擇檔案
可以只選一個也可以選多個。每個檔案只讀取開頭 512 位元組;檔案絕不會離開這臺電腦。
未選擇檔案。
選擇檔案並點選“檢測型別”後,檢測結果表會顯示在這裡。
“匹配”的含義:一致 —— 副檔名與檢測到的格式相符;不匹配 —— 內容與副檔名聲稱的格式不同(被改名的檔案,或更糟的情況);“無簽名” —— 開頭位元組不匹配任何已知簽名,這對純文本、CSV 和大多數沒有檔案頭的普通資料格式來說很正常。隱私:檔案用瀏覽器自帶的 FileReader 讀取;不會上傳任何內容。

什麼是檔案簽名?

幾乎每種二進位制格式都以一段固定的位元組序列開頭 —— 即魔數 —— 程式靠它識別自己的檔案,而不必信任檔名。PNG 總是以八個位元組 89 50 4E 47 0D 0A 1A 0A(“\x89PNG\r\n\x1a\n”)開頭,PDF 以 ASCII 文本 %PDF 開頭,ZIP 以 PK\x03\x04 開頭(PK 是該格式設計者 Phil Katz 的首字母縮寫)。作業系統大多忽略這些位元組而只看副檔名 —— 這正是改名後的檔案“根本打不開”的原因,也是安全工具要嗅探內容的原因。

著名的開頭位元組

位元組格式說明
89 50 4E 47 0D 0A 1A 0APNG 影像\r\n 用於防止換行符被破壞
FF D8 FFJPEG 影像每個 JPEG 幀都以 SOI 標記開頭
25 50 44 46 2DPDF 文件“%PDF-1.7” —— 後面跟著版本號
50 4B 03 04ZIP 壓縮包docx/xlsx/odt/epub 都是披著副檔名外衣的 ZIP
D0 CF 11 E0舊版 Officedoc/xls/ppt/msi —— OLE2 複合檔案
4D 5AWindows EXE“MZ”,來自微軟的 Mark Zbikowski
7F 45 4C 46Linux ELF\x7fELF —— 程式與共享庫
1A 45 DF A3Matroska/WebMEBML 容器開頭
75 73 74 61 72 偏移 257 處TAR 壓縮包簽名藏在檔案頭深處

檢測器如何判定

每個檔案的開頭 512 位元組會按特異度順序與簽名表比對:容器 brand(RIFF…WAVE 與 RIFF…AVI、RIFF…WEBP 之分,偏移 8 處的 ISO brand box)先於其通用容器檢查,基於 ZIP 的格式(EPUB、ODF、OOXML)先於普通 ZIP。格式自帶自描述後設資料時,本頁還會再挖一層:PNG/GIF/BMP/JPEG/WebP 的尺寸從頭部件段讀取,PDF 版本取自第 5 位元組,MP4 brand 與 Java class 版本取自各自的標準偏移。什麼都匹配不上的檔案會先經過文本啟發式檢查(BOM、<?xml、<html、shebang、可列印字元比例),然後才被判定為未知。

常見誤解

“它說是 ZIP 但文件是 .docx” —— 這是對的:.docx 就是一個首條目為 [Content_Types].xml 的 ZIP 壓縮包;檢測器能識別這種情況並明確報告為 Office Open XML。“它說無簽名但文件能正常打開” —— CSV、大多數源代碼和無數科學數據格式根本沒有魔數字節;“無簽名”不是指控。“它能告訴我文件是否安全嗎?” —— 不能。內容嗅探只說明文件是什麼,不說明它做什麼;EXE 無論是安裝程序還是惡意軟件,都是 EXE。

常見問題

為什麼只讀 512 位元組? —— 所有受支援的簽名都在前 512 位元組內(最深的是偏移 257 處 TAR 的 ustar);讀更多隻會白白拖慢大批次檢測。
能檢測影片時長嗎? —— 不能,只能檢測容器及其 brand;時長需要解析整個索引,那是播放器的工作。
能一次檢測多個檔案嗎? —— 可以,一次拖入整批檔案即可;每行獨立檢測。
相關頁面:反方向(副檔名 → MIME 型別)請用MIME 型別查詢;要對同樣的檔案計算雜湊請用批次檔案雜湊與清單驗證器。