解碼還原 Base 64

適用範圍: 觀念問題,通用

提醒:1999年的文章。

這裡是提供一些小技巧,在你手邊沒有任何的工具程式輔助情況下,教各位如何還原沒有被正確解碼的信件,其實,只要你掌握 email的原理之後,就會了解其實還原並不難喔。

這裡是以 base64 格式的編碼所造成的亂碼作為解說。

我們用到的工具只有 Outlook Express 跟記事本。

(建議用UltraEdit,因為對於含有圖片的亂碼信而言,用記事本來編輯很可能一下子就會出現記憶體不足的訊息。)

先來了解一下 email 的構造:

email 其實只是「頭」(Header)加上「身體」(內容)而已,為什麼會有亂碼?因為「頭」或是「身體」不知道為什麼出了毛病,使得email 軟體認不出來這是個什麼東東,所以就變亂碼囉。

知道了這個原理之後,我們只要替「身體」加上一個「頭」,一個email 就合成出來了。

email 的「頭」是哪一部分?我怎麼知道?

很簡單。

以Outlook Express來說,開啟任意一個email之後,選擇「檔案」>>「內容」,再按一下「詳細資料」這個標籤,這裡所顯示的一切,就是這封 email 的「頭」,一切有關於這封 email 的資訊都記載很清楚,像是從哪來、到哪去、編碼方式....等等,都有紀錄。(這也是駭客常參考的資訊來源之一)

email 的「身體」在哪?

以Base64格式編碼的信件來說(其實Quoted Printable也是一樣),信件的本文,一定是從這行文字開始:

This is a multi-part message in MIME format.

結尾一定是在最下面的:
------=_NextPart_000_002E_01BEBC07.9C58A280--

只是數值會不一樣,但是一定是長的如同
------=_NextPart_xxx_xxx...........................這種樣子。

而在開頭與結尾的中間,會有拉拉雜雜的一大堆東西,你不用去理它。我們知道了email的「頭」與「身體」的構造之後,要還原就容易多了。

我們現在就來一步步還原信件:

假設,我們在BBS的信箱中收到一封含有圖片(或是 HTML)的信件,當然,這時候看到的一定是亂碼,首先,你要判斷他的編碼方式,判斷編碼方式不難,如果是以 base64 編碼的話,一定會看到:

Content-Transfer-Encoding: base64 這一行

(在信件開頭往下不遠的地方,很好找。同樣的道理,如果這封信是採 Quoted Printale 編碼的話,那就會出現Quoted printable 字樣)

把這封在BBS上的亂碼信轉寄回一般信箱(由ISP、學校、公司等所提供的),再以 Outlook Express 接收到你的電腦中。

再發一封以 base64 編碼的 HTML信件給你自己。信件有沒有內容、有沒有標題,都無所謂,因為我們做這個動作,目的只是要取得信件的 header而已,以便後來與「身體」合成用。

我們先打開你剛剛發給自己的這封空白HTML信件。選擇「檔案」>>「內容」,再按一下「詳細資料」這個標籤,把這裡的全部資訊,都複製到記事本上(或UltraEdit)。

註:信件 header 是長得像下面這樣:

  Received: from ......
  .....
  .....
  X-Mailer: Microsoft Outlook Express ......

我們接下來打開剛剛由BBS轉寄回來的亂碼信,複製從

 This is a multi-part message in MIME format.

 一直到最下面結尾的:

 ------=_NextPart_xxx_xxx_xxxxxx.xxxxxxx--

把這一大段,通通複製到記事本中,接在 header 的下面一段,也就是接在 
X-Mailer: Microsoft Outlook Express.........這一行之下。

X-Mailer: ....與 This is a multi...中間留一行空行。

把This is a multi-part message in MIME format.緊接在下的------=_NextPart_xxx_xxx_xxxxxx.xxxxxxx

這一行中的NextPart數值,複製到上面 header 中的
boundary="----=_NextPart_xxx_xxxx_xxxxxxx.xxxxxx"上

也就是說,header中的 boundary="----=_NextPart..後的數值,一定要和 This is a multi-part message in MIME format. 緊接在下面的那一行的_NextPart後面的數值一樣才行。

比方說:

This is a multi-part message in MIME format. 
------=_NextPart_000_002E_01BEBC07.9C58A280

那在上面 header 中的就是:

Content-Type: multipart/alternative;
boundary="----=_NextPart_000_002E_01BEBC07.9C58A280"

將檔案存成 .eml 就可以了,點兩下,就可以打開了。

■我都照上面的方法做了,怎麼還是亂碼呢?

這種情況最常發生在BBS轉寄回來的信件上,解決方法很簡單,你在

This is a multi-part message in MIME format.
------=_NextPart_000_002E_01BEBC07.9C58A280
Content-Type: multipart/alternative;
boundary="----=_NextPart_001_002F_01BEBC07.9C58A280"

最後一行的boundary之前,加上一個半形空白就可以了。如下:

This is a multi-part message in MIME format.
------=_NextPart_000_002E_01BEBC07.9C58A280
Content-Type: multipart/alternative;
  boundary="----=_NextPart_001_002F_01BEBC07.9C58A280"

(注意到沒?因插入一半形空白,所以上面 boundry 沒有與 Content....對齊)

補充:

在網路上,有些傳送資料的伺服器並沒有能力處理 8 位元資料(像是中文),所以會把第八個位元給濾掉,當你的信件經過這種伺服器,因為資料已經完全被破壞掉了,第八位元被濾掉所造成的亂碼郵件沒有還原的希望。

chengbin 發表在 痞客邦 PIXNET 留言(0) 人氣()