二進位制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" |
| 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編輯器的使用方法
- 讀取檔案 拖放檔案,或直接貼上十六進位制字串即可讀取,空格與換行會被自動忽略。
- 檢視起始位元組 對照偏移量0附近的內容與上方一覽表,即可判斷檔案的真實格式。
- 編輯位元組 點選任意十六進位制單元格,可將該位元組改寫為00~FF之間的數值,ASCII欄會同步更新。
- 下載編輯結果 將修改後的內容儲存為檔案。原始檔案不會被改動,因此可以放心嘗試各種實驗性修改。
用好本工具的小技巧
- 想識破被篡改副檔名的檔案真實身份時,可將檔案開頭的若干位元組(魔數)與上方一覽表對照。副檔名只是自我宣告,而魔數源自檔案格式本身,更難以偽裝。
- 在直接輸入十六進位制模式下,可以直接貼上從其他工具複製的位元組序列(無論是空格分隔還是換行分隔)並讀取。
- 編輯過程中如果誤點了單元格,可按Esc鍵取消該單元格的編輯,位元組不會被改動。
- 在除錯二進位制協議時,將預期的位元組序列與實際收發的位元組序列在本工具中並排比較,能更容易定位不一致之處。
Hex編輯器的應用場景
識破偽裝副檔名的檔案
檢視起始位元組即可確認副檔名與實際格式是否一致,適用於檢查可疑附件。
排查檔案損壞的原因
透過位元組序列可判斷檔案頭是否缺失,或資料是否在中途被截斷,有助於評估修復的可能性。
學習檔案格式規範
對照規範文件與實際位元組序列閱讀,能更具體地理解檔案頭的結構。
製作用於測試的損壞資料
故意改寫部分位元組,可用來驗證程式在遇到異常檔案時的行為表現。
二進位制相關術語
- 位元組
- 以8位為一組的單位,在十六進位制中用00到FF兩位數表示。
- 魔數
- 位於檔案開頭、用於標識格式的固定位元組序列,也稱為檔案簽名。
- 偏移量
- 從檔案開頭起算的位元組位置,通常以十六進位制表示。
- 檔案頭
- 位於檔案開頭、彙總格式與大小等資訊的部分。
- ASCII顯示
- 將每個位元組解釋為字元的顯示方式,有助於發現嵌入的文字內容。
- 位元組順序
- 多位元組數值的排列順序,不同格式中高位位元組可能在前或在後。
常見問題
FF D8 FF,那麼它很可能實際上是一個JPEG影像。
閒話 ― 為何檔案的真實身份取決於位元組而非副檔名
Windows的副檔名,本質上只是告訴作業系統"該用哪個應用程式開啟此檔案"的提示資訊,與檔案的實際內容相互獨立。因此把`.txt`改名為`.jpg`並不會讓它變成影像,反之刪除真正影像檔案的副檔名,資料本身仍然是影像。正因為副檔名只是"自我宣告",將執行檔偽裝成圖片或文件的惡意軟體手法由來已久。
為應對這一點,多數檔案格式在開頭幾個位元組中嵌入了固定的識別符號(魔數,magic bytes)。例如PNG規定開頭必須是`89 50 4E 47 0D 0A 1A 0A`這8個位元組,因此作業系統或應用程式只有在實際讀取檔案內容後,才能真正確認"這是否確實是PNG"。類Unix系統的`file`命令以及瀏覽器的MIME型別判定,主要依據也是這種魔數比對,而非副檔名。
魔數的設計中也蘊含著歷史性的巧思。例如PNG的8個位元組中特意包含了換行符(0D 0A),這是為了在以文本模式傳輸檔案時,檢測換行符是否因轉換而被破壞。它不僅僅是單純的識別符號,還兼具傳輸過程中的損壞檢測功能,這一點讓人感受到二進位制格式設計的深邃之處。