Windows Script Encoderの使い方の続きです。
Windows Script Encoderで最近、面白い使い方を見つけました。
A要素のHREF属性に「javascript:」ではじまるURLを記述するとJavaScriptが実行できるのはご存じの方も多いかと思います。
例えば、<a href="javascript:alert('Hello World!');">サンプルの実行</a>と記述すると、ページを移動するのではなくアラートで「Hello World!」と表示されます。下に例を用意しました。
さて、こんな始まりからして大体想像が付いたかも知れませんが、少し工夫することで、Windows Script Encoderで暗号化されたコードを同じような方法で実行することができるのです。
それにはJScriptのexecScriptメソッドを利用します。execScriptメソッドは引数にスクリプトのコードとスクリプトの言語を入れることで、その言語のスクリプトを実行することができます。
例えば、次のコードはVBScriptを実行するものです。
<a href='javascript:if(window.execScript)execScript("Dim n\nn=MsgBox(\"賞味期限を大幅に過ぎていたことに気付きました!\",18,\"賞味期限が切れています!!\")\nIf n = 3 Then\nMsgBox(\"もう全部食べてしまいました!\")\nElseIf n = 4 Then\nMsgBox(\"やけ食いは良くないです!\")\nElse\nMsgBox(\"おなかを壊しました・・・\")\nEnd If","VBScript");'>食べる</a>
これを設置すると、次のリンクのようになります(Internet Explorerでしか実行できません)。
本題の暗号化されたJScriptを実行するためのURLは、次のように記述します
javascript:if(window.execScript)execScript("暗号化されたコード","JScript.Encode");
「暗号化されたコード」をWindows Script Encoderで暗号化されたJScriptに置き換えてください(つまり「#@~^〜〜〜^#~@」の部分に置き換えます)。
ちなみに、「JScript.Encode」を「VBScript.Encode」に置き換えると、Windows Script Encoderで暗号化されたVBScriptが実行できます。
下は暗号化されたJScriptを実行する例です(Internet Explorer専用)。
おそらくSCRIPT要素のLANGUAGE属性に対応しているのだろうと思います。
これならMacromedia FlashのgetURLメソッドででも実行できそうです(試してないけど)。