檔案型別檢測器
檔案的副檔名只是一個標籤 —— 把 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 0A | PNG 影像 | \r\n 用於防止換行符被破壞 |
FF D8 FF | JPEG 影像 | 每個 JPEG 幀都以 SOI 標記開頭 |
25 50 44 46 2D | PDF 文件 | “%PDF-1.7” —— 後面跟著版本號 |
50 4B 03 04 | ZIP 壓縮包 | docx/xlsx/odt/epub 都是披著副檔名外衣的 ZIP |
D0 CF 11 E0 | 舊版 Office | doc/xls/ppt/msi —— OLE2 複合檔案 |
4D 5A | Windows EXE | “MZ”,來自微軟的 Mark Zbikowski |
7F 45 4C 46 | Linux ELF | \x7fELF —— 程式與共享庫 |
1A 45 DF A3 | Matroska/WebM | EBML 容器開頭 |
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 型別查詢;要對同樣的檔案計算雜湊請用批次檔案雜湊與清單驗證器。
自測