![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?5a7ff87)
No.11ベストアンサー
- 回答日時:
コンパイルを必要とする言語で考えると,
コンパイルしないとダメなので大変なのです。
最初からコンパイルしないプログラムだと,簡単にできますよ。
---kakikae.vbs------------------------------
Dim fso, f
Set fso = CreateObject("Scripting.FileSystemObject")
Set f = fso.CreateTextFile("A:\kakikae.vbs",True)
f.Write "msgbox " & Chr(34) & "私はすでに死んでいます。" & Chr(34)
------------------------------------------
たったこれだけ。
上の点線内の4行をメモ帳などテキストエディタにコピペして,
フロッピーディスクに,「kakikae.vbs」というファイル名で保存し,
そのVBSを「ダブルクリック」して開いてみてください。
「kakikae.vbs」自体が「kakikae.vbs」によって書き替わります。
書き替わることによって,元のプログラムは死にます。
(死んだヤツが「死んだ」と言うのだろうか?)
フロッピーディスクがAドライブでない場合は,
3行目の A:\ を B:\ などに書き替えてください。
また,ドライブは,Aドライブである必要はありません。任意のフォルダでも動作します。
勝手に,HD内でプログラムを動作させるのは悪いかなと思ったのと,
フォルダ構造はPCによって違うので無難なAドライブにしただけです。
JavaScriptをされているということですが,
工夫すればJavaScriptでも同様なことはできると思います。
サーバー上にあるHTMLに貼り付いたJavaScriptや .jsファイル では大したことはできません。
ローカルに保存した .jsファイル やJavaScriptを組み込んだHTAファイルだとかなり強烈なことができます。
JSはVBSに比べて,若干制約が多いのと,動作が不安定になります。
上記のものを改良すると,自己増殖も可能ですし,ウイルスも作れます。
今回は自分自身をターゲットにしていますが,自分自身以外のファイルを削除したり,別の場所にコピーすることもできます。
また他のファイルも生成可能で,レジストリの書き替えなどもバキバキにこなすことができます。
つまりPC内をぐちゃぐちゃにしてしまうのは簡単。
また,「kakikae.vbs」 みたいなVBSを自動作動させるVBSを作れば,「kakikae.vbs」 をダブルクリックする必要さえなくなります。
つまり,いわゆる時限爆弾的な物もできます。
改良すると危険な物にもなります,扱いには注意してください。
また,くれぐれも犯罪行為には使用しないでください。
VBScriptですか!
大変参考になりました。
ウイルスを作成する気はまったくないので、誤解しないでください。
回答ありがとうございました。
No.14
- 回答日時:
ANo.11とANo.13の補足をさせていただくと、
これは厳密にはWSHです。言語の範疇とは少し違います。たとえばDOSのバッチでも同じことが可能ですし。
皆さんおっしゃっているように、インタプリタならできるものが多いですね。これも同様です。
しかし、差し出がましいですが、それでウィルスを作るとかPCを破壊とかは、さらに別の話というか、それこそCやアセンブラほか出てきた言語のほとんど全てで言えるし、このような公の場に投稿するには少々論外な話題では…。
2回目ですが、ウイルスは作成する気はありませんので・・・。
実際の話、自分、ある「アンインストール用」ソフトで自分のPCファイルを一部壊滅させた過去があるので・・・。
回答ありがとうございました。
![](http://oshiete.xgoo.jp/images/v2/common/profile/M/noimageicon_setting_10.png?5a7ff87)
No.13
- 回答日時:
#11です。
補足です。
日頃はVBSの方をよく使うので,書きませんでしたが,
JavaScriptでもVBScriptとほぼ同様の書き方で,同じ事ができました。
特に工夫は必要なかったです。
---kakikae.js-------------------------
var fso,f;
fso = new ActiveXObject("Scripting.FileSystemObject")
f = fso.CreateTextFile("A:\kakikae.js", true);
f.WriteLine("WScript.Echo(" + "\"" + "私はすでに死んでいます。" + "\"" + ");");
------------------------------------
VBSと似ていますね,そっくりです。
若干,書き方が違うだけです。
このJSもVBS同様,Aドライブに「kakikae.js」というファイルネームで保存すると,自分自身を書き替えます。
下で書くのを忘れていましたが,パスは A:\ などから始まる絶対パスでなくても良いです。
パスを取って,
CreateTextFile("kakikae.js", true);
としても,自分自身を書き替えます。VBSも同様です。
ちなみに,「自分自身を削除」はもっと簡単で,
JSの場合,
---sakujyo.js-------------------------
var fso,f;
fso = new ActiveXObject("Scripting.FileSystemObject")
f = fso.DeleteFile("A:\sakujyo.js");
------------------------------------
で行けます。
やったことはないですが,JSでもレジストリの書き替えなど,かなりハードなこともできそうですね。
ネット上の動作では見ることができない,JSの恐い一面だと思います。
VBScriptもJavaScriptも,本来インターフェイスを持たないスクリプトです。
ボタン操作などGUIな環境で上のような動作をさせるには,HTMLなどインターフェイスが必要です。
でもHTMLに上記のようなスクリプトを貼り付けると,危険すぎてブラウザが拒絶反応をすると思います。
上のようなスクリプトをGUI環境で実行するには,下でも書きましたHTAに貼り付けるのが最も簡単で楽だと思います。
http://www.microsoft.com/japan/msdn/workshop/aut …
意外と身近に,面白いプログラムがあるものでしょう。
参考URL:http://wwwroy.hi-ho.ne.jp/mutaguchi/wsh/
身近にあっても、面白いと言うか、恐ろしいと言うか、悩むところです・・・・。
「JScript」のプログラム参考になります。
回答ありがとうございました。
No.12
- 回答日時:
>実行ファイルを実行中に削除することが、条件によっては可能です。
Dosにdelコマンドを渡す以外で可能なのでしょうか?
(コード終了直前にDosコマンドに削除命令を渡して、
直後Dosコマンドから削除されるという方法)
::DeleteFileではアクセス拒否されるのでそれ以外の方法でしょうか?
話が横道にそれてすみません。
No.10
- 回答日時:
ちょっとだけ補足。
Windows 2000/XPにおいては、自分自身であるところの実行ファイルを実行中に削除することが、条件によっては可能です。(=できる場合と、できない場合がある。)
ただし、実行中に削除できた場合、これも条件によってはその後継続しての実行に支障をきたします。
仕事で調査したことがあるので、これは自信を持っていえます。どんな条件だったか、どんなエラーが出るのだったかは忘れてしまいましたが・・・(すみません)
No.9
- 回答日時:
>無いとしたら、なぜ無いのか推測でいいので答えてください
基本的に実行コードを作成するプログラムというのがコンパイラ
の事だからです。
しかし、コンパイルする必要の無いインタプリタ言語
例えばperl等を使えば、単にテキストを吐き出すだけでいいので
比較的簡単にできると思います。
またCやJava等でインタプリタ言語のような仕組みを作ることで
可能でしょう。
Windowsの場合ですが、実行ファイルは自分自身の書き換え
が可能です。(ちなみに削除は不可)
ですから実行ファイルの形式さえ理解していれば
C/C++でも、実行部を書き換える事が可能です。
(もちろん、ごり押しで全てアセンブラで書くという方法もあります。)
ファイルのフッタ(末尾)に独自に定義したバイトコードみたいなものを
書いてそれを実行部で解析して実行させるという方法が可能だと思います。
この方法だと自分自身が書き換わっているように見えますし
C/C++で比較的簡単に作れるでしょう。
>ファイルのフッタ(末尾)に独自に定義したバイトコードみたいなものを書いてそれを実行部で解析して実行させる
なるほど、たしかに自分自身が書き換わっているように見えるかもしれない面白い方法ですね。
回答ありがとうございました。
No.8
- 回答日時:
何と言っても、Prolog でしょう。
データとプログラムに区別はありません。
したがって、プログラムをデータとして読み込んで、処理することが可能です。
手続き型でなく、論理型といわれる言語なんで、とっつきにくいかもしれません。
只、問題によっては、他の言語の仕様のレベルを書くだけで、解決できるものもあります。
フリーの処理系は、
http://www.swi-prolog.org/
からダウンロードできます。
「Prolog」ですか・・・。
フリーの処理系をダウンロードしようとしましたが、英語でホームページが読めませんでした(T_T)
ちなみに、英語は読めませんが、「C言語」とか「JavaScript」などのプログラム言語は読めますので誤解しないでください。
回答ありがとうございました。
No.6
- 回答日時:
Windows DLLの「遅延読み込み」は、動的に関数のコール先を書き換えるコードによって実現しています。
「起動時読み込み」のDLLの場合コール先の書き換えはOSがやってくれますが、「遅延読み込み」の場合はこの書き換えを行うライブラリ関数が実行プログラム自身にリンクされており、その関数が書き換えを行うので、全体として見れば「プログラムが自身のコードを書き換えている」と言えなくもないかと思います。
また、「プログラムの書き換え」をもう少し広義にとらえて「プログラムファイルの書き換え」まで含めることにすると、これはもう数え切れないほどたくさんのプログラムが「自分自身であるところのプログラムファイル」を書き換えています。
DOS全盛の頃は、コマンドラインスイッチのデフォルトを変更すると、その内容をEXEファイルに書き込むものが多数ありました。
Windowsになってからも、例えばEXE内のリソースファイルを書き換えるようなプログラムで自分自身のリソースを書き換えれば、やはり同じようなことになります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- その他(社会・学校・職場) セルフイメージを高める21日間自分開発プログラム という自己啓発プログラムを売り込まれ 3 2022/03/30 16:52
- その他(メンタルヘルス) 申し込んで購入する価値あるでしょうか? 6 2022/03/31 17:12
- システム CPUの問題について 2 2022/07/09 12:04
- C言語・C++・C# [C言語] コメント文字列を無視して、数値データを読み込むプログラム部分について 5 2022/10/05 11:03
- C言語・C++・C# C言語 3 2022/10/04 15:07
- JavaScript プルダウンから1個選んで、豆知識を出すプログラム。 2 2022/06/21 17:27
- その他(プログラミング・Web制作) ロボットの作り方を教えて下さい! なにも知らない素人です。 全て自作する場合、どうすればよいでしょう 6 2022/12/18 01:25
- オープンソース IT用語、ソースとオブジェクト、改変と翻訳と翻案の違いなど どのようにりかいすればよいのですか 1 2022/09/09 10:02
- C言語・C++・C# c言語で自然数nを入力、2以上n以下の偶数の累積sumを求めるプログラムをfor文を使って作りたいで 4 2022/11/09 14:10
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
ランダムウォークのプログラム...
-
SendKeysについて
-
逆アセンブラの機能について
-
Visual C++ 6.0で作成したプロ...
-
コマンドプロンプト上で動作す...
-
並列計算をしたときのシステム...
-
PIC のデータEEPROMに書き込み...
-
ExcelのVBAでX=0〜1の定積分を...
-
関数の実行順序を知りたい
-
Vista c言語でのエラー
-
C言語でフォルダを開く
-
Xcode4.1でC言語の勉強
-
c言語 gcc オプション
-
C言語 fork()について
-
VBで235-234.3を0...
-
他のPC上にあるexeを、そのP...
-
クロック数の測定
-
実行中の実行ファイルの上書き
-
sendkeysにてALT+CTRL+INSERTを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Macターミナルで実行中のプログ...
-
プログラミング ソースコード
-
MACで動く実行ファイルをWindow...
-
なんかC言語でプログラム書いて...
-
sendkeysにてALT+CTRL+INSERTを...
-
他のPC上にあるexeを、そのP...
-
C言語で途中までしか、プログラ...
-
システム資源とは?
-
終了してもプログラムが実行し...
-
VBAで外部プログラムを非表示で...
-
VB上で実行中の無限ループの止め方
-
実行時エラー429
-
RPG パラメーターについて
-
C言語でフォルダを開く
-
プリントスクリーンをプログラ...
-
system関数を使用してsuコマン...
-
並列計算をしたときのシステム...
-
clock関数は正確じゃないの?
-
プログラムを走らせる
-
このプログラミングの問題を教...
おすすめ情報