この記事を書くまでBlack-holicのクリスマスは終わりません。毎年クリスマスネタを書くと疲れてしまって、そのすぐあとにお正月で気を抜きまくって、気付いたら何もやる気がなくなるので、クリスマスネタの次の大特集は結構大変なのです。
去年などはかなり良かったですが、今回はクリスマス後もやることだらけで、ホントにくたびれました。
そんな前置きとは関係なく、Perlが楽しいのです。なぜか私はイライラするような事が起きたりするとPerlのスクリプトを書いてスッキリしているような気もします。
なんでPerlを書くとスッキリするのかは解りませんが、自分が書いたとおりにスクリプトが動作する快感とか、手動でやったら面倒な作業があっという間!という快感とか。ついこのあいだも、Perlを使って数千のHTMLファイルが数秒で作られるのを体験してオオォ!となったのですが。
そのHTMLファイルは特に意味のないものというか、練習用スクリプトだったので、数千のHTMLファイルは数秒かけて消去されたのですけど。
それよりも、なんでイライラしてるんだ?という感じもありますけどね。プライベートの細々したイライラ要素を書いても仕方ありませんし、書きませんけど。でも書いてもダイジョブなイライラ要素として、最近迷惑メールに必ずといっても良いほどウイルスがついてくるんです。
ただでさえ面倒な迷惑メールですけど、さらにウイルス付きというのはイライラしないわけにはいきません。しかし、誰が送っているのか解らない迷惑メールですから、誰に怒って良いのかも解りませんし、そんな感じではイライラばかりが募っていきます。
ここはなんとしても迷惑メールを前向きに楽しまないと、イライラしすぎて爆発します。なので、私はウイルスのコレクションを始めることにしました。
コレクションといっても、メールと一緒に届いたウイルスをそのままとっておいたら危険ですし、ウイルスは見付かり次第消去なのですが。でもアンチウイルスソフトのログには見付かったウイルスの名前が残っています。このログの情報をイロイロ加工すると見付かったウイルスを集める事が出来そうです。
おバカな目的ではありますが、ここでPerlが大活躍です。別にPerlでなくて他の言語などでも良いのかも知れませんが、やっぱり思考が文系的な人はPerlが落ち着く気がします。落ち着くというか、元々Perlはテキストをイロイロするために作られたという事ですし。
(私は文系、理系というカテゴライズはあまり好きではないのですが、やっぱり考え方の違いというか、物事を考えて結論を導き出す方法は大きく分けると二つになるようなところもありますよね。)
ここでプチPerl講座が始まってコードとかが書かれるのか?とかいう感じですが、今でも教科書を見ながらスクリプトを書いている状態なので、書きませんけどね。
それに、良くわかんないけどコピペしてスクリプトを動かしてみたら大事なファイルが消えちゃった!とかそんな苦情が来ないとも限りませんし。でも一応どういうスクリプトかは書いておいた方が良いでしょうか?なんとなく「Perlのススメ」みたいな内容になってますし。ついでになんとなく料理のレシピ風にして誤魔化します。
材料:
Perl(OSによってはActivePerlかも知れません)
アンチウイルスソフトのログファイル(*1
集めたウイルスの名前を保存するためのテキストファイル(ここでは"vir_collection"という名前にしました)
*1: ソフトによってはどこにあるか解らないとか、そもそもログなんてない、という事もあるかも知れませんけど、その場合はタイヘンです。
作り方:
1. "vir_collection" を開いて任意の配列(ここでは@virus)にこれまで見付かったウイルス名を読み込んで閉じます。(初回はvir_collectionというファイルが無いので、あらかじめ用意するのが面倒な場合はこれを「もしも文」の中に入れて"もしもvir_collectionがあるのなら" という感じにしても良いかも知れません。)
2. アンチウイルスソフトのログファイルを開いて、ファイルの各行を調べてウイルスが見付かった事を示す文字列が見付かったら、検索置換を使って"$_"がウイルス名だけになるようにします。
3. 見付かったウイルス名を"@virus"に追加していきます。
4. @virusをソートして重複したウイルスの名前がアルファベティカルにまとまるようにします。
5. $virusなどの適当な変数に@virusの最初の要素を代入します。
6. @virusの全ての要素に対して「$virus と $_ が一致しなければ新たな配列(ここでは@collection)に追加して、$virus に $_ を代入」をしてだぶったウイルス名を消していきます。
7. 先程の vir_collection を今度は書き出し用に開いて @collection の内容を vir_collection に書き込んでいきます。
8. vir_collectionをテキストエディタなどで開けば集まったウイルスの一覧を見ることが出来ます。
そんな感じでスクリプトを書いたのですが、余計な機能とか空行などを含めても45行だし、上のレシピを書くのと同じぐらいの時間で書いてたり、ビミョーなレシピです。
それはどうでもいいですが、上のレシピを元に作ったワケではないスクリプトで集めたウイルスは今のところ次のようになっています。
Email.Phishing.Certificate
Email.Phishing.DblDom-116
Email.Phishing.DblDom-124
Email.Trojan-114
Email.Trojan-123
Email.Trojan-14
Email.Trojan-38
Email.Trojan.GZC
JS.Obfus-8
Phishing.Heuristics.Email.SpoofedDomain
Suspect.Bredozip-zippwd-2
Suspect.Bredozip-zippwd-4
Trojan.Agent-124239
Trojan.Buzus-6150
Trojan.Downloader-81327
Trojan.Peed-472
Trojan.Peed-478
Trojan.Zbot-6305
-- 18 Viruses were Collected --
今気付いたのですが、私がスクリプトに付け加えた最後の余計な1行のために、このままだと私の書いたスクリプトは二回目以降に出力がヘンになりますね。まあいいか。
(今調べましたが、配列の最後の要素を削除するのは「pop関数」でしたね。)
良く解りませんが、ウイルスのコレクションを始めたのです。どんなものでもコレクションはけっこう楽しいですしね。こういうのが流行ったら「オレのところにはこんなレアなウイルスが来たんだぜ!」とかそういうことになったり、「すれ違い感染」でレアウイルスを手に入れた入りとか、楽しいと思えば楽しいはずですので、みんなで始めましょう。ウソですけど。
ということで、何でもイイから書かないといつまでたってもクリスマスネタなので、ウイルスでPerlしてみました。それよりも、迷惑メールにウイルスがくっついて来るのですし「私はパソコンでヘンな事しないからダイジョーブ」というのはあり得ないです。アンチウイルスなソフトは必ずインストールしましょうね。
次回は「私のパソコンがウイルスに感染して個人情報が大流出しちゃったぁ!」ではないことを祈りつつ、何かが大特集です。お楽しみに!