二進位制Hex編輯器|以十六進位制檢視和編輯檔案

拖放檔案即可以逐位元組的十六進位制形式(hex dump)檢視其內容。可通過檔案頭的魔數(magic bytes)確認檔案的真實型別,直接編輯位元組並下載。檔案不會上傳到伺服器。

常見檔案簽名(魔數)一覽

格式 起始位元組(十六進位制) 偏移量 備註
PNG 89 50 4E 47 0D 0A 1A 0A 0 影像檔案。若8個位元組全部一致,幾乎可以確定為PNG
JPEG FF D8 FF 0 影像檔案。第4位元組因JFIF/Exif等變體而不同
GIF 47 49 46 38 39 61 / 47 49 46 38 37 61 0 對應ASCII字串"GIF89a"或"GIF87a"
PDF 25 50 44 46 2D 0 對應ASCII字串"%PDF-",其後緊跟版本號
ZIP / docx / xlsx / jar 50 4B 03 04 0 ZIP格式。Office Open XML及多種壓縮、歸檔格式內部均基於ZIP
Windows執行檔(EXE/DLL) 4D 5A 0 對應ASCII字串"MZ",是PE格式中遺留的MS-DOS執行檔頭標識
ELF執行檔 7F 45 4C 46 0 Linux等系統使用的執行檔、共享庫格式

使用Hex編輯器的小技巧

  • 想識破被篡改副檔名的檔案真實身份時,可將檔案開頭的若干位元組(魔數)與上方一覽表對照。副檔名只是自我宣告,而魔數源自檔案格式本身,更難以偽裝。
  • 在直接輸入十六進位制模式下,可以直接貼上從其他工具複製的位元組序列(無論是空格分隔還是換行分隔)並讀取。
  • 編輯過程中如果誤點了單元格,可按Esc鍵取消該單元格的編輯,位元組不會被改動。
  • 在除錯二進位制協議時,將預期的位元組序列與實際收發的位元組序列在本工具中並排比較,能更容易定位不一致之處。

常見問題

可以。讀取檔案後,將其開頭位元組與上方"常見檔案簽名"一覽表對照即可。例如某副檔名為`.txt`,但開頭卻是FF D8 FF,那麼它很可能實際上是一個JPEG影像。

若一次性將數百MB乃至數GB的整個檔案以十六進位制形式渲染,會因產生海量DOM元素而導致瀏覽器卡頓甚至無響應。將顯示範圍限制在前64KB,可以在安全流暢的前提下滿足檢視檔案頭資訊等主要使用場景。

如果顯示內容被截斷為前64KB,則下載的檔案也僅包含這64KB(之後的資料不會被保留)。對於64KB以下的檔案,除您編輯的位元組外,其餘部分會與原檔案完全一致地下載。

不會。檔案的讀取、顯示、編輯、下載均完全在瀏覽器內的JavaScript中完成,檔案內容不會被發送到任何外部伺服器。
ツールくん

閒話 ― 為何檔案的真實身份取決於位元組而非副檔名

Windows的副檔名,本質上只是告訴作業系統"該用哪個應用程式開啟此檔案"的提示資訊,與檔案的實際內容相互獨立。因此把`.txt`改名為`.jpg`並不會讓它變成影像,反之刪除真正影像檔案的副檔名,資料本身仍然是影像。正因為副檔名只是"自我宣告",將執行檔偽裝成圖片或文件的惡意軟體手法由來已久。

為應對這一點,多數檔案格式在開頭幾個位元組中嵌入了固定的識別符號(魔數,magic bytes)。例如PNG規定開頭必須是`89 50 4E 47 0D 0A 1A 0A`這8個位元組,因此作業系統或應用程式只有在實際讀取檔案內容後,才能真正確認"這是否確實是PNG"。類Unix系統的`file`命令以及瀏覽器的MIME型別判定,主要依據也是這種魔數比對,而非副檔名。

魔數的設計中也蘊含著歷史性的巧思。例如PNG的8個位元組中特意包含了換行符(0D 0A),這是為了在以文本模式傳輸檔案時,檢測換行符是否因轉換而被破壞。它不僅僅是單純的識別符號,還兼具傳輸過程中的損壞檢測功能,這一點讓人感受到二進位制格式設計的深邃之處。