{{category "Windows Script Host (WSH)",nolink}}スクリプト・コードの暗号化
!!!Windows Script Encoder
VBScript や JScript と言ったスクリプト言語は、メモ帳などのテキストエディタで簡単に作成し実行することが出来る。しかし、それが故にソースコードを簡単に見ることが出来る。また、ユーザーによって不用意に改変することも出来てしまう。
そこで Script Encoder を使用することで、作成したスクリプトをエンコード(符号化)して、スクリプトのソースが安易に表示されたり変更されないように保護することが出来る。
ただし、エンコードしたスクリプトは、WSH か IE でしか実行できない。特にHTMLやASPの埋め込み、外部jsファイルをエンコードした場合、IE以外のブラウザではエラーとなってしまう。
*Script Encoder Overview (MSDN)
**http://msdn.microsoft.com/ja-jp/library/d14c8zsc%28en-us,VS.85%29.aspx
!!!インストール
Microsoft のダウンロードセンターから [Windows Script Encoder|http://www.microsoft.com/downloads/details.aspx?FamilyID=2976ee94-bec5-4314-84fd-8d7ec891c1c5&displaylang=ja] をダウンロードする。
ダウンロードした sce10jp.exe を実行しインストールを行う。デフォルトでは、「C:\Program Files\Windows Script Encoder」に本体やヘルプなどがコピーされる。
!!!エンコード処理
Script Encoder は、コマンドラインツールなので以下のように実行する。実行すると元となる sample.vbs がエンコードされ、sample.vbe が作成される。
C:\Program Files\Windows Script Encoder> screnc sample.vbs sample.vbe
平文で書かれたスクリプトが、人には判読できない文字列に置き換えられる。
>type sample.vbs
' Windows Script Encoder サンプル
'**Start Encode**
wscript.echo("hello world !!")
' コメントも
wscript.echo("日本語サンプル")
>type sample.vbe
' Windows Script Encoder サンプル
'**Start Encode**#@~^TAAAAA==@#@&hd1DbwYc+14WvJ4+^VG~SWD^[Pe"J*@#@&B,
コメントも@#@&hdm.raY +14WvJ日本語サンプルEb@#@&PRAAAA==^#~@
//ただし、2バイト文字の日本語はエンコードされないので注意。また、エンコードマーカーを用いることでそれ以降がエンコードの対象となる。
//
//なお、エンコードした後のスクリプトファイル拡張子・埋め込み時の言語指定は、それぞれ「.vbe」「VBScript.Encode」と「.jse」「JavaScript.Encode」でなければならない。
!!2バイト文字 (日本語)
スクリプトに含まれる2バイト文字はエンコードされない。コメントおよびメッセージなどに2バイト文字を使用した場合、エンコードされずにスクリプトの中に残る。
!!エンコードマーカー
Script Encoder は、スクリプトコードのみをすべてエンコードします。エンコードマーカーを指定することで、エンコードを始める位置を指定することができる。例えば、著作権の表示などと言ったものを残すことが出来る。
マーカーがなければ、スクリプト全体がエンコードされますが、マーカーが最後にあると、何もエンコードされません。マーカーは行コメントから含めて正確に指定する必要がある。
::VBScript エンコード マーカー
:::'**Start Encode**
::JScript エンコード マーカー
::://**Start Encode**
!!言語指示子・ファイル拡張子
エンコードした後は、スクリプトファイル拡張子や タグまたは <% ... %> タグの中に埋め込まれたスクリプトと、有効な HTML を含む Active Server Page で構成される。
// この書式を使用するアプリケーションには、Microsoft Internet Information Server (IIS) がある。
ASP として識別されるファイル拡張子は、.asp、.asa、.cdx です。
!!HTML
この書式は、有効な HTML と組み込みスクリプトを含むテキストファイルで構成される。
// この書式を使用するアプリケーションには、Microsoft FrontPage、Microsoft Visual InterDev および、事実上すべての Web ページ作成ソフトとブラウザが含まれる。
HTML として識別されるファイル拡張子は、.htm と .html です。
!!スクリプト コンポーネント
この書式は、 タグで囲まれた有効なスクリプトコードを含むテキストファイルで構成される。
スクリプトコンポーネントとして認識されるファイル拡張子は、.sct と .wsh です。
!!テキスト
この書式は、タグのないスクリプトのみのテキストファイルで構成される。
// この書式を使用するアプリケーションには、Windows Scripting Host (WSH) と Microsoft Outlook がある。
テキストとして識別されるファイル拡張子は、.js と .vbs ですが、エンコードすると、それぞれ .jse および .vbe に変わる。
!!!補足
!!エンコードされたスクリプトの解読
""Note that this encoding only prevents casual viewing of your code; it will not prevent the determined hacker from seeing what you've done and how.
""このエンコードは、コードの安易な表示を防ぐことが目的であり、執拗なハッカーによる覗き見を防ぐものではないことに注意してください。
ヘルプなどにも書かれているようにエンコードしたスクリプトは、デコードすることが可能でツールも存在する。
//*Windows Script Decoder
//**http://www.virtualconspiracy.com/content/scrdec/intro]
!!Windows Script File (.wsf)
Script Encoder にスクリプトコンポーネントとして関連づけされている「.wsh」は、WSHでは設定ファイル (Windows Script Host Settings File) として関連づけされていて、中身は実行するスクリプトファイルへのリンクや設定が保存されているだけでスクリプトコードは含まれていない。
逆に、WSHでスクリプトファイルとして使用される「.wsf (Windows Script File)」は、コードが含まれるが Script Encoder の有効な拡張子として認識されない。そのため、wsf をエンコードする場合は、"/e sct" を指定する必要がある。
また、スクリプトの内容にもいくつか注意が必要となる。
*「」と言ったXML宣言を記述出来ない。
*Shift JIS 以外の文字コードを使用できない。
**wsfでXML宣言に正しく文字コード指定すればUTFやEUCなども使える。
**エンコードはされるが、実行時にメッセージは文字化けを起こす。
*スクリプト全体を「」やCDATAセクション内で記述することが出来ない。
**の直前までがスクリプトとして扱われるため。
**HTMLの場合、「」と言った書き方をよくする。
**XMLの場合、CDATAセクション内に書くことで、中のマークアップを解釈しないように出来る。
この辺は、Script Encoder が 2001/10/19 公開で随分と古いせいもあるのかな。
!!!参考
*WSHの暗号化 - Script Encoderの紹介
**http://www.atmarkit.co.jp/fsecurity/rensai/securitytips/023wsh.html
*WSHスクリプト・コードを暗号化する
**http://www.atmarkit.co.jp/fwin2k/win2ktips/443wshenc/wshenc.html