(57)【特許請求の範囲】
【請求項１】
ハードウェアプロセッサによって、仮想スタックマシンで実行可能なファイルからのデータであって、前記ファイルのファイル・セクションにおけるパラメータ及び前記仮想スタックマシンで実行可能なファイルの関数におけるパラメータのうち少なくとも1つを含むデータ、を識別する工程と、
前記ハードウェアプロセッサによって、前記識別されたデータに基づいて、データベースにおいて、第一閾値を超える前記ファイル・セクションの1つのパラメータの値、及び、第二閾値を越える前記関数の1つのパラメータの値、のうちの少なくとも１つを含む、安全なファイルにおける少なくとも1つのクラスタを検索する工程と、
前記ハードウェアプロセッサによって、前記安全なファイルにおける識別された少なくとも1つのクラスタに少なくとも部分的に基づいて、前記仮想スタックマシンで実行可能なファイルにおけるデータのクラスタを生成する工程と、
前記ハードウェアプロセッサによって、前記仮想スタックマシンで実行可能なファイルのデータにおける生成されたクラスタの少なくとも1つのチェックサムを計算する工程と、
前記ハードウェアプロセッサによって、有害なファイルのチェックサムのデータベースにアクセスする工程と、
前記計算された少なくとも1つのチェックサムが、有害なファイルのチェックサムの前記データベースでのチェックサムと一致する場合、前記ハードウェアプロセッサによって、前記仮想スタックマシンで実行可能なファイルが有害なファイルであると判断する工程と、
を備える、仮想スタックマシンで実行可能である有害なファイルを検出する方法。
【請求項２】
前記ファイルのファイル・セクションにおけるパラメータは、コード、名前、ヘッダー型、前記ファイル・セクションでのデータへのオフセット、及び、前記ファイル・セクションでのデータサイズ、のうち少なくとも１つを含む、請求項1に記載の方法。
【請求項３】
前記ファイルの関数のパラメータは、関数本体のインデックス、前記ファイル・セクションでの関数コードの位置と長さ、関数記述子のインデックス、前記関数実行中のスタックの最大の深さ、前記関数で使用されるローカル変数の数、前記関数の名前、オペランドの数、及びリターンできるデータ型、のうち少なくとも1つを含む、請求項１に記載の方法。
【請求項４】
前記第一閾値は、ファイル・セクションの型の数である、請求項1に記載の方法。
【請求項５】
前記第二閾値は、前記関数で使用されるローカル変数の数である、請求項1に記載の方法。
【請求項６】
少なくとも1つのチェックサムの計算する工程は、
MD5セットを計算することによって、ファジーチェックサムを計算する工程を備え、
MD5セットは、これらセクションのセクション・ヘッダ型及びサイズを含むクラスタ、
前記ファイルの前記関数で使用されるローカル変数の数を含むクラスタ、
及び、前記仮想スタックマシンで実行可能な関数の名前を含むクラスタ、
を含む、請求項1に記載の方法。
【請求項７】
前記仮想スタックマシンで実行可能な前記ファイルが有害なファイルであると判断する工程は、前記MD5セットのクラスタの少なくとも2つのチェックサムが有害なファイルにおけるチェックサムの前記データベースでの少なくとも2つのチェックサムと一致する、という判断する工程を含む、請求項6に記載の方法。
【請求項８】
前記ファイルのデータにおけるクラスタの生成する工程は、
クラスタリングのルールに従って実行され、前記ルールは、
前記ファイルから識別されている前記データの配列で、前記識別されたデータを連続クラスタに配置するというルール、
前記ファイル・セクションのデータのサイズがゼロと等しい場合、前記データのクラスタを生成するために、前記ファイル・セクションのパラメータを使わないというルール、
前記関数で使用されているローカル変数の数がゼロと等しい場合、前記データのクラスタを生成するために、前記ファイルの関数のパラメータを使わないというルール、及び、
前記データのクラスタを生成するために、安全なファイルにおけるクラスタの前記データベースで識別されたクラスタから識別されたデータを使わないというルールのうちの少なくとも１つを含む、
請求項1に記載の方法。
【請求項９】
仮想スタックマシンで実行される有害なファイルを検出するためのシステムであって、前記システムは、少なくとも1つのデータベースとハードウェアプロセッサを含み、
前記データベースは、安全なファイルのクラスタと有害なファイルのチェックサムを保存するように構成され、
前記ハードウェアプロセッサは、
前記仮想スタックマシンで実行可能なファイルからのデータであって、前記ファイルのファイル・セクションにおけるパラメータ及び前記仮想スタックマシンで実行可能なファイルの関数におけるパラメータのうち少なくとも１つを含むデータを識別し、
前記識別されたデータに基づいて、データベースで、第一閾値を超えるファイル・セクションの1つのパラメータの値及び第二閾値を超える関数の1つのパラメータの値のうち少なくとも1つを含む、安全なファイルにおける少なくとも1つのクラスタを検索し、
安全なファイルにおける前記識別された少なくとも1つのクラスタに少なくとも部分的に基づいて、前記仮想スタックマシンで実行可能な前記ファイルのデータのクラスタを生成し、
前記仮想スタックマシンで実行可能な前記ファイルのデータにおける生成されたクラスタの少なくとも1つのチェックサムを計算し、
有害なファイルのチェックサムの前記データベースにアクセスし、及び、
前記計算された少なくとも1つのチェックサムが、有害なファイルのチェックサムの前記データベースでのチェックサムと一致する場合、前記仮想スタックマシンで実行可能なファイルが、有害なファイルであると判断するように構成される、
システム。
【請求項１０】
前記ファイルのファイル・セクションにおけるパラメータは、コード、名前、ヘッダー型、前記ファイル・セクションでのデータへのオフセット、及び、前記ファイル・セクションでのデータサイズ、のうち少なくとも１つを含む、請求項9に記載のシステム。
【請求項１１】
前記ファイルの関数のパラメータは、関数本体のインデックス、前記ファイル・セクションでの関数コードの位置と長さ、関数記述子のインデックス、前記関数実行中のスタックの最大の深さ、前記関数で使用されるローカル変数の数、前記関数の名前、オペランドの数、及びリターンできるデータ型、のうち少なくとも1つを含む、請求項9に記載のシステム。
【請求項１２】
前記第一閾値は、ファイル・セクションの型の数である、請求項9に記載のシステム。
【請求項１３】
前記第二閾値は、前記関数で使用されるローカル変数の数である、請求項9に記載のシステム。
【請求項１４】
前記ハードウェアプロセッサは、
MD5セットを計算することによって、ファジーチェックサムを計算することによって、少なくとも1つのチェックサムの計算し、
MD5セットは、これらセクションのセクション・ヘッダ型とサイズを含むクラスタ、
前記ファイルの前記関数で使用されるローカル変数の数を含むクラスタ、
及び、前記仮想スタックマシンで実行可能な関数の名前を含むクラスタ、
を含むように、さらに構成されている、請求項9に記載のシステム。
【請求項１５】
前記ハードウェアプロセッサは、
前記MD5セットのクラスタの少なくとも2つのチェックサムが有害なファイルにおけるチェックサムの前記データベースでの少なくとも2つのチェックサムと一致する、という判断によって、前記仮想スタックマシンで実行可能な前記ファイルは有害なファイルであるという判断するように、
さらに構成されている、請求項14に記載のシステム。
【請求項１６】
前記ハードウェアプロセッサは、
クラスタリングのルールに従って、前記ファイルのデータにおけるクラスタを生成するように、さらに構成され、
前記ルールは、
前記ファイルから識別されている前記データの配列で、前記識別されたデータを連続クラスタに配置するというルール、
前記ファイル・セクションのデータのサイズがゼロと等しい場合、前記データのクラスタを生成するために、前記ファイル・セクションのパラメータを使わないというルール、
前記関数で使用されているローカル変数の数がゼロと等しい場合、前記データのクラスタを生成するために、前記ファイルの関数のパラメータを使わないというルール、及び、
前記データのクラスタを生成するために、安全なファイルにおけるクラスタの前記データベースで識別されたクラスタから識別されたデータを使わないというルールのうちの少なくとも1つを含む、
請求項9に記載のシステム。
【請求項１７】
仮想スタックマシンで有害なファイルを検出するため、コンピュータ実行可能命令を格納する非一時的コンピュータ可読媒体であって、
前記命令は、
前記仮想スタックマシンで実行可能なファイルからのデータであって、前記ファイルのファイル・セクションにおけるパラメータ及び前記仮想スタックマシンで実行される前記ファイルの関数におけるパラメータ、のうち少なくとも1つのパラメータを含むデータ、を識別する命令と、
識別された前記データに基づいて、データベースで、第一閾値を超える前記ファイル・セクションの1つのパラメータの値及び第二閾値を超える前記関数の1つのパラメータの値、の少なくとも1つを含む、安全なファイルにおける少なくとも1つのクラスタを検索する命令と、
安全なファイルにおける前記識別された少なくとも1つのクラスタでの少なくとも1つに基づいて、前記仮想スタックマシンで実行可能な前記ファイルにおけるデータのクラスタを生成する命令と、
前記仮想スタックマシンで実行可能な前記ファイルのデータにおける生成されたクラスタの少なくとも1つのチェックサムを計算する命令と、
有害なファイルのチェックサムの前記データベースにアクセスする命令と、
及び、前記計算された少なくとも1つのチェックサムが、有害なファイルのチェックサムの前記データベースでのチェックサムと一致する場合、前記仮想スタックマシンで実行可能なファイルが有害なファイルであると判断する命令と、を含む、非一時的コンピュータ可読媒体。
【請求項１８】
少なくとも1つのチェックサムの計算する命令は、
MD5セットを計算することによって、ファジーチェックサムを計算する命令をさらに備え、
MD5セットは、これらセクションのセクション・ヘッダ型とサイズを含むクラスタ、
前記ファイルの前記関数で使用されるローカル変数の数を含むクラスタ、
及び、前記仮想スタックマシンで実行可能な関数の名前を含むクラスタ、
を含む、請求項17に記載の非一時的コンピュータ可読媒体。
【請求項１９】
前記仮想スタックマシンで実行可能な前記ファイルが有害なファイルであるという判断をする命令は、前記MD5セットのクラスタの少なくとも2つのチェックサムが有害なファイルにおけるチェックサムの前記データベースでの少なくとも2つのチェックサムと一致する、という判断を、さらに備える、請求項18に記載の非一時的コンピュータ可読媒体。
【請求項２０】
前記ファイルのデータにおけるクラスタの生成する命令は、
クラスタリングのルールに従って実行され、
前記ルールは、
前記ファイルから識別されている前記データの配列で、前記識別されたデータを連続クラスタに配置するというルール、
前記ファイル・セクションのデータのサイズがゼロと等しい場合、前記データのクラスタを生成するために、前記ファイル・セクションのパラメータを使わないというルール、
前記関数で使用されているローカル変数の数がゼロと等しい場合、前記データのクラスタを生成するために、前記ファイルの関数のパラメータを使わないというルール、及び、
前記データのクラスタを生成するために、安全なファイルにおけるクラスタの前記データベースで識別されたクラスタから識別されたデータを使わないというルールのうちの少なくとも1つを含む、
請求項17に記載の非一時的コンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、米国特許法35 U.S.C. 119(a)-(d)に基づいて、2015年6月30日に出願されたロシア特許出願第2015125974についての優先権の利益を主張し、本明細書中に援用する。
【０００２】
本開示は、一般的にコンピュータセキュリティの分野に関連し、より具体的には、仮想スタックマシンで有害なファイルを検出するシステム及び方法に関連するものである。
【０００３】
過去10年間におけるコンピュータ技術の怒涛の発展、及び、多様なコンピューティングデバイス（例えば、パーソナルコンピュータ、ノートPC、タブレット、スマートフォンなど）の広範囲な普及は、多様な活動領域と膨大なタスク（例えば、ネットサーフィンから銀行振替、電子文書回覧まで）における、これらのデバイスの使用が大きな要因である。コンピューティングデバイスの数及びこれらのデバイスで動作しているソフトウェアの成長と共に、有害なプログラム（悪意のあるソフトウェアまたは不正なソフトウェアとして知られている）の数もかなり成長している。
【０００４】
多種多様な種類の有害なプログラムがある。それらの中には、ログインとパスワード、銀行情報、電子文書等のユーザのデバイスからの個人情報及び機密データを盗むものがある。他方、他のコンピュータ又はコンピュータネットワークに対して強引にパスワードを得ることによって、サービス拒否（DDOS）等のアタック又はソートのために、ユーザデバイスからいわゆるボットネット(botnet)を生成するものもある。さらに他のものには、押し付けがましい広告、有料のサブスクリプション、有料番号をSMSに送ることによって、有料コンテンツをユーザに提供するものもある。
【０００５】
特別なアンチウイルスプログラムは、有害なプログラムに対応するために使用され、つまり、有害なプログラムを検出し、感染を防止し、有害なプログラムに感染したコンピュータ・システムを復元するために、用いられている。具体的には、アンチウイルスプログラムは、"署名解析"等の有害なプログラムにおける十分な多様性を検出するために、様々な技術を採用しており、それは、有害なプログラムのデータベースから特定のセクションを検索し、それは、既知のコード（署名）を有し、解析されているプログラムのコードにおける対応するセクションである。
他の技術としては、"ヒューリスティック分析"を含み、
それは、解析されているプログラムを動作し、エミュレーション・ログ（API関数コールでのデータ、転送されたパラメータ、解析されているプログラムのコードセクション等を含む）を作成し、及び、有害なプログラムのエミュレーションのデータベースから、上記データを有する生成されたログに対応するものを検索する、エミュレーションである。
他の技術は、未だに"ホワイトリスト"と"ブラックリスト"を利用しており、それは、有害なプログラム（ブラックリスト）のチェックサムのデータベース又は合法なプログラム（ホワイトリスト）のチェックサムのデータベースで、解析されているプログラム（又はその一部）の計算されたチェックサムを検索することを含む。
そして最後に、技術は、
システムで実行中である解析プログラムのAPI関数コールの傍受によって、
解析プログラムの動作ログ（API関数コールでのデータ、転送されたパラメータ、解析されているプログラムのコードセクション等を含む）の生成によって、
及び、有害なプログラムのコールのデータベースから、データを有する生成されるログに対応するデータの検索によって、
積極的な保護を用いている。
【０００６】
次に、有害なプログラムは、アンチウイルスプログラムによって、感染したコンピュータ・システムにあるその存在の検出に抵抗するようなメソッドをますます用いるようになっている。これらの技術は、署名解析に対抗するために、コードの難読化を含み、すなわち、オリジナルのテキスト（JavaScript（登録商標）などのスクリプトのような）又はプログラムの実行可能コードに、それらの機能性を保持し、解析、動作アルゴリズムの理解、及び逆コンパイル時にそれらの変更に抵抗する状況を与えるものである。また、有害なプログラムは、ヒューリスティック解析を破るために、より複雑な挙動を利用し、莫大な数の操作（Operation)又はAPI関数コールを含み、その使用は、プログラムの入出力動作の結果に影響せず、未だに、アンチウイルスプログラムによって混乱させられている。最後に、このようなプログラムは、また、積極的な保護を破るためのサードパーティ製のプログラムの動作を監視する。すなわち、オペレーティング・システムでのサードパーティ製のプログラムの振る舞い、アンチウイルスプログラムの検索及びそれらに対するアクションの実行（例えば、解析のためにそれら自身のコードを隠し、又は置き換える等）を継続的に監視することである。
【０００７】
様々な技術を用いることができ、それは、コードジェネレータ（すなわち、特定の機能性を有する有害なプログラムを自動的に作成できる設計者プログラム）、難読化ツール（すなわち、その機能性を変更することなく解析を複雑にする、プログラムの実行可能コードを変更することができるプログラム）、パッカー（すなわち、プログラムに導入されたプログラムモジュール、プログラムの実行可能コードを暗号化し、起動時に復号化する）等が挙げられる。ハッカーが、迅速かつ楽に、その有害なプログラムの新しいバージョンを多く作成し、広めることができ、アンチウィルス・アプリケーションによって検出されないプログラムなどが挙げられる。
【０００８】
上記の方法によって得られた有害なプログラムを効果的に検出するために、技術は用いられ、それによって、特定の特性（例えば、1つのバージョンのパッカーによってパックされた有害なプログラムのファイル、類似の振る舞いを持つ有害なプログラム等）を持つ有害なプログラムのグループ（すなわち、クラスタ）が集められる。さらに、集められたクラスタのファイルで、類似のコードセクション、エミュレーション・ログからのデータ、又は、振る舞い（例えば、一連のAPI関数コール）の検索がなされる。最後に、検出のルールは作成され、それによって、クラスタにおける1つの有害なプログラムのデータ（コードセクションなど）が既知である場合、このクラスタおける他の有害なプログラムも検出されることができる。
【０００９】
このアプローチにおける一つの重要な制限としては、有害なプログラムが動作している（例えば、モバイルアーキテクチャのARM）プラットフォーム又は有害なプログラムが構成するデータ型（JavaScript（登録商標）スクリプト、JavaScript（登録商標）バイトコード、又はコンパイルされたC++コード等）とは無関係に有害なファイルを検出するための普遍的な解決策はないということである。したがって、クラスタリングのために、プラットフォームとデータ型を個別に扱ってアルゴリズムを用いることがしばしば必要である。且つ、有害なプログラムを検出するためのルールの作成が必要となる。
【００１０】
ユーザコンピュータでのそれらの伝播及び破壊活動のために、仮想マシン（およびその脆弱性）を積極的に利用している有害なプログラムが多数存在し、仮想スタックマシン（Adobe Flash又はJava（登録商標）仮想マシン等）を特に利用している。このような有害なプログラムの検出は、PCでの通常の有害なプログラムの検出と比較して、更なる困難性を伴っており、それは、検出における標準的な方法は、（仮想マシンのアーキテクチャ的特徴に起因して）適用されないか、又は、遅い或いは非効率（検出レベルが低すぎる）であるかのどちらかによるためである。それゆえ、仮想スタックマシンでのマルウェアの検出のために、より効率的な技術が必要となる。
【発明の概要】
【００１１】
仮想スタックマシンで実行可能である有害なファイルを検出するため、システム、方法、及びコンピュータプログラム製品が開示される。1つの態様において、例示的な方法は、ハードディスクプロセッサによって、仮想スタックマシンで実行可能なファイルからのデータであって、ファイルのファイル・セクションにおけるパラメータ及び仮想スタックマシンで実行可能なファイルの関数におけるパラメータのうち少なくとも1つを含むデータ、を識別する工程と、
ハードディスクプロセッサによって、前記識別されたデータに基づいて、データベースにおいて、第一閾値を超える上記ファイル・セクションの1つのパラメータの値、及び、第二閾値を越える上記関数の1つのパラメータの値、のうち少なくとも1つを含む、安全なファイルの少なくとも1つのクラスタを検索する工程と、
ハードディスクプロセッサによって、安全なファイルにおける識別された少なくとも1つのクラスタに少なくとも部分的に基づいて、仮想スタックマシンで実行可能なファイルにおけるデータのクラスタを生成する工程と、
ハードディスクプロセッサによって、仮想スタックマシンで実行可能なファイルのデータにおける生成されたクラスタの少なくとも１つのチェックサムを計算する工程と、
ハードディスクプロセッサによって、有害なファイルのチェックサムのデータベースにアクセスする工程と、
計算された少なくとも1つのチェックサムが、有害なファイルのチェックサムのデータベースでのチェックサムと一致する場合、ハードディスクプロセッサによって、仮想スタックマシンで実行されたファイルが有害なファイルであると判断する工程を含む。
【００１２】
一実施態様では、ファイルのファイル・セクションにおけるパラメータは、コード、名前、ヘッダー型、ファイル・セクションでのデータへのオフセット、及びファイル・セクションでのデータサイズ、のうち少なくとも１つを含む。
【００１３】
一実施態様では、ファイルの関数のパラメータは、関数本体のインデックス、ファイル・セクションでの関数コードの位置と長さ、関数記述子のインデックス、関数実行中のスタックの最大の深さ、関数で使用されるローカル変数の数、関数の名前、オペランドの数、リターンのあるデータ型、のうち少なくとも１つを含む。
【００１４】
一実施態様では、第一閾値は、ファイル・セクションの型の数である。
【００１５】
一実施態様では、第二閾値は、関数で使用されるローカル変数の数である。
【００１６】
一実施態様では、少なくとも1つのチェックサムを計算する工程は、MD5セットを計算することによりファジーチェックサムを計算する工程を備え、MD5セットは、これらのセクションのセクション・ヘッダ型及びサイズを含むクラスタ、ファイルの関数で使用されるローカル変数の数を含むクラスタ、及び、仮想スタックマシンで実行可能な関数の名前を含むクラスタ、を含むものである。
【００１７】
一実施態様では、仮想スタックマシンで実行可能なファイルが有害なファイルであると判断する工程は、MD5セットのクラスタの少なくとも2つのチェックサムが、有害なファイルのチェックサムのデータベースで、少なくとも2つのチェックサムと一致するという判断を行なう工程を備えている。
【００１８】
一実施態様では、ファイルのデータにおけるクラスタの生成は、クラスタリングのルールに従って実行される。
そのルールは、
ファイルから識別されているデータの配列で、識別されたデータを連続クラスタに配置するというルール、
ファイル・セクションのデータのサイズがゼロと等しい場合、データのクラスタを生成するために、ファイル・セクションのパラメータを使わないというルール、
関数で使用されているローカル変数の数がゼロと等しい場合、データのクラスタを生成するために、ファイルの関数のパラメータを使わないというルール、及び、
データのクラスタを生成するために、安全なファイルにおけるクラスタのデータベースで識別されたクラスタから識別されたデータを使わないというルールのうち少なくとも１つを含む。
【００１９】
他の実施態様では、仮想スタックマシンで実行される有害なファイルを検出するための例示的なシステムは、少なくとも1つのデータベースとハードウェアプロセッサを含む。上記データベースは、安全なファイルのクラスタと有害なファイルのチェックサムを保存するように構成され、
上記ハードウェアプロセッサは、
仮想スタックマシンで実行可能なファイルからのデータであって、
ファイルのファイル・セクションにおけるパラメータ及び仮想スタックマシンで実行可能なファイルの関数におけるパラメータのうち少なくとも１つを含むデータを識別し、
識別されたデータに基づいて、データベースで、第一閾値を超えるファイル・セクションの1つのパラメータの値及び第二閾値を超える関数の1つのパラメータの値のうち少なくとも1つを含む、安全なファイルにおける少なくとも1つのクラスタを検索し、
安全なファイルにおける識別された少なくとも1つのクラスタに少なくとも部分的に基づいて、仮想スタックマシンで実行可能なファイルのデータのクラスタを生成し、
仮想スタックマシンで実行可能なファイルのデータにおける生成されたクラスタの少なくとも1つのチェックサムを計算し、
有害なファイルのチェックサムのデータベースにアクセスし、及び、
計算された少なくとも1つのチェックサムが、有害なファイルのチェックサムのデータベースでのチェックサムと一致する場合、仮想スタックマシンで実行可能なファイルが、有害なファイルであると判断するように構成される。
【００２０】
他の態様では、仮想スタックマシンで有害なファイルを検出するため、コンピュータ実行可能命令を格納する例示的な非一時的コンピュータ可読媒体であって、その命令は以下を含む。
その命令は、
仮想スタックマシンで実行可能なファイルからのデータであって、
上記ファイルのファイル・セクションにおけるパラメータ及び仮想スタックマシンで実行可能にされるファイルの関数におけるパラメータ、のうち少なくとも1つのパラメータを含むデータ、を識別する命令と、
識別されたデータに基づいて、データベースで、第一閾値を超えるファイル・セクションの1つのパラメータの値及び第二閾値を超える関数の1つのパラメータの値、の少なくとも1つを含む、安全なファイルにおける少なくとも1つのクラスタを検索する命令と、
安全なファイルにおける識別された少なくとも1つのクラスタでの少なくとも1つに基づいて、仮想スタックマシンで実行可能なファイルにおけるデータのクラスタを生成する命令と、
仮想スタックマシンで実行可能なファイルのデータにおける生成されたクラスタの少なくとも1つのチェックサムを計算する命令と、
有害なファイルのチェックサムのデータベースにアクセスする命令と、
及び、計算された少なくとも1つのチェックサムが、有害なファイルのチェックサムのデータベースでのチェックサムと一致する場合、仮想スタックマシンで実行可能なファイルが有害なファイルであると判断する命令とを含む。
【００２１】
例示的態様における上記の簡単な概要は、本開示の基本的な理解を提供するのに役立つ。この概要は、すべての企図される態様における広範な概観ではなく、すべての態様の主要又は重要な要素を特定することも、本開示の全て又は任意の範囲の態様を線引きすることも意図されていない。その唯一の目的は、以下の開示のより詳細な説明の前置きとして簡略化された形式で、1つ又は複数の態様を提示することである。前述の達成のために、本開示の1つまたは複数の態様は、特許請求の範囲に記載され、特に指摘された特徴を含む。
【図面の簡単な説明】
【００２２】
添付図面は、本明細書に組み込まれ、その一部を構成しており、本開示の1つ又は複数の実施の態様を示しており、詳細な説明と共に、その原則と実装を説明するのに役立つ。
【００２３】
【図１】図1は、例示的態様に係る、仮想スタックマシンで有害なファイルを検出するためのブロック図を示す。
【００２４】
【図２】図2は、例示的態様に係る、仮想スタックマシンで有害なファイルを検出する方法のフローチャートを示す。
【００２５】
【図３】図3は、例示的態様に係る、開示されたシステム及び方法を実装することができる汎用コンピュータ・システムの一例を示す。
【発明を実施するための形態】
【００２６】
例示的態様は、モバイルデバイスでの悪質なファイルを検出するためのシステム、方法、及びコンピュータプログラム製品における説明で本明細書に記載されている。当業者は、以下の説明は単なる例示であり、いかなる方法においても限定されることを意図するものではないことを理解するであろう。他の態様は、本開示の利益を有する当業者に対して容易に示される。添付の図面に示されるように、参照は例示的態様の実装に対して以下で詳細に説明される。同じ参照指標が、同一または同様の項目を参照するために、図面全体と以下の説明を通じて、可能な限り使用される。
【００２７】
以下の開示は、開示されたシステムおよび方法における変形の態様を説明する際に使用される定義と概念を紹介するものである。
【００２８】
アンチウイルスプログラム（Аntivirus program） - 有害なプログラムを検出し、及び、そのようなプログラムによって感染（変更）したファイル復元するための特別なプログラム、さらに、予防としてのプログラムでもある。有害なプログラムによるファイル又はオペレーティング・システムの感染（変更）の予防のためのプログラム。
【００２９】
安全なプログラム(safe program) - ユーザ認可なく、情報の破壊、遮断、変更又はコピー、或いは、コンピュータ又はコンピュータネットワークの作業を中断させることを意図していないプログラム。
【００３０】
安全なファイル（Safe file） - 安全なプログラムのコンポーネントであるファイル。
【００３１】
有害プログラム（Harmful program） -ユーザ認可なく、情報の破壊、遮断、変更又はコピー、或いは、コンピュータ又はコンピュータネットワークの作業を中断させるために特別に設計されたプログラム。
【００３２】
有害ファイル(Harmful file) - 有害なプログラムのコンポーネントであるファイル。
【００３３】
仮想マシン(Virtual machine) - 特定のターゲットプラットフォームのハードウェアをエミュレートし、ホストプラットフォームでのターゲットプラットフォーム用のプログラムを実行する、ソフトウェア又はハードウェアシステム。
又は、プラットフォームのハードウェアの仮想化を提供するために必要とされ、それはプログラム及びオペレーティング・システムでさえも互いに分離した環境を作成する。
【００３４】
仮想スタックマシン(Virtual stack machine) - たった1つのデータ構造（すなわち仮想マシンのスタック）に配置されている仮想マシン（そこでは関数のすべてのオペランドが実行されている）。仮想スタックマシンの例としては、Java（登録商標）仮想マシン、Adobe Flash(登録商標)仮想マシン、又は共通言語実行環境.NETである。
【００３５】
クラスタ(Cluster) -関連のある、いくつかの均質な要素（例えば、ファイルのセクション名）。それは、特定の性質を有する独立したユニットとして扱うことができる。
【００３６】
クラスタリング(Clustering)-  オブジェクトのサンプルについての情報を含むデータを収集する手順と、比較的均質なグループへオブジェクトを続けて配置する手順。
【００３７】
チェックサム（ハッシュ）Checksum (hash) -特定のアルゴリズムを使用して、一連のデータに対して計算された値（周期的冗長コードCRC32又は暗号強度の高いアルゴリズムMD5等）とその伝送又は格納の間にデータの整合性をチェックするために使用される値。
【００３８】
ファジーチェックサム（ファジィハッシュ）Fuzzy checksum (fuzzy hash)  - 一連のデータに対して計算された値及び当該データセットにおけるある選択された部分に対して計算されたチェックサム（MD5又はSHA256等）の収集で構成されている。
【００３９】
図1は、仮想スタックマシンで有害なファイルを検出するための例示的なシステムのブロック図を示す。一般的に、システム100は、それらが有害であるか否かを判断するために、スタック仮想マシンで実行可能なファイルを処理する。システム100は、特定の型のファイル（すなわち、スタック仮想マシンで実行可能なファイル）を処理するように構成されたアンチウィルス・アプリケーションのコンポーネントとして実装することができる。アンチウィルス・アプリケーションは、PC又はアンチウイルスサーバー等、スタック仮想マシン又は物理マシンで実行されることができる。後者の場合、アンチウィルス・アプリケーションは、すべての仮想スタックマシンとの相互作用はなく、単にユーザコンピュータ又は他のデバイス或いはサービスから受け取ったファイルを処理するだけである。
【００４０】
図に示すように、システム100は、ファイル構造解析モジュール110、クラスタリングモジュール120、チェックサム計算モジュール130、テストモジュール140、安全なファイルにおけるクラスタのデータベース150、及び有害なファイルにおけるクラスタのチェックサムのデータベース160を含む。
【００４１】
一つの例示的な態様によれば、ファイル構造解析モジュール110は、
例えば、ファイル拡張子（例えば、*.swf）又はファイルヘッダ（例えば、FWS）に基づいて、仮想スタックマシンで実行可能なファイルを識別し、
識別されたファイルの構造を解析し、
解析しているファイルから特定のデータを識別し、
解析しているファイルから識別されたデータに基づいて、安全なファイル150におけるクラスタのデータベースにあるクラスタの検索を実行し、
安全なファイルのクラスタのデータベース150で見つけられるクラスタから特定のデータを識別し、
及び、仮想スタックマシンで実行可能なファイルであって、解析しているファイルから識別されたデータと、安全なファイルにおけるクラスタのデータベース150で見つけられたクラスタを、クラスタリングモジュール120へ、転送する、
ように構成される。
【００４２】
例示的な態様によれば、
ファイル構造解析モジュール110は、解析しているファイルから特定のデータを識別するように構成され、そのデータは、ファイル・セクションのパラメータ（コード、名前、ヘッダー型、セクションでのデータへのオフセット、及びセクションデータのサイズ等）を含むが、それに限定されない。
また、例示的な態様によれば、ファイル構造解析モジュール110も、他のデータを識別するように構成され、そのデータは、仮想スタックマシンで実行可能な関数のパラメータ（関数本体のインデックス、セクションでの関数コードの位置と長さ、関数記述子のインデックス、関数実行中のスタックの最大の深さ、関数によって使用されるローカル変数の数、関数の名前、オペランドの数、リターンがあるデータ型）を含むが、それに限定されない。
【００４３】
ファイル構造解析モジュール110は、仮想スタックマシンで実行可能なファイルの構造について、仮想スタックマシンのオペランドの知識を用いて、解析しているファイルから、データを抽出する。
仮想スタックマシンで実行可能な様々なファイルのファイル構造における本知識は、様々なファイルの構造を解析すること、ファイルの特定の要素（関数）をエミュレートすること、及び、他のファイル解析技術を用いることによって得られる。
【００４４】
例示的な態様によれば、ファイル構造解析モジュール解析は、安全なファイル150におけるクラスタのデータベースで、クラスタを検索するように、さらに構成されている。クラスタ検索は、ファイル・セクションのパラメータ（例えば、セクションコード、セクションの名前、セクション・ヘッダ型、セクションでのデータへのオフセット、及びセクションデータのサイズ）に基づいている。さらに、クラスタ検索は、仮想スタックマシンで実行可能な関数のパラメータ（関数本体のインデックス、セクションでの関数コードの位置と長さ、関数記述子のインデックス、関数実行中のスタックの最大の深さ、関数によって使用されるローカル変数の数、関数の名前、オペランドの数、及び、リターンがあるデータ型）に基づいている。
【００４５】
1つの態様によれば、ファイル構造解析モジュール110は、仮想スタックマシンで実行可能なファイルから識別されたデータ毎に、安全なファイルにおけるクラスタのデータベース150で、以下の値を含むクラスタの検索を実行するようにさらに構成されている。上記の値は、例えば、所定の閾値を超えるファイル・セクションの1つのパラメータ（例えば、ファイルのセクションの型の数）、及び／または、所定の閾値を超えた仮想スタックマシンで実行可能な関数のパラメータの1つの値（例えば、関数によって使用されているローカル変数の数）である。
【００４６】
さらに、例示的な態様によれば、クラスタリングモジュール120は、クラスタリングルールを用いて、解析モジュール110から得られたデータからクラスタを生成し、生成されたクラスタをチェックサム計算モジュール130に転送するように構成されている。
【００４７】
1つの態様によれば、クラスタリングルールは、以下で指定されたルールを含むがそれに限定されない。そのルールは、例えば、
収集されたデータは、ファイルからの識別の順に、クラスタ内に配置されるべきである、というルール、
ファイル・セクションのパラメータは、ファイル・セクションデータのサイズがゼロと等しい場合、クラスタの生成に使用されるべきではない、というルール、
仮想スタックマシンで実行可能な関数におけるパラメータは、関数で使用されるローカル変数の数がゼロに等しい場合、クラスタの生成に使用されるべきではない、というルール、
及び、安全なファイルにおけるクラスタのデータベースで見つけられたクラスタからの識別データは、クラスタの生成に使用されるべきではない、というルール、である。
【００４８】
例示的な態様によれば、チェックサム計算モジュール130は、クラスタリングモジュール120から得られたクラスタの1つ又は複数のチェックサムを計算し、計算されたチェックサムをテストモジュール140に転送するように構成されている。
【００４９】
1つの態様によれば、クラスタのチェックサムは、1つ又は複数のファジーチェックサム（例えば、MD5又はSHA256等）であってもよく、それは、解析モジュール110から得られるデータ（ファイル・セクションの名前と、仮想スタックマシンで実行可能な関数の名前における、MD5セット等）における様々な型から計算される。
【００５０】
例示的な態様によれば、テストモジュール140は、有害なファイルのクラスタにおけるチェックサムのデータベース160で、チェックサム計算モジュール130から得られたチェックサムの検索を実行し、及び、チェックサム計算モジュール130から得られたチェックサムを、有害なファイルのクラスタにおけるチェックサムのデータベース160で、検索した結果を検出するイベントで、有害なファイルを検出するように構成されている。
【００５１】
1つの態様によれば、有害なファイルのクラスタにおけるチェックサムのデータベース160で、チェックサム計算モジュール130から得られたファジーチェックサムを検出する条件は、チェックサム計算モジュール130から得られたファジーチェックサムを構成するチェックサムと一致する数、及び、有害なファイルのクラスタにおけるチェックサムのデータベース160に保存されているそれらのファジーチェックサムを構成するそれらのチェックサムと一致する数、が閾値を超える数であるという条件である。
【００５２】
次の説明は、有害なファイルAdobe Flash（登録商標）を検出する例で、仮想スタックマシンで実行可能な有害なファイルの検出における、図2に示すシステムの操作の一例を提供する。
【００５３】
特に、ファイルlaunchme.swfが有害なファイルを検出するための解析にたどり着いたと仮定して、マルチメディアリソース（画像、オーディオやビデオクリップ等）に加えて、ActionScript 3の言語のコードを含む。この例では、ファイル構造解析モジュール110は、上述したように、解析のためにファイルlaunchme.swfからのデータを識別する。
【００５４】
1つの態様では、データは、ファイル・セクションのパラメータ（コード、名前とセクション・ヘッダ型、データへのオフセット、及びセクションデータのサイズ）を含めることができる。
例えば、
code = 69 (FileAttributes), type = short, offset = 0x14, length = 0x4
code = 9  (SetBackgroundColor), type = short, offset = 0x1a, length = 0x3
code = 82 (DoABC), type = long, offset = 0x1f, length = 0x1a2e
【００５５】
例示的な態様によれば、データは、仮想スタックマシンで実行可能なフラッシュファイルに含まれているActionScript3言語のコードにおける関数のパラメータ（関数本体のインデックス、セクションでの位置と長さ、関数記述子インデックス、関数実行中のスタックの最大の深さ、関数で使用されるローカル変数の数、関数の名前）を含むことができる。
例えば：
Method body 1: offset = 0xd24, length = 0xae, method = 0,
max_stack = 0x3, local_count = 0x1, exception_count = 0x0,
init_scope_depth = 0x0, max_scope_depth = 0x8, trait_count = 0x0.
script0$init():*
【００５６】
上記データを得た後、ファイル構造解析モジュール110は、安全なファイルにおけるクラスタのデータベース150で、ファイル・セクション（例えば、コード（code） = 69, 型（type） = short）の一連のパラメータをもつクラスタ及び仮想スタックマシン（script0$init()等）で実行可能な関数のパラメータが、解析されているlaunchme.swfファイルから識別されたセクション及び関数におけるパラメータと一致しているかを検索するように構成されている。
【００５７】
安全なファイルのクラスタが見つかった場合は、ファイル構造解析モジュール110は、安全なファイルのクラスタであるとセクションのパラメータ（コード、名前とセクション・ヘッダ型、データへのオフセット、及び、セクションデータのサイズ）を識別するように構成されている。
例えば、
code = 69 (FileAttributes), type = short, offset = 0x14, length = 0x4
【００５８】
また、ファイル構造解析モジュール110は、仮想スタックマシンで実行可能な関数のパラメータ（関数本体のインデックス、セクションでの機能コードの位置及び長さ、関数記述子のインデックス、関数実行中のスタックの最大の深さ、関数によって使用されるローカル変数の数、関数の名前）を識別するように構成されている。
例えば、
Method body 1: offset = 0xc67, length = 0xae, method = 0,
max_stack = 0x3, local_count = 0x1, exception_count = 0x0,
init_scope_depth = 0x0, max_scope_depth = 0x8, trait_count = 0x0.
script0$init():*
【００５９】
識別されたデータは、その後、クラスタリングモジュール120に送信することができる。例示的な態様によれば、クラスタリングモジュール120は、解析モジュール110から得られたデータから、3つのクラスタを作成することができる。
・セクションデータのセクション・ヘッダ型とサイズを含むクラスタ（例えば、short, 0x4, short, 0x17, long, 0x2c, short, 0x5,）
・仮想スタックマシンで実行可能な関数によって使用されるローカル変数の数を含むクラスタ（例えば、0x7, 0x5, 0x11, 0x7, 0xc, 0x2, 0xf, 0x5, 0x5, 0xa）
・仮想スタックマシンで実行可能な関数の名前を含むクラスタ（例えば、cript0$init, script0$read_data, script0$inject）
【００６０】
作成されたクラスタは、解析しているファイルから識別するために、データ（すなわち、セクションのパラメータ、及び、仮想スタックマシンで実行可能である関数）を含み、それは、安全なファイルにおけるクラスタのデータベース150で見つけられたクラスタから識別されたデータ（生成されたクラスタに含まれるものではない）は除かれる。生成されたクラスタは、その後、チェックサム計算モジュール130に送られることができる。
【００６１】
例示的な態様によれば、チェックサム計算モジュール130は、クラスタリングモジュール120から受け取ったクラスタに対するファジーチェックサムを計算するように構成されている。つまり、それは、これらのセクションのセクション・ヘッダ及びサイズを含むクラスタ、関数で使用されるローカル変数の数を含むクラスタ、及び、仮想スタックマシンで実行可能な関数の名前を含むクラスタ、のMD5からなるMD5セットを計算する。
0xed4d37994bec687a9c31844e47928ec3 
0xb07b30a8430a63ae8ef5bad369d653de
0xcaa351de76e20cff266d24b9bf9ebdc1
【００６２】
計算されたファジーチェックサムは、その後、テストモジュール140に送られる。例示的態様によれば、テストモジュール140は、有害はファイル160におけるクラスタのチェックサムのデータベースで、ファジーチェックサムの検索を実行し、そのようなファジーチェックサムは、少なくとも3つのMD5チェックサムのセットを構成し、そのうち少なくとも2つのセットは、チェックサム計算モジュール130から得られたファジーチェックサムのMD5チェックサムと一致する。
例示的な態様によれば、このようなファジーサムが見つかった場合、テストモジュール140は、解析しているファイルlaunchme.swfが、有害であると結論付ける。データベース160内のチェックサムと一致する計算されたファジーチェックサムの数は、システム設計者の設計する実装に応じて変化できることを理解すべきである。
【００６３】
図2は、例示的態様に係る、仮想スタックマシンでの有害なファイルを検出する方法のためのフローチャートを示す。示されるように、最初に、工程210で、ファイル構造解析モジュール110は、解析しているファイルからのデータを識別する。次に、工程220で、ファイル構造解析モジュール110は、安全なファイルのデータベース150でクラスタの検索を実行する。工程230に示されるように、クラスタリングモジュール120は、解析しているファイルのクラスタの収集に用いられる。工程240で、チェックサム計算モジュール130は、集められたクラスタのチェックサムを計算し、工程250で、テストモジュールは、有害なファイルのチェックサムのデータベース150でチェックサムのテストを行うのに用いられる。最後に、工程260で、テストモジュール140は、ファイルが有害であるかについて決定を行う。
【００６４】
1つの態様によれば、工程210で、データは、解析しているファイルから識別され、それは、仮想スタックマシンで実行可能なファイルである。上述のように、工程210で、解析しているファイル（仮想スタックマシンで実行可能なファイル）から識別されることができるデータは、ファイル・セクションのパラメータ及び、仮想スタックマシンで実行可能な関数のパラメータを含むことができる。
【００６５】
次に、工程220で、安全なファイルにおけるクラスタのデータベース150で、解析されているファイルであって且つ仮想スタックマシンで実行可能なファイルから工程210で識別されたデータ毎に、例えば、以下の値を含むクラスタの検索がなされる。
その値は、
与えられた閾値（例えば、ファイルのセクションの型の数）を超えるファイル・セクションの1つのパラメータの値、
与えられた閾値（例えば、関数によって用いられるローカル変数の数）を超える、仮想スタックマシンで実行可能な関数の1つのパラメータの値、である。
そして、データは、見つけられたクラスタから識別される。
【００６６】
上記示すように、安全なファイルにおけるクラスタのデータベース150で見つけられるクラスタから識別されることができるデータは、ファイル・セクションのパラメータ、及び、仮想スタックマシンで実行可能な関数におけるパラメータを含むことができる。
【００６７】
次に、工程230で、クラスタリングルールによって、解析されているファイルのクラスタは生成される。
【００６８】
次に、工程240で、チェックサムは、工程230で生成されたクラスタに対して計算される。工程230で生成されるクラスタに対して計算されたチェックサムは、ファジーチェックサムである。工程230で生成されるクラスタに対して計算されたファジーチェックサムは、工程210で識別されたデータ（ファイル・セクションの名前及び関数の名前におけるMD5セット等）の様々な型からの一連のチェックサム（例えば、MD5又はSHA256）である。
【００６９】
工程250で、チェックサムは、有害なファイルにおけるクラスタのチェックサムのデータベース160でテストされる。有害なファイルにおけるクラスタのチェックサムのデータベース160で、工程240で得られたファジーチェックサムを検出する条件は、工程240で得られたファジーチェックサムを構成するチェックサムと一致する数、及び、有害なファイルにおけるクラスタのチェックサムのデータベース160に保存されているファジーチェックサムを構成するそれらチェックサムが、与えられた閾値を超える数であるという条件である。
【００７０】
最後に、工程260では、解析しているファイルが有害であるかどうかについての決定がなされる。有害なファイルにおけるクラスタのチェックサムのデータベース160内で、工程240で得られたファジーチェックサムを検出するイベント（工程250）で、解析しているファイルが確かに有害であるということを判断する。
【００７１】
図3は、例示的態様に係る、開示されたシステム及び方法が実装されることができる、汎用コンピュータ・システム（パーソナルコンピュータ又はサーバであってもよい）の例である。
示されるように、コンピュータ・システムは、中央処理ユニット21、システムメモリ22及びシステムバス23を含み、システムバスは、様々なシステムコンポーネント（中央処理ユニット21に付随するメモリを含む）に接続している。システムバス23は、先行文献で知られている任意のバス構造のように実現され、順にバスメモリ又はバスメモリコントローラ、周辺バス、及びローカルバスを含み、それは、任意の他のバスアーキテクチャと相互作用することができる。システムメモリは、読み出し専用メモリ（ROM）24およびランダムアクセスメモリ（RAM）25を含む。基本入出力システム（BOIS）26は、パーソナルコンピュータ20の要素間で情報の転送を保証する基本的な手順を含み、ROM24を使用してオペレーティング・システムをロードする時にも同様である。
【００７２】
パーソナルコンピュータ20は、順に、データの読み書き用ハードディスク27、リムーバブル磁気ディスク29への読み書き用磁気ディスクドライブ28、及び、リムーバブル光ディスク31（CD-ROM、DVD-ROM又は他の光情報媒体等）への読み書き用光ドライブ30を含む。ハードディスク27、磁気ディスクドライブ28、及び光ドライブ30は、それぞれ、ハードディスクインターフェース32、磁気ディスクインタフェース33及び光ドライブインターフェース34を介してシステムバス23に接続されている。ドライブ及び対応するコンピュータ情報媒体は、パーソナルコンピュータ20のコンピュータ命令、データ構造、プログラムモジュール、およびその他のデータにおける記憶装置に対して電力独立型モジュールである。
【００７３】
本開示は、ハードディスク27、リムーバブル磁気ディスク29およびリムーバブル光ディスク31を使用するシステムの実装を提供するが、コンピュータによって読み取り可能な形式でデータを格納することができる他の型のコンピュータ情報媒体56（ソリッドステートドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ（RAM）等）を使用することも可能であることが理解されるべきであり、それらは、コントローラ55を介してシステムバス23に接続される。
【００７４】
コンピュータ20は、ファイルシステム36を有し、そこには記録されたオペレーティング・システム35が保持され、および、追加プログラムアプリケーション37、他のプログラムモジュール38およびプログラムデータ39、もまた同様である。
ユーザは、入力デバイス（キーボード40、マウス42）で、パーソナルコンピュータ20に、コマンドと情報を入力することができる。他の入力デバイス（図示せず）として、マイクロホン、ジョイスティック、ゲームコントローラ、スキャナ等を用いることができる。そのような入力デバイスは、通常、シリアルポート46を介してコンピュータ・システム20に接続され、それは、順番に、システムバスに接続される。それらは、他の方法（例えば、パラレルポート、ゲームポート、又はユニバーサルシリアルバス（USB））を用いて接続できる。モニター47又は他の型の表示デバイスもまた、ビデオアダプタ48などのインターフェースを介してシステムバス23に接続される。モニター47に加えて、パーソナルコンピュータは、ラウドスピーカー、プリンター等の他の周辺出力デバイス（図示せず）を搭載することができる。
【００７５】
パーソナルコンピュータ20は、1つ又は複数のリモートコンピュータ49を用いて、ネットワーク環境で作業することができる。図3に示すように、リモートコンピュータ（複数可）49も、前述の要素の大部分又は全てを有するパーソナルコンピュータ又はサーバであり、その要素は、パーソナルコンピュータ20の本質を示している。ルータ、ネットワーク局、ピアデバイスまたは他のネットワークノード等、他のデバイスも、コンピュータネットワークに存在できる。
【００７６】
ネットワーク接続は、有線および/または無線ネットワーク等のローカルエリアコンピュータネットワーク（LAN）50、およびワイドエリアコンピュータネットワーク（WAN）を生成することができる。このようなネットワークは、企業コンピュータネットワークと社内ネットワークで使用されており、これらは一般的にインターネットへのアクセス権を有している。LANまたはWANネットワークでは、パーソナルコンピュータ20は、ネットワークで使用しているネットワークアダプタまたはネットワークインタフェース51を介してローカルエリアネットワーク50に接続される。ネットワークが用いられる場合、パーソナルコンピュータ20は、インターネットのようなワイドエリアコンピュータネットワークとの通信を提供するため、モデム54または他のモジュールを使用する。モデム54は、内部または外部デバイスであり、シリアルポート46によってシステムバス23に接続される。ネットワーク接続は、単なる例であり、ネットワークの正確な構成を示す必要はないことに留意すべきである。すなわち、現実には技術的な通信モジュールによる他のコンピュータの接続を確立する他の方法がある。
【００７７】
様々な態様において、本明細書で説明するシステム及び方法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせで実装することができる。ソフトウェアで実装する場合、その方法は、非一時的なコンピュータ可読媒体上の1つまたは複数の命令またはコードとして格納されることができる。コンピュータ可読媒体は、データ記憶を含む。コンピュータ可読媒体を以下に例示するが、限定するものではない。コンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、又は、他の型の電気的、磁気的、または光記憶媒体、又は他の任意の媒体、を備えることができ、命令またはデータ構造の形で所望のプログラムコードを搬送又は格納するために用いられ、汎用コンピュータのプロセッサによってアクセスすることができる。
【００７８】
様々な態様では、システムおよび方法は、モジュールの観点から、本開示で説明される。本明細書で使用される用語「モジュール」とは、現実世界のデバイス、コンポーネント、または、ハードウェアを用いて実装されたコンポーネントの配置を言及しており、例えば、または、ハードウェアとソフトウェアの組み合わせとして、特定用途向け集積回路（ASIC）またはフィールド・プログラマブル・ゲート・アレイ（FPGA）などによって実装され、モジュールの機能を実装するマイクロプロセッサシステムと命令セットなどによって、（実行される間に）マイクロプロセッサシステムを専用のデバイスに変換される。モジュールも、2つの組合せとして実装されることができ、ハードウェアだけによって容易とされる特定の機能、および、ハードウェアとソフトウェアの組み合わせによって容易とされる他の機能と、これらの組み合わせとして実現することができる。特定の実施態様では、少なくとも一部、およびいくつかのケースでは、モジュールのすべては、（例えば、図3上部に詳細に説明したもののように）汎用コンピュータのプロセッサ上で実行することができる。したがって、各モジュールは、適切な様々な構成で実現することができ、そして本明細書中に任意の例示的な実施形態に限定されるものではない。
【００７９】
明瞭にするために、態様のルーチン機能のすべてが、本明細書に開示されているわけではない。本開示における任意の実際の実装における開発で、多数の実装固有の判断が、開発者の特定の目標を達成するためになされなければならないことが理解されるであろう。さらに、これらの具体的な目標は、異なる実装及び異なる開発者に対して変化することが理解されるであろう。そのような開発努力は複雑で時間がかかるかもしれないが、それでも本開示の利益を有する当業者にとっては、エンジニアリングの日常の仕事であると理解されるであろう。
【００８０】
さらに、本明細書で使用される用語又は表現は、説明のためであり、制限するものではなく、つまり、関連技術の熟練の知識と組み合わせて、本明細書の用語または表現は、ここに示される教示及び指針に照らして当業者によって解釈されるべきであることが理解されるべきである。明示的な記載がない限り、明細書または特許請求の範囲内で、任意の用語に対して、珍しいまたは特別な意味を帰することは意図されていない。
【００８１】
本明細書で開示された様々な態様は、例示のために本明細書に言及した既知のモジュールの、現在および将来の既知の均等物を包含する。さらに、態様および用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。
【図１】
0006277224.tif 000002
【図２】
0006277224.tif 000003
【図３】
0006277224.tif 000004