Winnyキャッシュファイルシステムを作りました

金曜にやたーはてなダイアリーファイルシステムできたよ\(^o^)/ - 2nd lifeを見てファイルシステムが簡単に作れるライブラリがあることを知って、高木浩光@自宅の日記 - ウイルス駆除のためWinnyのCacheフォルダを仮想ドライブ化してはどうかを思い出したので、似たようなWindowsライブラリのDokan を使って作ってみました。
いまのところ、実行手段がテキトウなのとAVG Freeで試したところ少し問題がありましたが、読み取り専用の仮想ドライブとしてウィルススキャンと感染ファイルの削除はできています。

概要

Winny2のcacheフォルダを仮想ドライブとしてマウントします。仮想ドライブからは復号された状態のキャッシュファイル(=元ファイル)へアクセスできます。
基本的に読み取り専用ドライブですが、削除だけは可能で、ファイルの削除が実行されると対応するcacheフォルダの下のキャッシュファイルが削除されます。
WinnyCacheinfoソースコードを一部使用しています。

使用用途

仮想ドライブをアンチウィルスソフトでウィルススキャンし、ウィルスに感染しているファイルをキャッシュから削除する事で、Winnyネットワークからウィルスを減らす用途に使用します。
高木さんの日記は2年も前のものですが、情報流出事件は今でも起きているので、まだ使う意味はあると思っています。
Winnyを使って情報流出事件を起こしてしてしまう人の多くは、Winnyを使うような人なので、「Winnyは危険!を使うな!」と言っても使います。しかし、情報流出事件を起こすのは嫌だと思うので、このソフトには協力的なのではないか? と個人的には考えています。

正直なところ

とりあえずできるか試した感じで、再来週の土日にもう一度触って、使う人がいるかは別にして使える状態にしようと思っています。なのでスーパー実験段階であり、「こういうふうにしたらいいー」みたいな話があれば聞きたいので、興味を持っていただいたらブクマでもコメント欄でもメールでもいいのでお願いします。
まだAVG Free8でしか試していなくて、ノートンを持っている知り合いはいるのでVNCで試させてもらおうと思っているのですが、他のアンチウィルスソフトで全然ダメだったーみたいな話があれば聞きたいのでお願いします。結構ダメな予感がしてます(後述)。
ソースコードはそのうち出すつもりですが、どうしても直ぐにいるなどあればメールで送れます。

ダウンロード

Dokan

DokanというWindows版FUSEのようなものを使っているので、ドライバのインストールが必要です。
Dokan » Download
の「Dokanライブラリ」の新しいものをダウンロードして、DokanInstall32.msi(32bitWindowsの場合)をインストールします。

Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ

VC++ 2008でコンパイルしているので、このランタイムライブラリが必要です。

Download: Visual C++ 2008 SP1 再頒布可能パッケージ (x86) - Microsoft Download Center - Download Details

WinnyCacheFS

本体。
winnycachefs-20080831.zip

操作

いまのところただのコマンドラインツールなので、プロンプトから直接実行するか、以下のようなバッチファイル(*.bat)を作って実行します。

winnycachefs.exe L "z:\winny2\cache"

z:\winny2\cacheをLドライブに割り当てる例です。
f:id:ultraist:20080831235108p:image
マウントに成功すると上記のようなドライブが出現します。

AVG Anti-Virus Free Edition 8でウィルススキャンした様子

前述したとおり問題があります。
f:id:ultraist:20080831235109p:image
まずスキャンしてウィルスを検出した様子です。自動削除したいですが、できないようなので手動で「隔離」を選択します。
f:id:ultraist:20080831235110p:image
なんと隔離に失敗したとメッセージが表示されます。これは、AVGが仮想ドライブの上にフォルダを作ろうとして(たぶんここが隔離室?)、読み取り専用ドライブなのでアクセス拒否で失敗してるのが原因です。
f:id:ultraist:20080831235111p:image
強制除去を行うかという問いとともに、世にも恐ろしい事態が発生したかのようなメッセージが表示されます。
f:id:ultraist:20080831235112p:image
ファイルは削除されます。\(^o^)/。しかしなぜか再起動が必要と言ってきます。

以上。
メンドイので、書き込みも対応してないとダメかも……。別フォルダへのProxy的に動かす感じ。

注意

Winnyのキャッシュ見れて便利じゃね? と思うかもしれませんが、CreateFileのセッション単位で復号しながら表示しているので、重いです。ストリーム暗号のかかったキャッシュファイルをランダムアクセスするために必要になった部分だけ一時ファイルを作っています。このファイルは、CloseFileのタイミングで消えています。なので一度表示したからといって次から軽くなったりはしません。
また、cache内にある*.exeなどウィルスファイルを表示する可能性があるので感染に注意してください。