ここから本文です

[C++]無限に増殖する実行ファイル

opw********さん

2012/4/502:34:03

[C++]無限に増殖する実行ファイル

プログラミング初心者です。
くだらない質問で申し訳ないのですが、windowsで以下のコードをコンパイルして実行すると無限に実行ファイルが増殖するのでしょうか?

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <fstream>
#include <Windows.h>


int main(int argc, char** argv)
{
/*自分自身のファイル名を取得する*/
std::string ownFileName = argv[0];

/*現在時刻を求める*/
SYSTEMTIME sTtime;
GetLocalTime(&sTtime);

/*時刻を元に作成するファイル(自分のコピー)名を決定する*/
std::string createFileName;
std::ostringstream os;
os << sTtime.wYear << sTtime.wMonth << sTtime.wDay << sTtime.wHour
<< sTtime.wMinute << sTtime.wSecond << sTtime.wMilliseconds << ".exe";
createFileName = os.str();

/*自分をコピーする*/
std::ifstream fin(ownFileName, std::ios_base::in | std::ios_base::binary);
std::ofstream fout(createFileName, std::ios_base::out | std::ios_base::binary);
fin.seekg(0, std::ios_base::end);
std::fstream::pos_type end_pos = fin.tellg();//終了位置を記憶
fin.seekg(0, std::ios_base::beg);
char buf;
do
{
fin.read(&buf, sizeof(char));
fout.write(&buf, sizeof(char));
}
while(fin.tellg() != end_pos);
fin.close();
fout.close();

/*コピーしたファイルを実行する*/
system(createFileName.c_str());
return 0;
}

汚いコードで申し訳ないです。
自分で試したときはこのコードを改良して一定回数でプログラムを終了するようにしてましたが、このコードは怖いのでやってません。
本当に自己増殖してしまうのでしょうか?セキュリティソフトはこのような悪影響を及ぼす可能性のあるファイルを検出できるのでしょうか?

閲覧数:
638
回答数:
1
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

a_p********さん

2012/4/503:42:33

一定回数でプログラムを終了できたのであれば、
その制約を無くせばとことんまで行く事になりますよね。
ただ、ディスク上に記録できるデータ量には限りがあります。
少なくともディスクに書き込めなくなれば、このプログラムの連鎖は止まります。

この程度の事は、セキュリティソフトでは検出しないかも知れません。
他のファイルを書き換える訳でもなく、ディスク上の記録領域を食い潰すだけですから、
セキュリティリスクというのはそれほど高くありません。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる