スクリプトエンコーダーでスクリプトを保護する - TechRepublic

スクリプトエンコーダーでスクリプトを保護する - TechRepublic

Windows Script Host 環境で実行する VBScript または JScript スクリプトを作成済み、または作成予定で、それらのスクリプトをネットワーク上のユーザーに配布する場合は、スクリプトを配布前にエンコードしておくと、時間と手間を節約できます。その理由は次のとおりです。

VBScriptまたはJScriptで書かれたWindows Script Hostスクリプトは、単純なASCIIテキストファイルです。誰でもメモ帳で開いて、いじり回すことができます。ほとんどの人は意図的にスクリプトをいじり回すつもりはありませんが、実際にいじってしまうことはあります。では、正しく動作しなくなったスクリプトやデータを破壊したスクリプトを修正するのは誰の仕事でしょうか?ご想像の通り、あなたです。

Microsoftは、スクリプトファイルをコンパイル済み実行ファイルのようにエンコードできるScript Encoderツールを提供しています。暗号化ほどの保護は提供されませんが、スクリプト内のコードを閲覧したり変更したりするのを防ぎ、悪意のある行為を阻止するのに役立ちます。今回のDaily Drill Downでは、Microsoft Script Encoderの仕組みと、スクリプトのエンコード方法を説明します。

エンコードとはどういう意味ですか?
先に進む前に、スクリプトエンコーダーが提供する保護の種類を理解しておくことが重要です。まず、エンコードと暗号化は異なります。暗号化はエンコードよりも安全な保護方法です。

スクリプト・エンコーダは、もともとWeb上のHTMLファイル内に表示されるスクリプトコードを閲覧できないようにするために設計されました。スクリプトの知的財産権を保護し、悪意のあるサーファーがスクリプトコードをコピー、改変、そして自分のコードとして利用するのを防ぐことが目的でした。巧妙なスクリプトを開発するには、膨大な時間と労力がかかるからです。この点を踏まえると、スクリプト・エンコーダの真の目的は、スクリプトコードを隠蔽し、閲覧やコピーを不可能にしつつ、本来の機能を遂行することにあることがお分かりいただけるでしょう。

さて、Windows Script Host 用に設計されたスクリプトファイルを保護する場合、目標は少し広がり、環境も異なります。この場合、ユーザーによるコードの閲覧や変更を防ぐだけでなく、悪意あるソフトウェアによる悪用も防ぐことが目的です。環境が異なるのは、スクリプトが実際にユーザーが簡単にアクセスして開くことができる場所に存在するという点です。

Windows Script Host 環境向けに設計されたファイルを Script Encoder でエンコードすると、エンコードされたファイルは ASCII テキストファイルのままですが、理解可能なテキストは含まれません。つまり、エンコードされたスクリプトファイルを誰でもメモ帳で開くことができますが、表示されるのは意味不明な文字列だけです。メモ帳で実行ファイルを開いたときと同じような状態です。

この意味不明な文字列を見たユーザーがメモ帳を閉じて、このファイルのことを忘れてくれることを期待しています。しかし、エンコードされたテキストをたった1文字でも変更すると、スクリプトは完全に動作不能になってしまいます。エンコードされたテキストに変更を加えた後にスクリプトを実行しようとすると、エラーメッセージが表示され、スクリプトは実行されません。

この場合、サポートの呼び出しに応答してスクリプトを交換する必要がありますが、スクリプトによって損傷が発生する可能性はなくなります。

スクリプト・エンコーダーが採用しているエンコード方式では、ハッカーがスクリプトの実行内容や実行方法を把握するのを阻止できないことに注意してください。実際、インターネット上にはスクリプト・エンコーダーを解読するためのアルゴリズムを公開しているサイトがいくつかあります。例えば、ハッカーサイトAstaLaVista.comでは、「Windows Script Encoderの解読」という記事を公開しています。

スクリプト エンコーダの入手
スクリプト エンコーダでスクリプトを保護するには、まずダウンロードしてインストールする必要があります。これは非常に簡単です。まず、ブラウザで Microsoft Windows Script Technologies のダウンロード サイトにアクセスします。ファイルをダウンロードしたら、自己解凍型の実行ファイルをダブルクリックし、オンラインの指示に従ってください。

インストール手順が完了すると、スタートメニューにスクリプトエンコーダのヘルプファイルへのリンクが表示されます。スクリプトエンコーダはコマンドラインツールであるため、プログラムへのリンクは表示されません。スクリプトエンコーダの起動方法については後ほど説明します。

構文の確認
スクリプト・エンコーダーはコマンドラインツールであるため、起動時に使用できるパラメータがいくつかあります。スクリプト・エンコーダーの実行ファイルはScrenc.exeです。スクリプト・エンコーダーを使用するための構文は次のとおりです:
SCRENC [/s] [/f] [/xl] [/l language ] [/e ext ] source destination

これらの各パラメータについては表 Aで説明します。

表A
パラメータ 説明
/秒 メッセージが表示されないサイレントモードを有効にします
/f ソースファイルを上書きできるようにする
/xl 言語ディレクティブを除外します。ASPファイルで使用します。
/l 言語 エンコード時に使用するデフォルトのスクリプト言語を指定します
/e 拡張子 デフォルトのファイル拡張子を上書きします
ソース エンコードするファイルの名前
行き先 エンコードされたファイルの名前

