WindowsでWSHスクリプトコードを暗号化する:Tech TIPS
スクリプト言語によるプログラミングは簡易な半面、ソース・コードがエンドユーザーに露出してしまう、コードの改変が可能である、などの問題も存在する。そこでし、フリーで利用可能なScript Encoderを利用することで、スクリプト・コードを暗号化し、ユーザーの目から隠ぺいできる。
対象OS:Windows NT / Windows 2000 / Windows XP / Windows Server 2003
解説
WSH(Windows Scripting Host)やASP(Active Server Pages)、Webページのクライアント・サイド言語として、VBScriptやJavaScript(JScript)のようなスクリプト言語が適用されるケースは多い。スクリプト言語はその扱いの簡便さから多くのユーザーに親しまれ、急速に普及した。
しかし、スクリプト言語をビジネスの局面で本格的に活用しようとした場合、いくつかの問題もある。
1つに、ソース・コードを一般ユーザーの目から隠すことができないという点だ。いうまでもなく、ソース・コードとは、アプリケーションを販売する企業にとっては、知的財産の集積であり、付加価値の源泉だ。しかし、スクリプト言語を採用した場合、コードはまったく保護されないので、第三者がそのコードを改変して、自分のアプリケーションに取り込むことも自由にできる。これは、ビジネスとしてスクリプト言語を利用する場合に、致命的な阻害要因となるものだ。
また、ソース・コードを自由に見られるということは、アプリケーションを任意の第三者が自由に書き換えられることを意味する。本来は問題なく動作すべきアプリケーションが、第三者の手によって不用意に改変されてしまったとしても、これを防ぐ手段は存在しない。
そこで登場するのが「Script Encoder」だ。Script Encoderとは、文字どおり、スクリプト言語で開発されたソース・コードをエンコード(符号化)するためのツールで、これによってコードの露出を防ぐことができる。エンコードされたコードは、1字でも変更されると、スクリプト全体の整合性が失われて使用できなくなるので、第三者による不用意な改変も防ぐことができる。
操作方法
●手順1―Windows Script Encoder(日本語版)をインストールする
まずは、Windows Script Encoderをインストールしておこう。Script Encoderのダウンロード先は、以下のとおりである。
ダウンロードしたsce10jp.exeをダブルクリックすれば、インストーラが起動される。使用許諾やインストール先フォルダなどを確認した後、インストール処理が開始される。デフォルトの設定では、「C:\Program Files\Windows Script Encoder」に、Script Encoder本体やヘルプ・ファイルなど必要なファイルがコピーされるので、エクスプローラなどから確認してみてほしい。
●手順2―ソース・コードのエンコード処理を行う
Script Encoderは、コマンド・プロンプトから利用可能なコマンドライン・ツールだ。例えば、VBScriptファイルsample.vbsを暗号化したい場合には、カレント・フォルダを「C:\Program Files\Windows Script Encoder」(Script Encoderのインストール・フォルダ)に移動してから、以下のように記述すればよい。元となるsample.vbsは、Script Encoder(screnc)と同一のフォルダに保存されているものとする。
C:\>cd C:\Program Files\Windows Script Encoder
C:\Program Files\Windows Script Encoder>screnc sample.vbs sample.vbe
この結果、sample.vbeが作成されれば成功だ。以下に、入力元のsample.vbsと出力結果のsample.vbeを示しておこう。平のテキストであったスクリプト・コードが、人間の目では判読できない文字列に置き換えられているのが確認できるはずだ(ただし、コード内に2bytesが含まれている場合には、その部分だけはエンコードされないので、注意すること)。
※ファイルsample.vbs
'Script Encoderのサンプル
'**Start Encode**
WScript.Echo("サンプル")
エンコードされた結果は次のとおり。
※エンコードされたファイルsample.vbeの内容
'Script Encoderのサンプル
'**Start Encode**#@~^GAAAAA==@#@&j1DbwYc214WvJサンプルE#JQUAAA==^#~@
「'**Start Encode**」(JavaScriptの場合は「//**Start Encode**」)は、エンコードの開始位置を定めるエンコード・マーカーだ。Script Encoderは、エンコード・マーカーとして指定された以降のコードのみをエンコード処理する。例えば、著作権の表示など、ソース・コードの一部をエンコード処理の対象外としたい場合に使用すると良いだろう。無指定の場合は、スクリプト部分がすべてエンコードの対象となる。
なお、VBScript、JavaScriptファイルをエンコードした後の拡張子は、それぞれ「.vbe」(VBScript.Encode)「.jse」(JavaScript.Encode)でなければならない点に注意すること。エンコード後の「.vbe」(「.jse」)ファイルもエンコード前とまったく同様の処理が行われることを確認してみてほしい。
●エンコーダ・オプション
以上は、最も単純な暗号化の例であるが、Script Encoderにはさまざまなオプションが用意されている。以下に、その中でも主要なものを挙げておくことにしよう。
オプション | 概要 | 使用例 |
---|---|---|
/s | 途中経過を出力しない | screnc.exe /s sample.vbs sample.vbe |
/f | エンコード結果で入力ファイルを上書きする(元のファイルは残らない) | screnc.exe /f sample.asp |
/xl | 「.asp」ファイルの先頭に@Languageディレクティヴを追加しない(「.asp」ファイルのエンコード時にのみ指定可能) | screnc.exe /xl sample.asp sample2.asp |
/l <使用言語> | コード内に言語の指定がない場合に使用するデフォルト言語(VBScript|JScript)。/lオプションが無指定の場合、「.html」「.sct」「.js」ファイルはJScript、「.asp」「.vbs」ファイルはVBScriptであると見なす | screnc.exe /l VBScript sample.asp sample2.asp |
/e <拡張子> | Script Encoderが認識できない拡張子(例えば、「.wsf」など)をエンコードしようとした場合、特定のファイル拡張子への関連付けを行う(ファイル拡張子については以下の表参照) | screnc.exe /e sct sample.wsf sample.wsf |
screncコマンドのオプション |
なお、Script Encoderが標準で認識できる拡張子は、以下のとおりである。
拡張子 | 概要 |
---|---|
.asa | Active Server Applicationファイル |
.asp | Active Server Pagesファイル |
.cdx | Active Channelファイル |
.htm、.html | HTMLファイル |
.js | JavaScriptファイル |
.sct | Windows Script Componentファイル |
.vbs | VBScriptファイル |
Script Encoderが認識できるファイルの拡張子 |
例えば、WSHの標準的な「.wsf」ファイルはScript Encoderでは認識できない。そこで、表内の「/e」オプションを利用して、「.sct」ファイルに関連付ける必要がある。
なお、Script Encoderのドキュメントにも書かれているように、Script Encoderの目的はコードの安易な表示・改変を防ぐことにある。暗号を解こうとするクラッカーから「完全にコードを保護するものではない」ので、その点は理解した上で利用してほしい。
Copyright© Digital Advantage Corp. All Rights Reserved.