2008-10-19 795 views
12

我還沒有找到這個問題的答案;也許沒有一個。但我一直在想這件事。究竟是什麼原因導致二進制文件「亂碼」?

究竟是什麼原因導致二進制文件在文本編輯器中顯示爲「亂碼」?加密文件是一樣的。試圖將文件的二進制值轉換爲ASCII碼?是否可以將視圖轉換爲顯示原始二進制值,即顯示組成文件的1和0?

最後,有沒有辦法確定什麼程序將正確打開數據文件?很多時候,特別是在Windows中,文件是孤立的,或者與其他程序無關。在文本編輯器中打開它有時會告訴你它屬於哪裏,但大部分時間不會,由於亂碼。如果擴展名不提供任何信息,您如何確定它屬於哪個程序?

回答

16
  • 在文件試圖被轉換成ASCII碼的二進制值?

是的,這正是發生了什麼事情。通常情況下,文件的二進制值還包含不可打印的ASCII控制字符,導致在典型的文本編輯器中出現更奇怪的顯示。

  • 是否有可能轉換的視圖顯示原始的二進制值,即 表明組成該文件的1和0?

這取決於你的編輯器。你想要的是一個「十六進制編輯器」,而不是一個普通的文本編輯器。這將顯示文件的原始內容(通常以十六進制而不是二進制形式顯示,因爲零和零將佔用大量空間並且難以閱讀)。

  • 最後,有沒有辦法來確定哪些程序將正常開放 數據文件?

有一個叫"file" Linux命令行程序,將嘗試分析文件(通常尋找常見頭模式),並告訴你這是什麼樣的文件(例如文本或音頻,或視頻或XML等)。我不確定Windows是否有相應的程序。當然,這個程序的輸出只是一個猜測,但是當你不知道文件的格式是什麼時它可能非常有用。

+0

文件命令已移植到Windows;你可以在Cygwin上找到它。 – CesarB 2008-10-19 15:21:51

+0

無論如何`文件`肯定不是Linux程序 - 它是一個* nix程序,也可能在其他系統上。 Solaris已經有很多年了。 – 2008-11-25 02:42:31

2

顯示看起來很有趣,因爲二進制文件可以包含不可打印的字符。顯示程序取決於其他的東西。

這可以通過使用十六進制編輯器來防止。這樣的程序將文件中的每個字節顯示爲其十六進制值。這爲文件提供了一個很好的表格視圖,但對於一般人來說,破解這個視圖並不容易,因爲我們不習慣以這種方式查看數據。

有幾種方法可以找出文件可能屬於哪個程序。您可以查看文件的開頭,並且有一些知識,您可以識別文件類型。有一些類型以相同的字符開頭(RAR,GIF等)。對於其他類型,它可能不是那麼容易。

在Linux中,您可以使用「file」命令來幫助您確定文件類型。有可能爲Windows執行相同的程序。

0

是的,寫字板和記事本以及許多其他文本編輯器都假定您打開的任何文件都是文本文件,並且會嘗試顯示文件中字節表示的ASCII字符。

Hex Editors是用來查看和編輯二進制文件。它們通常將每個字節顯示爲一對十六進制數字,而不是「1和0」,因爲這樣更容易閱讀。

0

除了諸如字符編碼之類的東西外,文本編輯器對進入它的數據做了很少的假設。因此,它會(如你所說)將文件的數據讀取爲ASCII並以此方式顯示。由於二進制數據並不總是落在字母數字範圍內,所以會出現亂碼。至於顯示原始二進制值,你需要一個十六進制編輯器,如XVI32

二進制文件在使用它們的程序之外通常沒有上下文。一些二進制格式在開始處包含一個4字節的魔術序列(例如,Java .class文件以「CAFE」開頭),但要識別它們而不使用它們的程序,則需要映射這些4字節序列。我相信一些Linux發行版包含了這些信息的各種二進制格式,並將檢查文件的開頭,以試圖識別它。除此之外,你可以做的事情不多。

5

二進制文件顯示爲亂碼,因爲其中的數據是爲機器讀取而非人爲設計的。可悲的是,我們有些人習慣於解釋亂碼 - 雖然有些專門的工具可以幫助更好地查看數據 - 但大多數人不需要知道。

將文件中的每個字節視爲當前代碼集中的字符(可能是Windows上的CP1252)。例如,字節值65是'A';您可以在網上輕鬆找到說明性示例。因此,組成二進制數據的字節根據代碼集顯示 - 就像文本編輯器一樣。它不會嘗試轉換二進制文件 - 它不知道如何(只有原始程序)。

至於如何檢測什麼程序創建文件 - 你可能有時會這樣做,但不容易和可靠。在Unix上(或在Windows上使用Cygwin)'文件'程序可能會有所幫助。這個程序查看前幾個字節來嘗試猜測程序。

加密數據應該看起來像胡言亂語。如果它看起來不是亂碼,那麼它可能沒有很好的加密。

2

在標準文本編輯器(如記事本)中查看時,二進制顯示爲亂碼的文件的原因是,當使用這些類型的應用程序通常使用的編碼(例如UTF-8的ASCII)顯示時,數據被映射爲字符當它被編碼用於顯示時,這個過程的輸出通常對人類來說與被映射的二進制數據一樣毫無意義,因爲你看到的是亂碼

如前所述,當以不同的方式查看時,這些文件更有意義就像一個十六進制edutor一樣。

某些文件類型可以存在於給定類型的所有文件數據進行識別,例如所有的可執行文件(* .exe)的以字母MZ

1

二進制數據往往是很隨意的開始。根據定義,特別是加密數據。每個字節可以用256個字符中的一個來表示(使Unicode不在等式中)。ASCII僅涵蓋其中的128個,其中只有94個是實際可打印的字符。在ASCII範圍之外,您有許多國際字符和奇怪的符號。其中肯定有超過128個,所以必須指定一個代碼頁來選擇一組特定的符號。

無論如何,由於二進制文件可以表示爲一個非常隨機的熟悉和陌生的字符分類,如果您在編輯器中打開它,該文件看起來就像是胡言亂語。

您可以隨時在十六進制編輯器中打開一個文件(二進制或文本文件,實際上沒有區別),並查看原始二進制數據。

無法確定哪個程序創建了特定的文件。特別是,如果程序加密了數據,所有的希望都會丟失。否則,通常很容易識別某些「簽名」。