023 2000/9/22 行儀が良いけど行儀が悪いプログラム
[ 前回 ] [ 次回 ] [ 戻る ]
最近、「マクロウイルスがメールで飛んできた」と隣の席からの声。ExcelVBAのマクロウイルス。ファイルにくっついて増殖タイプで、その他ダメージを与えることは何もしないらしい。特にダメージが出ることはないようではある。ま、増殖するだけでも十分問題か。
しかし、ウイルスを飼っておきながら、何も連絡しない体質はなんとかならんもんかなあ。>社内の某所
外部にも流れていたらしいので、信用なくしても知らないぞ…。
と、ぶつくさ言いながら、自分のExcelファイルのチェックをしている自分がいるわけですけど。自分が携わっているシステムが、Excel+VBAってのもねえ。こんな仕様にしたのは(略)
それで、ウイルスを削除したときに、ExcelVBAのウイルス部分をファイル(*.txt)に取り出してくれたので、読んでみる。
「この分かりやすいプログラムは一体…」
例えば、
- 字下げがまとも。
- 変数の宣言がVB系特有なものになっている。(例:long変数だったら、変数名がlngFoo)
- 関数名が分かりやすい。Workbook_Open()とか、Intrude()とか。…そのままじゃないか ^^;
- エラーが起こりそうなところを無視するようにするなど、考えられている
プログラムとしては、わずか数十行。それだけでウィルスが書けてしまう。ついでだから、ちょっとやり方を書いてみますか。
- このVBA実行時に、Excel関連のレジストリを操作して、マクロチェックを飛ばすようにする。
- このプログラムを、Excel実行時に、VBAプロジェクトにloadされるようにする。
- 「ファイルを保存する前イベント」が発生したら、この全体のプログラムを保存先に流し込む。
(ちなみに、流し込んだときに、プロジェクトの重複チェックもやっている。)
たったこれだけ。たった。
ちなみに、このウイルスに引っかかっていると、VBAのプロジェクトにでてくるので、簡単に分かる。
ちなみに、これにちょいと追加して、「Excel起動時に時刻チェックをして、条件に合っていたら、ファイルを削除する」とか、「保存時に保存するファイルをいじって、保存しようとする内容を消したりする」ってのも自由自在。
亜流が簡単にできるわけだな。全く。
それにしても、某外注君とか、某if数千行とかのプログラムに比べると理解度が全然違うプログラム。なんだかやりきれない思いをしたのだった。