(57)【特許請求の範囲】
【請求項１】
悪意のある実行ファイルを検出するためのシステムであって、
前記実行ファイルは、インタープリタを含み、
前記システムは、
コンピューティングハードウェアを含むコンピューティングプラットフォームと、命令と、を備え、
前記コンピューティングハードウェアは、少なくとも１つのプロセッサ、データストレージ、前記コンピューティングハードウェア上に実装されたオペレーティングシステム、及び入出力機構を有し、
前記命令は、前記コンピューティングプラットフォーム上で実行されると、前記コンピューティングプラットフォームを、アナライザ、スクリプトエミュレータ、マシンコードエミュレータとして機能させ、
前記アナライザは、実行ファイルに関連するスクリプトを疑似コードに変換し、前記疑似コードのエミュレーションプロセスを監視するように構成され、
前記スクリプトエミュレータは、前記疑似コードを順次エミュレートし、エミュレーションの結果をエミュレータ動作ログに書き込むように構成され、
前記マシンコードエミュレータは、前記アナライザにより、疑似コードからマシンコードへの移行が検出された場合に、前記疑似コードに関連する前記マシンコードをエミュレートするように構成され、
前記アナライザはさらに、前記エミュレータ動作ログを解析し、前記実行ファイルが悪意のあるファイルであるか否かについて決定するように構成される、
システム。
【請求項２】
前記スクリプトは前記実行ファイルに含まれる、
請求項１に記載のシステム。
【請求項３】
前記アナライザは、
前記スクリプトを前記実行ファイルから抽出し、
前記スクリプトをデコンパイルし、前記スクリプトが書き込まれたプログラミング言語でオリジナルコードを出力するように構成される、
請求項２に記載のシステム。
【請求項４】
前記スクリプトは、入出力機構により受信され、前記インタープリタにより実行される、
請求項１に記載のシステム。
【請求項５】
前記アナライザは、前記スクリプトを疑似コードに変換する前に、前記スクリプトを易読化するように構成される、
請求項４に記載のシステム。
【請求項６】
前記マシンコードエミュレータは、
前記マシンコードエミュレータを用いた前記疑似コードのエミュレーション中に起動された第２スクリプトをエミュレートするように構成される、
請求項１に記載のシステム。
【請求項７】
前記命令は単一の実行スレッドで実装され、
前記単一の実行スレッドは、前記マシンコードエミュレータと前記スクリプトエミュレータとを切り替えるように構成される、
請求項１に記載のシステム。
【請求項８】
前記命令が複数の実行スレッドで実装され、
前記マシンコードエミュレータを実行する第１実行スレッドは、前記スクリプトエミュレータを実行するための第２実行スレッドを起動するように構成される、
請求項１に記載のシステム。
【請求項９】
コンピュータシステムに対する悪意のある実行ファイルを検出するためのマシン実装方法であって、前記コンピュータシステムはコンピューティングハードウェアを含み、前記コンピューティングハードウェアは、少なくとも１つのプロセッサ、データストレージ、前記コンピューティングハードウェア上に実装されたオペレーティングシステム、及び入出力機構を有し、前記実行ファイルはインタープリタを含み、
前記方法は、変換ステップ、スクリプトエミュレータを用いたエミュレートステップ、マシンコードエミュレータを用いたエミュレートステップ、書込ステップ、及び解析ステップを含み、
前記変換ステップは、少なくとも１つのプロセッサ上で実行されるアナライザを利用して、前記実行ファイルに関連するスクリプトを疑似コードに変換し、
前記スクリプトエミュレータを用いたエミュレートステップは、少なくとも１つのプロセッサ上で実行されるスクリプトエミュレータを利用して前記疑似コードをエミュレートし、前記スクリプトエミュレータは、前記スクリプト内のコマンドを処理するように構成され、
前記マシンコードエミュレータを用いたエミュレートステップは、少なくとも１つのプロセッサ上で実行されるマシンコードエミュレータを利用して、疑似コードからマシンコードへの移行が検出された場合に前記疑似コードに関連する前記マシンコードをエミュレートし、
前記書込ステップは、前記データストレージに記憶されたエミュレータ動作ログにエミュレーションの結果を書き込み、
前記解析ステップは、前記アナライザにより、前記エミュレータ動作ログを解析し前記実行ファイルが悪意のあるファイルであるか否かについて決定する、
マシン実装方法
【請求項１０】
前記スクリプトは前記実行ファイルに含まれる、
請求項９に記載のマシン実装方法。
【請求項１１】
前記スクリプトを疑似コードに変換する前に、
前記スクリプトを前記実行ファイルから抽出し、
前記スクリプトをデコンパイルし、前記スクリプトが書き込まれたプログラミング言語でオリジナルコードを出力するように構成される、
請求項１０に記載のマシン実装方法。
【請求項１２】
前記スクリプトは、前記インタープリタにより実行されるように構成される、
請求項９に記載のマシン実装方法。
【請求項１３】
前記アナライザは、前記スクリプトを疑似コードに変換する前に、前記スクリプトを易読化するように構成される、
請求項１２に記載のマシン実装方法。
【請求項１４】
前記解析ステップは、
前記エミュレータ動作ログコンテンツと、前記データストレージに格納された１又は複数の悪意の振る舞いテンプレートと、を比較する比較ステップを備える、
請求項９に記載のマシン実装方法。
【請求項１５】
前記解析ステップは、前記エミュレータ動作ログ内で検出された不審な動作毎に不審カウンタをインクリメントし、前記不審カウンタが閾値を上回った場合、前記実行ファイルが悪意のあるファイルであると決定する、
請求項９に記載のマシン実装方法。
【請求項１６】
前記エミュレートステップは、
疑似コードコマンドを読み取り、
前記インタープリタにより、１又は複数の関連するコンピュータシステムリソース動作を決定し、
前記１又は複数の関連するコンピュータシステムリソース動作のエミュレーションを実行する、
請求項９に記載のマシン実装方法。
【請求項１７】
前記疑似コードからマシンコードへの移行は、
オペレーティングシステムのＡＰＩ関数の呼び出し、
前記データストレージに記憶された動的ライブラリからの関数の呼び出し、
前記実行ファイルのリソースへのアクセスの呼び出し、又は
前記スクリプトエミュレータで処理できない疑似コードコマンドの少なくとも１つにより検出される、
請求項９に記載のマシン実装方法。
【請求項１８】
前記マシンコードエミュレータは、
前記マシンコードエミュレータを用いた前記疑似コードのエミュレーション中に起動された第２スクリプトをエミュレートするように構成される、
請求項９に記載のマシン実装方法。
【請求項１９】
前記少なくとも１つのプロセッサは、単一の実行スレッドを実装する単一のプロセッサであり、前記方法は前記単一の実行スレッドにより実行され、
前記単一の実行スレッドは、前記マシンコードエミュレータと前記スクリプトエミュレータとを切り替えるように構成される、
請求項９に記載のマシン実装方法。
【請求項２０】
前記方法は、前記少なくとも１つのプロセッサ上の複数の実行スレッドにより実行され、
前記マシンコードエミュレータを実行する第１実行スレッドは、前記スクリプトエミュレータを実行するための第２実行スレッドを起動するように構成される、
請求項９に記載のマシン実装方法。
【請求項２１】
悪意のある実行ファイルを検出するためのマルチスレッドコンピュータシステムであって、
前記実行ファイルは、インタープリタを含み、
前記システムは、少なくとも１つのプロセッサ、前記少なくとも１つのプロセッサと動作可能に接続されたメモリ、第１実行スレッド、第２実行スレッド、及び第３実行スレッドを含み、
前記第１実行スレッドは、前記少なくとも１つのプロセッサにより実装され、前記第１実行スレッドは、スクリプトを疑似コードに変換するように構成されるアナライザを実行し、前記スクリプトは、前記実行ファイルに含まれ又は前記インタープリタにより実行されるように構成され、
前記第２実行スレッドは、前記少なくとも１つのプロセッサにより実装され、前記第２実行スレッドは、スクリプトエミュレータを実行し、前記スクリプトエミュレータは、前記疑似コードをエミュレートし、その後にスクリプトエミュレータによるエミュレーションの結果を出力するように構成され、
前記第３実行スレッドは、前記少なくとも１つのプロセッサにより実装され、前記第３実行スレッドは、マシンコードエミュレータを実行し、前記マシンコードエミュレータは、疑似コードからマシンコードへの移行が検出された場合に前記疑似コードに関連する前記マシンコードをエミュレートし、マシンコードエミュレータによるエミュレーションの結果を出力するように構成され、
前記アナライザはさらに、前記スクリプトエミュレータによるエミュレーションの結果及び前記マシンコードエミュレータによるエミュレーションの結果を解析し、前記実行ファイルがマルチスレッドコンピュータシステムに対して悪意のあるファイルであるか否かについて決定するように構成される、
マルチスレッドコンピュータシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
＜関連発明の相互参照＞
本出願は、２０１５年９月１５日に出願されたロシア連邦特許出願番号２０１５１４１５４３を基礎出願とするものである。また、先の出願は、参照により本明細書に組み込まれる。
【０００２】
本発明は、概して、アンチウィルスソリューションに関する。より詳細には、本発明は、エミュレーションを用いた悪意のあるオブジェクトの検出に関する。
【背景技術】
【０００３】
悪意のあるプログラムを含む今日のプログラムのコードには、複雑な命令セット（シフト、コール、サイクル等）が含まれている。さらに、高水準プログラミング言語の人気の高まりや、コンピュータ機器及びオペレーティングシステムの高度化に伴い、実行ファイルは絶えず複雑さを増している。このような複雑さは、信頼できるアプリケーションと悪意のあるアプリケーションの両方に適用される。悪意のあるアプリケーションは、（ユーザーの視点から）多数の否定的で望ましくない動作を実行する可能性がある。このような動作の例としては、パスワードやその他の機密ユーザーデータの盗難、ＤＤｏＳ攻撃を実行する又はスパムの送信を目的としたボットネットワークへのコンピュータ接続、金銭を強要することを目的としたシステム運用の妨害等が挙げられる。
【０００４】
ＡｕｔｏＩｔは、Ｍｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓのタスクを自動化するためのフリーウェアプログラミング言語である。初期のバージョンでは、ＡｕｔｏＩｔで記述されたソフトウェアは、主にＭｉｃｒｏｓｏｆｔ  Ｗｉｎｄｏｗｓプログラム用の自動化スクリプトの作成に使用されていた。自動化スクリプトは、多数のコンピュータに同一のプログラムセットをインストールするなどの繰り返しタスクを実行する場合に便利である。ＡｕｔｏＩｔの最新バージョンでは、言語の機能が大幅に向上したことにより、ＡｕｔｏＩｔは汎用プログラミング言語に近づいた。ＡｕｔｏＩｔ言語で記述されたスクリプトは、任意のライブラリから独立した実行ファイルにコンパイルできる。もっともなことであるが、ウイルス作成者は、言語の幅広い機能及び実行ファイルとしてのスクリプト表現の最終形式であるがゆえに、ＡｕｔｏＩｔスクリプト言語に魅力を感じている。また、かかる特徴は、配布に便利である。
【０００５】
その結果、コンピュータのセキュリティを確保するためには、ＡｕｔｏＩｔスクリプト言語でコンパイルされた実行ファイル内の悪意のあるオブジェクトを検出する必要がある。例えば、従来のようなシグネチャベースで悪意のあるオブジェクトを検出する方法は、ＡｕｔｏＩｔスクリプト言語でコンパイルされた実行ファイルに適用することが困難である。かかる方法では、スクリプトを難読化したり、実行ファイル自体を覆ってしまったりすることができるからである。実行ファイル自体を覆うのは、実行ファイルを圧縮及び／又は暗号化し、その解凍及び実行に必要なコードを添付することによって行うことができる。別の例では、悪意のあるオブジェクト（特に、かかる実行ファイルのエミュレーション）を検出する従来のヒューリスティックな方法も効果的でない。かかる方法では、インタープリタ（ＡｕｔｏＩｔスクリプトを含む実行ファイルの変更不可能な部分）が存在するため、エミュレーション操作が非常に遅くなるからである。その結果、ウイルス作成者は、インタープリタに多くの無駄な動作を実行させることで、ウイルスが検出されることを簡単に防止することができる。また、ウイルス作成者は、仮想マシン上の実行ファイルの起動に基づいて悪意のあるオブジェクトを検出する従来のシステムに簡単に対抗することができる。例えば、実行中の単純な休止（例えば、スリープコマンドの呼び出し）やスクリプトコード内の多くの無駄なサイクルは、検出システムによる判定には使用されない。それどころか、システムは、悪意のあるオブジェクトが悪意のある動作を開始する前でも、割り当てられた時間（操作のタイムアウト）の満了時に検査を完了する。このような場合、かかるファイルの実行ログのサイズはギガバイトに達する可能性がある。
【０００６】
したがって、スクリプト言語インタープリタを有する悪意のある実行可能ファイルを効率的に検出するためのシステム及び方法が必要とされている。
【発明の概要】
【０００７】
本実施形態は、前述の業界のニーズを実質的に満たす。一実施形態によれば、本発明のシステム及び方法は、スクリプトエミュレータ及びマシンコードエミュレータを組み合わせることによって、スクリプト言語インタープリタを含む悪意のある実行ファイルを検出するように構成される。かかる実施形態により、コンピュータシステムのセキュリティが向上する。より一般的には、コンピュータのセキュリティは、エミュレータを組み合わせることにより、悪意のある実行ファイルを検出することによって実現される。
【０００８】
一実施形態では、悪意のある実行ファイルであってインタープリタを含む実行ファイルを検出するためのシステムは、コンピューティングハードウェアを含むコンピューティングプラットフォームと、命令と、を備え、前記コンピューティングハードウェアは、少なくとも１つのプロセッサ、データストレージ、前記コンピューティングハードウェア上に実装されたオペレーティングシステム、及び入出力機構を有し、前記命令は、前記コンピューティングプラットフォーム上で実行されると、前記コンピューティングプラットフォームを、アナライザ、スクリプトエミュレータ、マシンコードエミュレータとして機能させ、前記アナライザは、実行ファイルに関連するスクリプトを擬似コードに変換し、前記擬似コードのエミュレーションプロセスを監視するように構成され、前記スクリプトエミュレータは、前記擬似コードを順次エミュレートし、エミュレーションの結果をエミュレータ動作ログに書き込むように構成され、前記マシンコードエミュレータは、前記アナライザにより疑似コードからマシンコードへの移行が検出された場合に、前記疑似コードをエミュレートするように構成され、前記アナライザはさらに、前記エミュレータ動作ログを解析し、前記実行ファイルが悪意のあるファイルであるか否かについて決定するように構成される。
【０００９】
他の実施形態では、コンピュータシステムに対する悪意のある実行ファイルを検出するためのマシン実装方法はコンピューティングハードウェアを含み、前記コンピューティングハードウェアは、少なくとも１つのプロセッサ、データストレージ、前記コンピューティングハードウェア上に実装されたオペレーティングシステム、及び入出力機構を有し、前記実行ファイルはインタープリタを含み、前記方法は、変換ステップ、スクリプトエミュレータを用いたエミュレートステップ、マシンコードエミュレータを用いたエミュレートステップ、書込ステップ、及び解析ステップを含み、前記変換ステップは、少なくとも１つのプロセッサ上で実行されるアナライザを利用して、前記実行ファイルに関連するスクリプトを擬似コードに変換し、前記スクリプトエミュレータを用いたエミュレートステップは、少なくとも１つのプロセッサ上で実行されるスクリプトエミュレータを利用して前記疑似コードをエミュレートし、前記スクリプトエミュレータは、前記スクリプト内のコマンドを処理するように構成され、前記マシンコードエミュレータを用いたエミュレートステップは、少なくとも１つのプロセッサ上で実行されるマシンコードエミュレータを利用して、疑似コードからマシンコードへの移行が検出された場合に前記疑似コードをエミュレートし、前記書込ステップは、前記データストレージに記憶されたエミュレータ動作ログにエミュレーションの結果を書き込み、前記解析ステップは、前記アナライザにより、前記エミュレータ動作ログを解析し前記実行ファイルが悪意のあるファイルであるか否かについて決定する。
【００１０】
他の実施形態では、悪意のある実行ファイルであってインタープリタを含む実行ファイルを検出するためのマルチスレッドコンピュータシステムは、少なくとも１つのプロセッサ、前記少なくとも１つのプロセッサと動作可能に接続されたメモリ、第１実行スレッド、第２実行スレッド、及び第３実行スレッドを含み、前記第１実行スレッドは、前記少なくとも１つのプロセッサにより実装され、前記第１実行スレッドは、スクリプトを疑似コードに変換するように構成されるアナライザを実行し、前記スクリプトは、前記実行ファイルに含まれ又は前記インタープリタにより実行されるように構成され、前記第２実行スレッドは、前記少なくとも１つのプロセッサにより実装され、前記第２実行スレッドは、スクリプトエミュレータを実行し、前記スクリプトエミュレータは、前記擬似コードを順次エミュレート、スクリプトエミュレータによるエミュレーションの結果を出力するように構成され、前記第３実行スレッドは、前記少なくとも１つのプロセッサにより実装され、前記第３実行スレッドは、マシンコードエミュレータを実行し、前記マシンコードエミュレータは、疑似コードからマシンコードへの移行が検出された場合に前記疑似コードをエミュレートし、マシンコードエミュレータによるエミュレーションの結果を出力するように構成され、前記アナライザはさらに、前記スクリプトエミュレータによるエミュレーションの結果及び前記マシンコードエミュレータによるエミュレーションの結果を解析し、前記実行ファイルがマルチスレッドコンピュータシステムに対して悪意のあるファイルであるか否かについて決定するように構成される。
【００１１】
上記の概要は、本明細書の主題に関する例示された各実施形態又はすべての実装を説明することを意図するものではない。以下の図面及び詳細な説明は、様々な実施形態をより具体的に例示する。
【図面の簡単な説明】
【００１２】
本明細書の主題は、添付の図面とともになされる以下の種々の実施形態に関する詳細な説明を考慮することにより、完全に理解される。
【図１】図１は、一実施形態における、ＡｕｔｏＩｔを使用してコンパイルされた実行ファイルの構造を表すブロック図である。
【図２】図２は、一実施形態における、悪意のある実行ファイルを検出するための方法のフローチャートである。
【図３】図３は、一実施形態における、悪意のある実行ファイルを検出するためのシステムのブロック図である。
【図４】図４は、一実施形態における、エミュレーションスイッチングサブシステムのブロック図である。
【図５】図５は、本発明の実施形態を実装するように構成されたコンピュータシステムのブロック図である。  種々の実施形態は、様々な変更及び代替形態を取りうるが、その詳細は、図面に例示されており、以下に詳細に説明される。しかしながら、特許請求の範囲に記載された発明を特定の実施形態に限定する意図はないことを理解されたい。それとは逆に、特許請求の範囲によって規定される主題の精神及び範囲内に入るすべての修正、等価物、及び代替物をカバーすることを意図するものである。
【発明を実施するための形態】
【００１３】
一実施形態によれば、システム及び方法は、例えばＡｕｔｏＩｔ言語で記述されたスクリプトからコンパイルされた実行ファイルの分析を実行するように構成される。かかる実行ファイルに必要な機能として、インタープリタが含まれる。したがって、本明細書において、「実行ファイル」とは、インタープリタを含む実行ファイルを意味する。悪意のある実行ファイルを検出するために、実行ファイルに含まれるスクリプトのエミュレーションが実行され得る。かかるエミュレーションにより、実行ファイル自体のエミュレーションを実行する場合に時間を節約できる（現在は時間の節約が不十分である）。しかし、スクリプトを直接エミュレーションする場合、従来のマシンコードに基づくエミュレーションと比較して、より少ない数の実行メディア変数が監視される。したがって、スクリプトエミュレーションのみが実行される場合には、スクリプトの動作を完全に調べることができないため、実行ファイルを信頼できるファイル（又は「クリーン」なファイル、悪意があるとは言えないファイル）として誤って解釈する可能性がある。このため、本発明の実施形態は、リソース消費の少ないスクリプトのエミュレーションに従って、実行ファイルを検査するように構成されている。なお、場合によっては、より多くのリソースを消費する従来のマシンコードのエミュレーションを利用してもよい。
【００１４】
エミュレーションは、実行ファイルを含み得る潜在的な悪意のあるプログラムを調べる１つの方法である。この検査方法は、ウイルス対策業界において、プログラムの動作を分析するために使用される。かかる検査方法は、種々のエミュレーション方法を実装できる。あるエミュレーション方法は、マシンコードエミュレータを用いた従来のエミュレーションを含む。従来のエミュレーションは、プロセッサ、メモリ、及び他のデバイスのソフトウェアベースのコピーを含む。かかるコピーは、プロセッサ、メモリレジストリ、及び一連のプロセッサ命令の仮想コピーを作成することにより実現される。このようにして、プログラム命令は実際の物理プロセッサ上ではなく仮想コピー上で実行される。そして、システムＡＰＩ関数の呼び出しがエミュレートされ、関数操作のエミュレートされた結果が返信される。
【００１５】
エミュレータの初期化プロセスは、大量のリソースを消費する可能性があることに注意されたい。エミュレータの初期化には、必要なハードウェア（プロセッサ、ＲＡＭ）の仮想コピーの作成だけでなく、アプリケーションの実行をエミュレートするオペレーティングシステム（ＯＳ）のいくつかの主要コンポーネントの仮想コピーの作成も含まれ得る。ＯＳの主要コンポーネントは、例えば以下の通りである：（１）割り込み処理及び履いた処理など、ＯＳの動作に必要な機能を担当するオペレーティングシステムのカーネル部分。（２）必要なデバイスのドライバ、及びメモリマネージャ。したがって、動作中のＯＳの正しい「プレイバック（エミュレーション）」には、重要なコンピュータシステムのリソースを消費することが必要となる。このため、リソースの消費量が多いマシンコードエミュレータに加えて、本発明では、軽量版に相当するスクリプトエミュレータを用いる。ここで、スクリプトエミュレータは、スクリプト内でコマンド処理が可能であるが、ＡＰＩ関数の呼び出し等を実行することはできない。実際のＯＳでアプリケーションを実行する際、ＡＰＩ関数の呼び出しがなされると、ＯＳは複雑な内部アーキテクチャに起因する多数の処理を実行する。一実施形態では、スクリプトエミュレータは、特定のいかなるオペレーティングシステムのアーキテクチャに結びつけられていない。概略的には、ＡＰＩ関数を呼び出すと、プロセッサ上で多数の命令が実行される。その後、呼び出されたＡＰＩ関数の処理結果がアプリケーションに返される。マシンコードエミュレータでは、ＡＰＩ関数の呼び出しによって実際のＯＳの場合と同じ数の命令が実行されることはない。その代わり、ＡＰＩ関数による処理のエミュレートされた結果がアプリケーションに返される。例えば、ファイルを作成しようとすると、エミュレータは仮想ファイルへポインタを返す。
【００１６】
スクリプトエミュレータは、マシンコードエミュレータとは異なりインタープリタを含み、オペレーティングシステムコンポーネントの仮想コピーを持たない。インタープリタは、オリジナルスクリプトコードと擬似コードの両方で動作可能である。擬似コードは、コマンド間の中間表現形式（コード）であり、人間のユーザーに容易に解読可能なコードである。例えば、疑似コードは、スクリプトが書き込まれるプログラミング言語（例：ＡｕｔｏＩｔプログラミング言語）のコマンドに加え、処理ツール（この場合はスクリプトエミュレータ内のインタープリタ）が理解できるコマンドを含むことができる。プログラミング用語では、擬似コードはバイトコード又はｐコードとも呼ばれる。オリジナルスクリプトコードと比べ、擬似コードは、スクリプトのコンパクトな表現であり、人間のユーザーにとって解析及び理解しやすいコードである。ここで、疑似コードは、デコンパイルにより得ることができる。技術的には、擬似コードは、トランスレータによりオリジナルスクリプトコードから生成されたマシンに依存しない低級コードである。ここで、本実施形態では、かかる機能は後述のアナライザにより実行される。擬似コードを使用することにより、インタープリタは、より簡単かつ迅速に動作することができるようになる。擬似コードはマシンコードのように見えるが、実際のプロセッサではなく仮想マシンで実行されることを意図している。本実施形態では、仮想マシンは、スクリプト言語のインタープリタ（例：ＡｕｔｏＩｔプログラミング言語）を含む。また、本実施形態では、各オペレーションコードの長さを１バイトとすることができる。各命令は、一般に１バイトのオペレーションコード（０〜２５５）であり、レジストリ番号やメモリ内のアドレスなどのさまざまなパラメータがこれに続く。擬似コード内の単一のスクリプトは、異なるプラットフォーム及びアーキテクチャ上のインタープリタにより実行可能である。ここで、異なるプラットフォーム及びアーキテクチャは、インタープリタが実行又は生成されるものである。これは、アーキテクチャに依存するコードであるマシンコードとは対照的である。
【００１７】
スクリプトエミュレータの主な動作アルゴリズムは、コマンドを擬似コードで読み取るステップと、インタープリタを用いて関連する動作を決定するステップと、関連する動作のエミュレーションを実行するステップと、エミュレーションの結果をエミュレータ動作ログに書き込むステップを含む。したがって、スクリプトエミュレータは、リソース消費を低減し、スクリプト言語インタープリタ及びそれに関連するスクリプトを含む実行ファイルの調査を加速する。しかし、スクリプトの実行のエミュレーション中に、擬似コードからマシンコードに移行することができる。ここで、疑似コードは、スクリプトエミュレータ内においてインタープリタが実行するコードである。また、マシンコードは、マシンコードエミュレータの起動を要する処理のエミュレーションに用いられる。かかる移行は、エミュレーションプロセス中にコードが検出された場合に可能となる。ここで、かかるコードとしては、例えば、オペレーティングシステムのＡＰＩ関数の呼び出し、動的ライブラリからの関数の呼び出し、実行ファイルのリソースへのアクセス、スクリプトエミュレータで処理できないコードが挙げられる。ここで、当業者には容易に理解されるように、他の条件に基づいてマシンコードエミュレータに移行してもよい。
【００１８】
ここで、マシンコードエミュレータは、オペレーティングシステムに存在するすべてのライブラリ及びインタープリタ（例：．ＮＥＴ、Ｊａｖａ、ＡｕｔｏＩｔ）と相互通信したり、協働することができることに留意されたい。また、マシンコードエミュレータは、バッチファイルと制御ファイルのエミュレーションを実行することもできる。かかるファイルとしては、例えば、拡張子が．ｂａｔ又は．ｃｍｄのバッチファイル、ＰｏｗｅｒＳｈｅｌｌスクリプト、ＡｕｔｏＩｔスクリプト、レジストリにデータを入力するためのｒｅｇファイル及びその他のタイプのファイルが挙げられる。これらのファイルは、その起動により、ユーザーのコンピュータ上でコードが実行される。したがって、一実施形態では、第１スクリプトのエミュレーション中にエミュレーションプロセスがマシンコードエミュレータに切り替えられ、第２スクリプトが実行のために起動されたとしても、かかる第２スクリプトもマシンコードエミュレータにより処理することが可能である。ここで、第２スクリプトは、例えば、実行ファイルのリソースに含まれるスクリプトである。その後、エミュレーションを、実行ファイルに含まれる第１スクリプトのエミュレーションに戻すことができる。他の実施形態では、マシンコードエミュレーション中にエミュレーションプロセスがマシンコードエミュレータに切り替えられ、第２スクリプトが実行のために起動されたとしても、ミュレーションプロセスをスクリプトエミュレータに戻すことができる。さらに別の実施形態では、マシンコードエミュレータの動作中に起動される第２のスクリプトを処理するために、追加のスクリプトエミュレータを同時に起動することができる。主なスクリプトエミュレータ、マシンコードエミュレータ、及び追加のスクリプトエミュレータの動作結果は、単一の共通エミュレータ動作ログに書き込まれる。そして、後述のごとく、アナライザによって処理される。
【００１９】
図１は、一実施形態における、ＡｕｔｏＩｔを使用してコンパイルされた実行ファイル１００の構造を表すブロック図である。図示されるように、実行ファイル１００は、２つの主要な構成要素を含むことができる。例えば、実行ファイル１００は、スクリプト１０２と、インタープリタ１０１を含む。一実施形態では、スクリプト１０２は、ＡｕｔｏＩｔ言語で記述することができる。インタープリタ１０１は、スクリプト１０２からコンパイルされた任意の実行ファイル１００内に構築することができる。（インタープリタが外部のシナリオを実行するのを防ぐために）「＃ＮｏＡｕｔｏＩｔ３」実行命令を利用せずにスクリプト１０２をコンパイルすると、インタープリタ１０１により第２スクリプト１０３のコードを実行することができる。第２スクリプト１０３もまた、ＡｕｔｏＩｔ言語で記述することができる。ここで、かかるコードを実行するには、以下の２つの方法がある。
（１）ＡｕｔｏＩｔ言語で記述されたコードがインタープリタに直接送信されて実行される「／ＡｕｔｏＩｔ３ＥｘｅｃｕｔｅＬｉｎｅ」パラメータを使用する。例えば、「％ＰｒｏｇｒａｍＦｉｌｅｓ％￥ＡｕｔｏＩｔＦｉｌｅ＿ＰＥ．ｅｘｅ"  ／ＡｕｔｏＩｔ３ＥｘｅｃｕｔｅＬｉｎｅ  "ＭｓｇＢｏｘ（０，  'Ｈｅｌｌｏ'，  'Ｗｏｒｌｄ'）」とすることができる。
（２）ＡｕｔｏＩｔ言語で記述されたスクリプトがインタープリタに送信されて実行される「／ＡｕｔｏＩｔ３ＥｘｅｃｕｔｅＳｃｒｉｐｔ」パラメータを使用する。例えば、「％ＰｒｏｇｒａｍＦｉｌｅｓ％￥  ＡｕｔｏＩｔＦｉｌｅ＿ＰＥ．ｅｘｅ"  ／ＡｕｔｏＩｔ３ＥｘｅｃｕｔｅＳｃｒｉｐｔ  "Ｃ：￥Ｔｅｍｐ￥Ｓｃｒｉｐｔ．ａｕ３」とすることができる。
【００２０】
スクリプト１０２を含む実行ファイル１００のインタープリタ１０１を介してスクリプト１０３を実行する場合は、ウイルス作成者が複数のコンポーネントを対象とした悪意のあるオブジェクトを作成することが可能になる。したがって、各コンポーネントを検討して信頼する前に、ウイルス対策チェックを実行するべきである。例えば、実行ファイル１００は、実行ファイルのリソース内に存在するコードであって、暗号化された悪意のあるコードを含み得るが、インタープリタ１０１による実行ファイル１００の通常の起動時には、スクリプト１０２が実行されるものの、悪意のあるコードの解読と起動は行われない。しかし、実行ファイル１００が「／ＡｕｔｏＩｔ３ＥｘｅｃｕｔｅＳｃｒｉｐｔ」パラメータで起動されると、スクリプト１０３を実行するためにインタープリタ１０１に送信し、実行ファイル１００のリソースにアクセスし、悪意のあるコードを解読して実行することができる。この場合、実行ファイル１００は、第３コンポーネントにより起動することができる。ここで、第３コンポーネントは、例えば、インターネットからロードされたスクリプト１０３である。マルチコンポーネントを対象とした悪意のある実行ファイルを検出するためには、スクリプト１０３（例：インタープリタ１０１の外部に存在するスクリプト）からエミュレーションプロセスを開始する必要がある。一方、単一のコンポーネントを対象とする悪意のある実行ファイルを検出するためには、エミュレーションプロセスをスクリプト１０２から開始する。したがって、一実施形態では、実行ファイル１００の起動イベントを傍受することができる。そして、実行ファイル１００の起動が試みられたパラメータがスクリプトを含む場合、エミュレーションプロセスは、パラメータで送信されるスクリプトから開始される。一方、かかるパラメータが存在しない場合、エミュレーションプロセスは、検査中の実行ファイル１００に含まれるスクリプト１０２から開始する。
【００２１】
図２は、一実施形態における、スクリプトを含む悪意のある実行ファイルを検出するための方法２００のフローチャートである。例えば、図２において検討される実行ファイルは、図１に示される実行ファイル１００を含むことができる。図２に示されるように、方法２００は、検査中のスクリプトを擬似コードに変換するスクリプト変換（Ｓｔｅｐ２０１）を含む。擬似コードを用いることにより、スクリプトエミュレータで使用されるインタープリタの動作が容易且つ高速化される。図１に関して上述したように、悪意の有無が検査されるスクリプトは、実行ファイル１００に含まれるスクリプト１０２であってもよく、実行のために実行ファイル１００のインタープリタ１０１に送信されるスクリプト１０３であってもよい。
【００２２】
検証されるためには、まず、実行ファイル１００に含まれるスクリプト１０２が実行ファイル１００から抽出される。この場合、スクリプト１０２がパッケージプログラムを使用してパックされた場合、スクリプト１０２は抽出中にアンパックされる。抽出されたスクリプト１０２は、デコンパイルされ得る。例えば、スクリプト１０２のオリジナルコードは、スクリプトが記述されたプログラミング言語で復元される。スクリプト１０２コードのデコンパイルは、オリジナルコードを易読化するために必要である。易読化は、分析を複雑にするコードを削除するプロセスであるが、スクリプトの機能を変更しないものである。かかるコードは、例えば、計算結果がどこにも使用されない無駄な計算又は個別化されたサイクルであり得る。しかし、スクリプト１０３が検証されている場合、疑似コードに変換される前に、スクリプト１０３は易読化プロセスの対象となり得る。
【００２３】
スクリプトを擬似コードに変換した後、Ｓｔｅｐ２０２において、スクリプトエミュレータを用いて擬似コードの実行をエミュレートする。次に、Ｓｔｅｐ２０３において、擬似コードの実行エミュレーション中に擬似コードからマシンコードへの移行が検出されると、Ｓｔｅｐ２０４において、エミュレーションプロセスはマシンコードの実行エミュレーションに切り替えられる。上述のように、かかる移行は、オペレーティングシステムＡＰＩ関数の呼び出し、動的ライブラリからの関数の呼び出し、実行ファイルのリソースへのアクセス、スクリプトエミュレータによって処理できないコードを含むことができる。
【００２４】
マシンコードの実行エミュレーション（Ｓｔｅｐ２０４）が完了すると、エミュレーションは検証されているスクリプトの擬似コードの実行エミュレーション（Ｓｔｅｐ２０２）に戻る。擬似コード及びマシンコードの実行エミュレーション中に、エミュレーションの結果がエミュレータ動作ログに書き込まれる。他の実施形態では、エミュレーションの結果をメモリに一時的に格納し、エミュレーション終了時にエミュレータ動作ログに書き込むことができる。エミュレータ動作ログは、悪意のある動作を検出するためにＳｔｅｐ２０５で分析される。Ｓｔｅｐ２０２〜Ｓｔｅｐ２０５によって具体化されたルーチン又はアルゴリズムは、Ｓｔｅｐ２０６において、Ｓｔｅｐ２０５でエミュレータ動作ログの分析の結果、悪意のある動作が検出される。これにより、Ｓ２０７において、実行ファイルが悪意のあるものであると判明するまで、かかるアルゴリズムが繰り返し実行される。他の実施形態では、方法２００は、Ｓｔｅｐ２０５において、エミュレータ動作ログの分析の結果、悪意のある挙動を検出しない場合、アルゴリズムを終了することができる。
【００２５】
エミュレータ動作ログは、起動時に実行ファイル１００によって実行される動作を含む。これには、実行ファイルを悪意のあるものとして特徴付けることができる疑わしい動作の組み合わせも含まれる。例えば、不審な動作には、ファイルのオープン、ファイルへの書き込み、割り込みベクタの傍受などがあるが、これらに限定されない。
【００２６】
一実施形態では、エミュレータ動作ログの分析は、エミュレータ動作ログの内容を悪意の振る舞いテンプレートと比較することを含む。そして、エミュレータ動作ログの内容と悪意の振る舞いテンプレートとの一致に基づいて、実行ファイル１００が悪意のあるものであることが判明する。
【００２７】
別の実施形態では、不審な動作を検出することにより、エミュレータ動作ログの分析中に実行ファイル１００が悪意のあるものであることが判明する。一実施形態では、不審な動作がエミュレータ動作ログ内で検出されるたびに、カウンタをインクリメントすることができる。例えば、エミュレータ動作ログ内において不審な動作が検出されるたびに、実行ファイル１００の「不審メーター」カウンタを増加させることができる。そして、このメーターの値が閾値を超えた場合、実行ファイルは悪意のあるものと判断される。
【００２８】
図３は、一実施形態における、悪意のある実行ファイルを検出するためのシステム３００のブロック図である。一実施形態では、ユーザーコンピュータは、実行ファイル３１０を含むことができる。実行ファイル３１０には、実行ファイル３１０が悪意のあるものであるか否かを判定するための評価に用いられるスクリプト３２０が含まれる。システム３００はさらに、アナライザ３３０、スクリプトエミュレータ３４０、マシンコードエミュレータ３５０、エミュレータ動作ログ３６０を含む。
【００２９】
実行ファイル３１０はスクリプト３２０を含むので、スクリプト３２０を抽出し、スクリプトエミュレータ３４０を使用して直接エミュレートすることにより、実行ファイルのエミュレーションに消費されるリソースと時間を大幅に低減することができる。スクリプト３２０は、実行ファイル３１０をデコンパイルすることにより抽出される。また、パッケージャを使用してパッケージングされた場合には、スクリプト３２０をアンパックすることにより、スクリプト３２０を抽出してもよい。
【００３０】
実行のためのスクリプト３２０をスクリプトエミュレータ３４０に送信する前に、アナライザ３３０は、スクリプト３２０のコマンドを、スクリプトエミュレータ３４０によって処理された言語である擬似コードに変換する。また、後続のエミュレーションプロセスを容易にするために、スクリプト３４０のコードに対して易読化処理がなされてもよい。かかる処理は、スクリプト３２０を擬似コードに変換する前に実行される。擬似コードに変換されたスクリプト３２０が実行のために送信されると、スクリプトエミュレータ３４０は擬似コードの実行を順次エミュレートし、エミュレーションの結果をエミュレータ動作ログ３６０に書き込む。アナライザ３３０は、スクリプトエミュレータ３４０によって実行されるエミュレーションプロセスを監視するように構成される。そして、エミュレーション中に擬似コードからマシンコードへの移行が検出された場合、アナライザ３３０は、エミュレーションプロセスをマシンコードエミュレータ３５０に切り替える。このように、スクリプトエミュレータ３４０の実行後にマシンコードエミュレータ３５０を実行するための擬似コードからマシンコードへの移行は、オペレーティングシステムのＡＰＩ関数の呼び出し、動的ライブラリからの関数の呼び出し、実行ファイルのリソースへのアクセス、スクリプトエミュレータで処理できないコードがトリガーとなり得る。
【００３１】
エミュレーションプロセスがマシンコードエミュレータ３５０に切り替えられると、アナライザ３３０はスクリプトエミュレータ３４０の動作を中断する。そして、マシンコードエミュレータ３５０は、マシンコードの実行をエミュレートし始め、エミュレーションの結果をエミュレータ動作ログ３６０に書き込む。スクリプトエミュレータ３４０を使用する擬似コードの実行エミュレーションは、アナライザ３３０によりマシンコードの実行エミュレーションの完了時に再開することができる。別の実施形態では、マシンコードエミュレータ３５０への切り替えは、スクリプトエミュレータ３４０によって行われる。アナライザ３３０は、悪意のある機能（悪意のある動作）を検出するために、エミュレータ動作ログ３６０の継続的な分析を実行することができる。これにより、スクリプト３２０を含む実行ファイル３１０が悪意のあるものであると結論付けることができる。擬似コード及びマシンコード全体のエミュレーションと、これに続くエミュレータ動作ログ３６０の分析の結果、悪意のある機能が検出されなかった場合、実行ファイル３１０が信頼できるものであると判断することができる。また、検証のために割り当てられた時間中に構築されたエミュレータ動作ログ３６０が悪意のある機能を含まない場合、アナライザ３３０により、実行ファイル３１０は信頼できるものであるとみなすことができる。
【００３２】
図４は、一実施形態における、エミュレーションスイッチングサブシステム４００のブロック図である。例えば、アナライザ３３０は、エミュレーションスイッチングサブシステム４００を含むことができる。エミュレーションスイッチングサブシステム４００は、一般に、エミュレータスイッチャ４０２と、複数のエミュレータ４０４Ａ〜４０４Ｎとを含む。
【００３３】
エミュレータスイッチャ４０２は、プロセッサ４０６及びスイッチングロジック４０８を含む。スイッチングロジック４０８は、プロセッサ４０６により解釈されるものである。一実施形態では、プロセッサ４０６は、入力としてデジタルデータを受け取り、命令又はアルゴリズムに従って入力を処理するように構成され、結果を出力することが可能な任意のプログラマブルデバイスであり得る。一実施形態では、プロセッサ４０６は、コンピュータプログラムの命令を実行するように構成された中央処理装置（ＣＰＵ）とすることができる。したがって、プロセッサ４０６は、基本的な算術演算、論理演算、及び入出力演算を実行するように構成される。プロセッサ４０６は、特に、スイッチングロジック４０８に従って、エミュレータ４０４Ａ〜４０４Ｎを切り替えるように構成される。
【００３４】
スイッチングロジック４０８は、プロセッサ４０６がエミュレータ４０４Ａ〜４０４Ｎを切り替えるための命令を含む。一実施形態では、切り替えロジック４０８は、スクリプトエミュレータとマシンコードエミュレータを切り替える前述のトリガーを備えることができる。一実施形態において、エミュレータ４０４のうちの１つは、マスタエミュレータを備えることができる。そして、特定のタスクのために他のエミュレータ４０４のうちの１つを呼び出した後、スイッチングロジック４０８がエミュレーションプロセスをマスタエミュレータに返すように構成される。他の実施形態では、スイッチングロジック４０８は、エミュレータ４０４が同時に実行されるように指示することができる。
【００３５】
各エミュレータ４０４は、命令セット内の各命令を理解するように構成された仮想環境を含む。当業者には容易に理解されるように、あらゆる種類の命令を異なる方法で処理することができる。したがって、各エミュレータ４０４は、命令を実行する仮想環境を再構築する。擬似コード命令がある場合、オリジナルスクリプトが記述されている言語のインタープリタのみで仮想環境が構成され得る。また、任意の数のエミュレータ４０４をシステム４００に実装することができる。各エミュレータ４０４は、一組の命令に固有の特定の仮想環境を含むことができる。
【００３６】
例えば、一実施形態に係るエミュレーションスイッチングサブシステム４００は、エミュレータ４０４Ａ及びエミュレータ４０４Ｂを含む。エミュレータ４０４Ａは、スクリプトエミュレータを備えることができ、エミュレータ４０４Ｂは、マシンコードエミュレータ又はバイナリエミュレータを備えることができる。スイッチングロジック４０８は、プロセッサ４０６がエミュレータ４０４Ａとエミュレータ４０４Ｂを切り替えるための命令を備える。かかる命令は、エミュレーション下においてスクリプトエミュレータ４０４Ａがコードを処理できないような特定の基準が満たされた場合や、エミュレーション下において別のエミュレータ４０４Ｂがコードを処理することが望ましい場合に発せられる。例えば、スイッチングロジック４０８は、オペレーティングシステムのＡＰＩ関数の呼び出し、動的ライブラリからの関数の呼び出し、実行ファイルのリソースへのアクセス、スクリプトエミュレータで処理できないコードなどの、エミュレータ４０４Ａからエミュレータ４０４Ｂへ切り替えるトリガーを含むことができる。
【００３７】
図５は、本明細書で説明される本発明の態様が様々な実施形態に従って実装され得るコンピュータシステム５００をより詳細に示すブロック図である。
【００３８】
コンピュータシステム５００は、１つ以上の処理ユニット５２１を含むパーソナルコンピュータ５２０、システムメモリ５２２、及びシステムバス５２３を含み得る。これらは様々なシステムコンポーネントを含み、１又は複数の処理ユニット５２１に接続されたメモリを含む。様々な実施形態では、処理ユニット５２１は、コンピュータ可読媒体に格納された情報を処理することができる複数の論理コアを含むことができる。システムバス５２３は、関連技術レベルで知られている任意のバス構造として実現され、バスメモリ又はバスメモリコントローラ、周辺バス及びローカルバスを含み、他のバスアーキテクチャと相互作用することができる。システムメモリは、リードオンリーメモリ（ＲＯＭ）５２４等の不揮発性メモリ、又はランダムアクセスメモリ（ＲＡＭ）５２５などの揮発性メモリを含むことができる。基本入出力システム（ＢＩＯＳ）５２６は、例えば、ＲＯＭ５２４を使用するオペレーティングシステムブートの間等に、パーソナルコンピュータ５２０の要素間で情報の転送を確実にする基本手順を含む。
【００３９】
パーソナルコンピュータ５２０は、データの読み書きのためのハードドライブ５２７、取り外し可能な磁気ディスク５２９への読み書きのための磁気ディスクドライブ５２８、及びＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭ、その他の光学メディア等の光学ディスク５３１への読み書きのための光学式ドライブ５３０を含む。ハードドライブ５２７、磁気ディスクドライブ５２８、及び光学式ドライブ５３０は、ハードドライブインターフェース５３２、磁気ドライブインターフェース５３３、及び光学式ドライブインターフェース５３４のそれぞれを横切るシステムバス５２３と接続される。ドライブ及び対応するコンピュータ情報メディアは、コンピュータ命令、データ構造、プログラムモジュール、及びパーソナルコンピュータ５２０の他のデータのストレージのためのエネルギー依存のモジュールである。
【００４０】
本開示に係るシステムは、ハードドライブ５２７、取り外し可能な磁気ドライブ５２９及び取り外し可能な光学ドライブ５３１を含むものであるが、コンピュータに読み込み可能な形式でデータを保存できる他のタイプのコンピュータ可読媒体（例：ソリッドステートドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（ＲＡＭ））を使用してもよいことに留意されたい。また、これはコントローラ５５５を介してシステムバス５２３に接続される。
【００４１】
パーソナルコンピュータ５２０は、ファイルシステム５３６を有し、記録されたオペレーティングシステム５３５を保持する。また、追加のプログラムアプリケーション５３７、他のプログラムエンジン５３８、及びプログラムデータ５３９を有する。ユーザーは、入力デバイス（キーボード５４０、マウス５４２）を用いてコマンドと情報をパーソナルコンピュータ５２０に入力することができる。他の入力デバイス（不図示）（例：マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ）を用いることもできる。そのような入力デバイスは、通常、システムバスに次々接続しているシリアルポート５４６を通じてコンピュータシステム５００に差し込まれるが、それらは、他の方法、例えば、パラレルポート、ゲームポート、又は一般的なシリアルバス（ＵＳＢ）に接続される。モニタ５４７又は他のタイプのディスプレイは、また、ビデオアダプタ５４８等のインターフェースと交差するシステムバス５２３に接続している。モニタ５４７に加えて、パーソナルコンピュータ５２０には、スピーカー、プリンタ等の他の周辺出力デバイス（不図示）を接続できる。
【００４２】
この場合、パーソナルコンピュータ５２０は、１又は複数のリモートコンピュータ５４９とのネットワーク接続を用いて、ネットワーク環境で操作することができる。（１又は複数の）リモートコンピュータ５４９は、図５に示すように、パーソナルコンピュータ５２０の性質として説明した上述の要素全ての大多数を有するパーソナルコンピュータ又はサーバでもある。ルータ、ネットワークステーション、ピア接続の機器、又は他のネットワークノード等の他の機器もまた、かかるコンピュータネットワークで存在し得るものである。
【００４３】
ネットワーク接続は、ローカルエリアコンピュータネットワーク（ＬＡＮ）５５０及びワイドエリアコンピュータネットワーク（ＷＡＮ）を形成することができる。そのようなネットワークは、企業のコンピュータネットワーク及び社内ネットワークで利用され、それらはたいていにインターネットにアクセスすることができる。ＬＡＮ又はＷＡＮネットワークにおいて、パーソナルコンピュータ５２０は、ネットワークアダプタ又はネットワークインターフェース５５１に交差するローカルエリアネットワーク５５０に接続されている。ネットワークが用いられる時には、パーソナルコンピュータ５２０は、インターネット等のワールドエリアネットワークと通信するために、モデム５５４又は他のモジュールを使用することができる。内部又は外部の機器であるモデム５５４は、シリアルポート５４６によりシステムバス５２３と接続される。かかるネットワーク接続は、単なる一例であり、ネットワークの正確な構成を示すものではない。すなわち、実際には、コンピュータ間の技術的通信手段を用いて接続を確立する他の手段がある。
【００４４】
システム、デバイス、及び方法の様々な実施形態を本明細書で説明してきたが、これらの実施形態は、単なる一例としてのみ示されており、特許請求の範囲に記載された発明の範囲を限定するものではない。それどころか、記載された実施形態の様々な特徴は、多くの追加の実施形態を生成するために様々な方法で組み合わせることができることを理解されたい。さらに、開示された実施形態と共に使用するために、様々な材料、寸法、形状、構成及び位置などが記載されているが、特許請求の範囲に記載された発明の範囲を逸脱しない範囲においてく、開示されたもの以外のものを利用することができる。
【００４５】
関連分野の当業者は、本明細書の主題が上記の個々の実施形態に示されたものより少ない特徴を含むことができることを認識するであろう。本明細書に記載された実施形態は、本明細書の主題の様々な特徴が組み合わされ得る方法の網羅的な提示を意味するものではない。したがって、実施形態は、相互に排他的な特徴の組み合わせではない。むしろ、様々な実施形態は、当業者によって理解されるように、異なる個々の実施形態から選択された異なる個別の特徴の組み合わせを含むことができる。さらに、一実施形態に関して記載された要素は、別段の記載がない限り、そのような実施形態に記載されていない場合でも、他の実施形態で実装することができる。
【００４６】
特許請求の範囲において、従属請求項は、１又は複数の他の請求項との特定の組み合わせを参照することができるが、他の実施形態は、従属クレームと他の従属クレームの主題との組み合わせ、又は、１又は複数の特徴と他の従属請求項もしくは独立請求項との組み合わせを含み得る。
【００４７】
また、上述の文献を参照することによるいかなる組み込みも、本明細書の明示的開示に反する主題が組み込まれないように解釈される。上記の文献の参照による組み込みはさらに限定され、それらの文献に開示される請求項は、参照により本明細書に組み込まれない。上記の文献を参照することによるいかなる組み込みは、さらに限定されており、本明細書に明示的に記述されない限り、その文献に開示されたいかなるの定義も参照により組み込まれない。
【００４８】
また、特許請求の範囲を解釈する場面においては、特許請求の範囲に「手段」又は「ステップ」という特定の用語が記載されていない限り、米国特許法３５Ｕ．Ｓ．Ｃ．  セクション１１２（ｆ）の規定の適用を受けることはない。
【図１】
0006326103.tif 000002
【図２】
0006326103.tif 000003
【図３】
0006326103.tif 000004
【図４】
0006326103.tif 000005
【図５】
0006326103.tif 000006