スクリプトエンコーダパラメータ

スクリプト・エンコーダを使いやすく設定する
スクリプト・エンコーダはコマンドライン・ユーティリティであるため、実行するには、Windows NTまたはWindows 2000の場合はコマンドプロンプト、Windows 9x/Meの場合はMS-DOSプロンプトを起動する必要があります。また、「ファイル名を指定して実行」ダイアログボックスからスクリプト・エンコーダを起動することもできます。

スクリプトエンコーダをインストールすると、インストール手順によって実行ファイル Screnc.exe が C:\Program Files\Windows Script Encoder フォルダに配置されます。このフォルダに実行ファイルがあると、使用するにはこのフォルダに移動するか、コマンドラインでそのフォルダまで移動する必要があるため、あまり役に立ちません。いずれにしても、非常に不便です。

より良い解決策は、スクリプト エンコーダの実行ファイル(Screnc.exe)をシステムのPathステートメントに含まれるフォルダに移動することです。例えば、Windows NTまたはWindows 2000ではC:\WINNTフォルダ、Windows 9x/MeではC:\Windows\Commandフォルダに配置するとよいでしょう。こうすることで、コマンドラインと「ファイル名を指定して実行」ダイアログボックスの両方から、任意のフォルダからスクリプト エンコーダを簡単に実行できるようになります。

スクリプトファイルをエンコードする準備
スクリプトエンコーダの使い方は実はとても簡単です。まず、スクリプトファイルの先頭に特別なコードを挿入して、エンコードするスクリプトファイルを準備します。スクリプトファイルがVBScriptで記述されている場合、コードは次のようになります:
 '**Start Encode**

スクリプト ファイルが JScript で記述されている場合、コードは次の行になります:
//**Start Encode**

たとえば、Now関数を使用して現在の日付と時刻を取得し、その情報をMsgBox関数で表示するToday.vbsというVBScriptの小さなスクリプトファイルを作成したとします。次のように記述します。tn
= Now
MsgBox tn

このファイルをエンコードする準備をするには、次のようにスクリプトファイルの先頭に特別なコードを追加します:
 '**Start Encode**
tn = Now
MsgBox tn

スクリプト ファイルの先頭に特別なコードを追加して保存すると、エンコードする準備が整います。

スクリプトファイルのエンコード
Windows Script Host 環境で使用するためにファイルをエンコードする場合、処理の一環としてファイル拡張子を変更する必要があります。例えば、VBScript ファイルの拡張子は .vbs から .vbe に、JScript ファイルの拡張子は .js から .jse に変更します。これらの新しいファイル拡張子はどちらも、対応するスクリプトエンジンに関連付けられており、エンコードされたファイルであることを識別するのに役立ちます。

たとえば、Today.vbs ファイルをエンコードするには、コマンド ラインにアクセスし、スクリプト ファイルを含むフォルダーに移動して、次のコマンドを入力します:
Screnc Today.vbs Today.vbe

新しいファイルが作成されたら、内容を確認できます。確認するには、図Aに示すように、メモ帳でファイルを開くだけです。

図A
エンコードされたスクリプト ファイルをメモ帳で開くと、コードが意味不明な文字として表示されます。

Windows スクリプトファイルの操作
スクリプトにVBScriptやJScriptファイルではなくWindows スクリプトファイルを使用している場合、スクリプトエンコーダがWindows スクリプトファイル形式に対応しているかどうか疑問に思うかもしれません。答えは「いいえ」です。対応していません。

ただし、エンコードされたスクリプトはWindows Script Files経由で配布できます。そのためには、通常通りVBScriptまたはJScriptを使用してスタンドアロンのスクリプトファイルを作成します。スクリプトが期待どおりに動作するようになったら、上記の手順に従ってスクリプトファイルをエンコードしてください。

さて、通常通りWindowsスクリプトファイルを作成します。Windowsスクリプトファイル内のVBScriptまたはJScriptコードを配置する場所に、次の行を使用してエンコードされたスクリプトファイルをインクルードします。
<script language=”VBScript.Encode” src=” encodingfile.vbe ”>

ご覧のとおり、<script>タグはlanguage=”scriptlanguage”引数でスクリプトがエンコードされたファイルであることを指定するように変更されています。そして、src=”filename”引数でエンコードされたファイルの名前を指定します。

たとえば、Today.vbeスクリプトをWindowsスクリプトファイルに含めるには、次の行を使用します:
<script language=”VBScript.Encode” src=” Today.vbe ”>

結論
Windows Script Encoder は、スクリプトに手を加えようとする好奇心旺盛な従業員に対する抑止力として優れた機能を発揮します。使い方は簡単で、暗号化ほど手間がかかりません。スクリプトのエンコードには批判的な意見もあります。ユーザーからコードを隠蔽するだけなので、セキュリティ面で誤った認識を与えてしまうという意見もあります。しかし、スクリプトのエンコードはあらゆる不正侵入を完全に排除できる万能策ではありませんが、多くの状況で役立つ保護層を提供してくれます。

Tagged: