いざたて暇人よ

適当な戯言なのに長すぎてTwitterに書けないこととか ゆるめ…緩めの話題/かため…固めの話題

【マジで真似すんな】Windows98を破壊するウイルスをガチで作ってみる【マジで悪用厳禁】

f:id:MonsterJunkieKenny:20200225170044p:plain

どうも、mjkです。

もう2021年も終わりを迎え、2022年がやってきましたね。思えば、昨年、一昨年は競馬に振り回されまくっていた1年だったように感じます。とはいえ、自分の競馬熱が再加熱したのはウ○娘ではなく、コントレイルやアーモンドアイといった競走馬たちが新たな伝説を作り上げたことなのですが。

さて、かなり前にウイルスの作り方に関する記事を書いたのですが、ありがたいことにこの記事のおかげでGoogle先生に「ウイルス 作り方」と聞くとかなり上位の方にこの記事が出るようなんです。(最近はコロナウイルスが流行ってる影響でまた出なくなってしまったみたいですが…)

mjkfromfareast.hatenablog.com

f:id:MonsterJunkieKenny:20211229182640p:plain

驚くべきことに、上位3番目に出る

自分からすれば見ていただけることはとてもありがたいと思っております。所詮は道楽で書いてるものですので。

しかし、中にはこの記事を読んでこんな考えを持った少年たちもいたはずです。

 

これってウイルスじゃなくね?」と。

 

はい、そうです。実はウイルスじゃないです。君らのような勘のいいガキは嫌いだよ

ということで、今回は自分が作ったウイルスをもとに、ウイルスの作り方を"マジで"紹介します。

相変わらず起こったことに対する責任は一切取れませんので、ここに書かれていることはすべて自己責任で行ってください

 


 

前置き

ウイルスを作るとはいえ、現在のWindowsに最初からあるセキュリティも今では整備されています(つまり昔はなかった)。生ぬるいウイルスでは即刻リアルタイムスキャンで返り討ちです。

なので今回はWindows98という、ちょっと古いバージョンのパソコンを破壊するウイルスを作る解説になります。このバージョンの特徴として、現在のコマンドプロンプトより原始的なMS-DOSプロンプトが使われていたというのがあります。

このバージョンが主流だったころは、コンピュータウイルスも相当な脅威でした。NimdaとかMelissaとかLOVELETTERとか。詳しくは"(名前) ウイルス"でググると出てきます。

そして、もう一つ。今回はVBScriptというプログラミング言語を使用しました。普通プログラムというのは実行のために特別な処理をする必要があるんですが(これをコンパイルと言います)、この言語で書いたプログラムはその必要がないんです。書いたらその通りにやってくれます。それもWindows

 

!注意!

ここから下に書いてあることについては、何度も言いますが実際に行う場合は自己責任で。マジで何が起ころうとも責任は取れない。

 

本題へ入ろう。

最初に想定していたこと

PC破壊ウイルスを作るにあたって、ざっくりと抱いたのが「Cドラ消すだけなら普通に"FORMAT C: /U"でいいんじゃない?」という想定。このコマンドはCドライブ(パソコンの動作に必要なファイルは大体ここに入っています)を警告なしでフォーマット(要するに中身全消し)してしまうコマンドです。Windows10とかだと、このコマンドを含んだバッチファイル(コマンドを記述したファイル)はすべて「BAT/FormatCU」というウイルスとして認識されます。

しかしMS-DOSプロンプトでは、/Uオプション(フォーマットの確認を行わないオプション)がありません。つまり、現行のWindowsで悪名高いこのコマンドは使えません。完全には使えなくはないのですが警告が表示されてしまいますから、そこからキャンセルされれば終わり。

mjkはしょぼくれてしまいましたとさ。

 

作戦変更

しかし、このMS-DOSプロンプトにはDELTREEなるコマンドが存在します。このコマンドは「指定したフォルダをその中身もろとも削除する」という無茶苦茶なコマンドです。これはCドラにも使えまして、使えばもちろんハードディスクの中身がすっからかんになります。しかも/Yオプションを付ければ確認もなくいきなり消し始めます

要するに、先ほど言った"FORMAT C: /U"とほぼ同じことができます。mjkは歓喜した。

 

忍び寄る死

さて、破壊活動の方針は整いましたが、次に「発動のタイミング」という課題があります。実行してすぐ発動したのでは、「使用中のファイルは消せない」「アクセスが拒否される」などの理由で不発に終わる可能性があります。なので、発動のタイミングは考えなければいけません。

タイミングとして望ましいのは起動した直後。主要なファイルが読み込まれ始める前に消してしまえば、使用中ということで消されることがありません。

また、アクセス拒否については「『起動時のみに使われ、起動した後は自由に書き込める』というファイルを書き換えてアクセスが拒否されないようにする」という手段があります。

今だと結構な荒業に見えるかもしれませんが、Windows98ではこれができたのです。そのファイルこそが"AUTOEXEC.BAT"。本来はパソコンの起動と一緒に起動させておきたいプログラムを記録したりするためのものですが、このファイルがバッチファイルであるということを利用します。

バッチファイルというのは、コマンドプロンプトMS-DOSプロンプトの処理を書いておいたファイルのことです。このファイルを読み込むと、中に書いてあるコマンドがコマンドプロンプトMS-DOSプロンプトで実行されるわけです。

つまり、AUTOEXECに先ほどのDELTREEコマンドを組み込んでやれば、パソコンを起動した瞬間破壊活動に入る悪魔のファイルと化すのです。

これにより、大体の方針は決まりました。

 

断頭台への行進

前項では再起動後に発動するトラップを仕込みましたが、再起動されなければ意味がありません。もしかしたら起動している間に見つけられて、修正されてしまうかもしれません。

そこで、ユーザーに対して強引に再起動を迫るようにします。具体的には、致命的なエラーを発生させればいいです。

「そんな方法あるの?」と思いの方もいるでしょうが、この頃のWindowsにはあるんです。"CONCONバグ"という致命的なエラーを引き起こすバグが…

"CON"というのは予約デバイスの1つのことで、「特殊なファイルの為に名前を予約しているので、この名前は付けられません」という名前のことです。

その中でも有名なのがCON(コンソール[Console]のConです)ですが、ほかにもPRN(プリンター[PRinTer])、AUX(補助デバイス)などがあります。

この頃のWindowsでは、こういった名前を複数連ねたようなパス(フォルダとかの階層)にアクセスしようとすると、システムがフリーズしてしまうというとんでもないバグがあったのです。

システムがフリーズしないにしても、ブルースクリーンをほぼ確実に出すことができます(下記動画参照。打ちこんでいるのは「file:\\\C|/con/con/con」で、C:\con\con\にあるconというファイルにアクセスしようとしている。こんな名前のフォルダは作れないので、普通ならそんなフォルダは無い)

これにより、強制再起動→データ全削除のコンボが整いました。

 

ちょっとした遊び

最後に、こんなものを用意します。

f:id:MonsterJunkieKenny:20220307161221p:plain

Selene

はい、アスキーアートです。

どうせ消してる間に暇なんだろうから上手いこと時間を繕うためにアスキーアートを表示させてあげます。この辺は完全に遊び。

 

さあ、実践だ。

そんなわけでいよいよ実践。ソースコードそんな物載せられません。というかここまで書いてある内容でも下手したら捕まる。どうしてもやりたい場合、今回は自分で作ってみてね。

で、これを実行したのが以下の動画になります。

youtu.be

 

実行すると「気を付けて! このウィンドウを閉じると、このPCはBSoD(死の青画面ブルースクリーンのこと)を表示し、二度と起動しなくなります。」と英語で書かれたウィンドウが現れます(翻訳はGoogle先生頼り)。

f:id:MonsterJunkieKenny:20220406010300p:plain

いかにも怪しいメッセージウィンドウが登場

メッセージを無視してそのウィンドウを閉じると、CONCONバグによってメッセージ通りにブルースクリーンが発生します。

f:id:MonsterJunkieKenny:20220406010332p:plain

仕込まれたブルースクリーンが発動

このブルースクリーンの発生に対して再起動を行うと、起動が異常に長くなります。それもそのはず、水面下ではパソコンのデータを全削除している最中なのですから。

そして表示されるアスキーアートと、「Windowsの読み込みを続けることはできません。」のメッセージ。

f:id:MonsterJunkieKenny:20220406010458p:plain

アスキーアートは大きく作りすぎてしまったのか、上の方が見切れている。反省。

なお、書かれている英文の内容は「あなたのPCはもう使えません。詳細については、https://twitter.com/mjk_chain (筆者のTwitterです)をご覧ください。」です。

また、「バッチファイルがありません。」というメッセージについてなのですが、どうやら「実行中のバッチファイルごと消してしまう脳筋仕様により、あろうことかAUTOEXEC.BATまで削除されてしまう」模様。フォルダごとに削除する方法はなかった(というよりいろいろ試したけどダメだった)。

その後に行っているdirコマンドは、現在のフォルダの中身を確認するためのものです。正常なWindows 98で実行した場合は下の画像のようにいろいろファイルが表示されます。

f:id:MonsterJunkieKenny:20220406011442p:plain

正常なWindows 98のC:\でdirを実行したときの図。いろいろなファイルの名前が表示される

しかし、ウイルスによって破壊されたWindows 98では、それらのファイルが跡形もなく消し去られています。

f:id:MonsterJunkieKenny:20220406011641p:plain

あれだけあったファイルが、一切見つからなくなってしまった

そしてもう一度強制再起動をすると、「Invalid system disk(無効なシステムディスクです)」の文字が…。

f:id:MonsterJunkieKenny:20220406011825p:plain

少し知識のある人なら顔が青くなるであろうメッセージ

こうして、Windows 98は跡形もなくウイルスによって吹き飛ばされてしまいましたとさ。

※今回の実験では仮想環境を用いています。専門的な知識が無い方の実機での実験は絶対にお止めください。

 

 

いかがでしたか?

今回は前回よりも明らかに実践的なウイルスの作り方を紹介しました。しかし、前回の記事でもお伝えした通り、自分がこんな記事を書くのは「多少やり方はダーティでもいいから読み手にはパソコンやプログラミングに興味を持って、あるいは持ち続けてもらいたい」という目的があってのことなのです。こんなことしてるのに興味持てだとか説得力ないとか言ってはいけない

若者のパソコン離れが進む今だからこそ、パソコンに触れてほしいというのが、自分の切なる願いなんです。

でも今回のはマジで実行しようだなんて考えないでくださいマジで。本当にお願いします。皆さんは正しいプログラマーに育ってください俺みたいな偏屈な奴には絶対なるな

そういう話でした。