2012年6月26日火曜日

ThunderbirdがSymantecに撃たれた!

Windows には欠かせないが OS X には不要なユーティリティーが二つある。
それは、デフラグツールとウィルス対策ソフトだ。
そう思っている。思い込みかも知れないが、多分正しい。

 デフラグツールについては実証済み。
Leopard の時にうっかり有料ソフトを買ってHDDを分析したら、ち〜〜っとも断片化していなかったのだ。Windows のしっちゃかめっちゃかに断片化したHDDマップを見慣れていたものだから、Macの整然としたHDDマップを見た時は本当にビックリした。

ウィルス対策ソフトも多分 OS X には要らない。
こちらの方は、OS X が堅牢だからじゃなくてマイナーだから、だけど。

という訳で、家でも職場でも OS X マシンにはウィルス対策ソフトを入れていなかった。

しかし、職場の方でウィルス対策ソフトを入れろ入れろとうるさいので、嫌々ながらSymantec の Endpoint Protection をインストールした。

で、早速ウィルススキャンを実行したところ、Inbox に "report 485770.pdf.exe" という Downloader.Dromedan ウィルスがあるという。
Inbox は多分 Thunderbird のヤツだろうな、そんなもん添付ファイルに潜ませたって OS X にはカンケーネーと思いつつ、一応削除した。

ところがところが。

このウィルスを削除したあと、Thunderbird を起動したら、受信フォルダ直下のメールがぐちゃぐちゃになってしまった。

メール一覧からメールを選択したとき、全然違うところからデータを拾ってきて表示してしまう。HTML形式メールのソースが表示されたり、別のメールの添付ファイルがデーコード前のテキスト状態で表示されたりで、どうしようもない状態なのだ。

うっかりメールのデータをいじらせたのは失敗だった。
下手にウィルス対策ソフトなんか入れたら、そのソフト自体がおかしなことを引き起こしてしまったという典型的な例。
まるで、予防接種をしたその日の夜に発熱する幼児のよう。

くっそー、どうやって修復するか。

メールがぐちゃぐちゃになったといっても、症状から見る限りデータ自身は生きていそうだ。
そこで考えた。

そもそも、電子メールというのはメールを一つ一つ個別のファイルとして保管する訳ではなく、複数のメールのデータ(送信者などが書かれたヘッダと本体)を順に繋げていったものを、一つのファイルにつらつら並べて書き込んでいく、というやり方をする。
メールソフトはデータの先頭から順にヘッダを探しつつスキャンしていき、当該のメールを探し出す。だからメールのデータ本体さえあればメールは基本的に読める訳だ(UNIXのmailコマンド懐かしス)。
しかしそれでは効率が悪いということで、メールのヘッダだけ取り出してメールの目次を作っておき、それを使って管理するというのが一般的なやり方。

Firefox の場合は拡張子 .msf のファイルが目次になっている。

今直面しているトラブルは、Inbox からウィルスが除去されてファイルが縮んだせいで、 .msf ファイルとの間で整合性がとれなくなったために起こってるのだろうと見当をつけた。そこで、Inbox の目次である Inbox.msf ファイルを修復させてみたところ、あっさり解決することができた。

という訳で、以下その手順。

(1) Thunderbirdを終了させる。

(2) 以下のディレクトリに移動。

~/Library/Thunderbird/Profiles/<name>/Mail/<pop server>/
 
<name>
 ⇒ Thunderbirdが勝手に付けた名前(ヘンな記号の羅列.default とかになってると思う)
 <pop server>
 ⇒ popサーバーの名前

(3) このディレクトリの中に、Inbox というファイルがあるはずなので、それを複製し、別の名前にする。inbox_copied とか。

(4)  Thunderbirdを起動する。左側の、フォルダが表示されるカラムに、inbox_copiedという名前のフォルダが見えるはず。
 そのフォルダを選択してみる。見れなくなっていたメールも読めるようになっているはず。
 inbox_copiedの msf ファイルが無いということで、Thunderbird が自動的に生成してくれたのだ。

(5) 壊れていたメールが復活したのを確認したら、再度 Thunderbirdを終了させる。

(6) さっきのディレクトリに移動。
inbox_copied に 対応する inbox_copied.msf が出来ていることを確認する。
Inbox と Inbox.msf を別のディレクトリに移す。念のため、一応捨てずにとっておく。
inbox_copied を inbox に、
inbox_copied.msf を inbox.msf に名称変更する。

 (7) 再度、Thunderbirdを起動する。これでもとの状態に復元できた。

このトラブルのせいで、何時間も使ってしまった。
導入するのに余計な時間と労力を使わされたからには、それなりの働きをしてもらわないと。いざという時役に立ちませんでした、なんて事になったら暴れるぞ。