二進位制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編輯器

任何檔案歸根結底都是一串位元組。Hex編輯器將這些內容逐位元組以十六進位制形式顯示出來,並允許在需要時直接改寫。很多格式的開頭幾個位元組都藏著表明真實格式的「魔數」,因此不必輕信副檔名,也能判斷檔案的真實型別。

本工具支援拖放檔案或直接輸入十六進位制來讀取內容,檢視、編輯、下載全部在瀏覽器內完成,內容不會發送到伺服器。不過對於較大的檔案,僅會處理前64KB,超出部分即使下載也不會被保留。

Hex編輯器的使用方法

  1. 讀取檔案 拖放檔案,或直接貼上十六進位制字串即可讀取,空格與換行會被自動忽略。
  2. 檢視起始位元組 對照偏移量0附近的內容與上方一覽表,即可判斷檔案的真實格式。
  3. 編輯位元組 點選任意十六進位制單元格,可將該位元組改寫為00~FF之間的數值,ASCII欄會同步更新。
  4. 下載編輯結果 將修改後的內容儲存為檔案。原始檔案不會被改動,因此可以放心嘗試各種實驗性修改。

用好本工具的小技巧

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

Hex編輯器的應用場景

識破偽裝副檔名的檔案

檢視起始位元組即可確認副檔名與實際格式是否一致,適用於檢查可疑附件。

排查檔案損壞的原因

透過位元組序列可判斷檔案頭是否缺失,或資料是否在中途被截斷,有助於評估修復的可能性。

學習檔案格式規範

對照規範文件與實際位元組序列閱讀,能更具體地理解檔案頭的結構。

製作用於測試的損壞資料

故意改寫部分位元組,可用來驗證程式在遇到異常檔案時的行為表現。

二進位制相關術語

位元組
以8位為一組的單位,在十六進位制中用00到FF兩位數表示。
魔數
位於檔案開頭、用於標識格式的固定位元組序列,也稱為檔案簽名。
偏移量
從檔案開頭起算的位元組位置,通常以十六進位制表示。
檔案頭
位於檔案開頭、彙總格式與大小等資訊的部分。
ASCII顯示
將每個位元組解釋為字元的顯示方式,有助於發現嵌入的文字內容。
位元組順序
多位元組數值的排列順序,不同格式中高位位元組可能在前或在後。

常見問題

可以。讀取檔案後,將其開頭位元組與上方"常見檔案簽名"一覽表對照即可。例如某副檔名為`.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),這是為了在以文本模式傳輸檔案時,檢測換行符是否因轉換而被破壞。它不僅僅是單純的識別符號,還兼具傳輸過程中的損壞檢測功能,這一點讓人感受到二進位制格式設計的深邃之處。