(57)【特許請求の範囲】
【請求項１】
ウイルス感染について、コンピュータ・ファイルをスキャンする方法であって、
ａ）コンパイラ・アナライザが、前記ファイル内のプログラム・コードを識別し、前記プログラム・コードを生成するために使用されたコンパイラを識別することと、
ｂ）度数分布チェッカが、選択された機械コード命令または該選択された機械コード命令のシーケンスの前記度数分布を決定することと、
ｃ）ウイルス検索システムが、前記決定された度数分布と、前記コンパイラについて予想される機械コード命令またはそのシーケンスの度数分布との比較に基づいて、前記ファイルがウイルスに感染した可能性があるかどうかについてフラグを立てることと、
を含む前記方法。
【請求項２】
前記ステップｂ）が前記プログラムのエントリ・ポイントから作用して、
ａ１）命令度数アナライザが、逐次的な命令オペコードをデコードすることにより、実行グラフを追跡して、この追跡が進行するにつれてデコードされた命令の度数カウントを更新するステップ、
を含む、請求項１に記載の方法。
【請求項３】
前記ステップａ１）の実行中にサブルーチン呼び出しまたは条件付き分岐命令に遭遇する場合は、前記命令度数アナライザが、前記呼び出しまたは分岐命令の宛て先をスタックへプッシュし、追跡を前記サブルーチン呼び出しへ進行させ、また、リターン命令に遭遇した場合は、前記命令度数アナライザが、前記スタックから前記プッシュされた位置をポップし、それに続く命令があればその命令とともに追跡を継続させる、請求項２に記載の方法。
【請求項４】
前記度数分布チェッカが、前記プログラム・コードを、サブルーチン呼び出しおよびサブルーチン・リターンなどのオペコード構文、および互いに他に対して既知の比率で起こると予想される命令シーケンスについて検査し、また、前記実際に発見される比率が既知の比率と一定量を超えて異なる場合は、前記ファイルにウイルス感染の可能性が有るとフラグを立てるか、または更なる処理を実行する、請求項１または請求項２または請求項３に記載の方法。
【請求項５】
前記ステップｃ）は、前記ウイルス検索システムが、容認できる例外のリストと前記プログラム・コードを比較して、前記プログラム・コードが前記例外リスト内にあると考えられれば前記フラグを抑制するようにして、前記ファイルがウイルスに感染している可能性があるとフラグを立てるステップを含む、請求項１ないし４のいずれかの請求項に記載の方法。
【請求項６】
ウイルス感染についてコンピュータ・ファイルをスキャンするシステムであって、
ａ）前記ファイル内のプログラム・コードを識別する手段、
ｂ）前記プログラム・コードを生成するのに使用されるコンパイラを識別する手段、
ｃ）選択された機械コード命令または該選択された機械コード命令のシーケンスの度数分布を決定する手段、および
ｄ）前記決定された度数分布と前記コンパイラについて予想される機械コード命令またはそのシーケンスの度数分布との比較に基づいて、前記ファイルがウイルスに感染した可能性があるかどうかについてフラグを立てる手段、
を含む前記システム。
【請求項７】
前記度数決定手段ｃ）が、追跡手段を含み、前記プログラムのエントリ・ポイントから作用して、前記追跡手段が、逐次的な命令オペコードをデコードすることにより実行グラフを追跡して、この追跡が進行するにつれてデコードされた命令の度数カウントを更新するように動作する、請求項６に記載のシステム。
【請求項８】
前記追跡手段は、サブルーチン呼び出しまたは条件付き分岐命令に遭遇した場合には、前記呼び出しまたは分岐命令の宛て先がスタックへプッシュされて、前記サブルーチン呼び出しへ追跡が進行し、また、リターン命令に遭遇した場合には、前記スタックから前記プッシュされた位置がポップされて、前記後続の命令があれば、それにより追跡が継続するように動作する、請求項７に記載のシステム。
【請求項９】
互いに既知の比率を引き起こすと期待されるサブルーチン呼び出しおよびサブルーチン・リターン命令シーケンスなどのオペコード構成についてのプログラム・コードを検査する手段を含み、一定量以上まで前記既知の比率と前記実際の比率が異なる場合は、前記ファイルはウイルス感染の可能性があるとしてフラグを立てられるかまたは更なる処理を受ける、請求項６、請求項７または請求項８に記載のシステム。
【請求項１０】
前記ファイルがウイルスに感染した可能性があるとしてフラグを立てる前記手段ｄ）が、前記プログラム・コードを許容できる例外リストと比較して、前記例外リスト内に前記プログラム・コードがあると考えられる場合には、前記フラグを抑制するように動作する、請求項６ないし請求項９のいずれかに記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、生成される機械コードの度数分布を分析することにより、実行可能コード内のウイルスを発見的に検出する方法とシステムに関連する。
【背景技術】
【０００２】
コンピュータ・ウイルス感染の一般的形式は、実行可能コードを含むプログラムまたは他のコンピュータ・ファイルに、ウイルスの実行可能コードが添付または埋め込まれていて、表面上はそれが良性であると見える場合である。ウイルス伝播の一つの良く確立された方法は、ユーザのＰＣなどのホスト・マシン上でウイルスが一度動作されると、その一度実行されたプログラムがそのウイルス・コードに再び伝播する機会を与えたり、またはそれにプログラム済みであるあらゆる他の有害な振る舞い（ファイルの破壊などのような）を企てる機会を与えるような仕方で、ホスト上にある一つ以上のプログラムに自分自身を添付することである。この伝播方法は、もちろんたとえばプログラム・ファイルにチェック・サムを関連させて、いつこのチェック・サムが変化するかを検出することにより、ウイルスを検出する機会を与える。それはもちろんウイルス検出のために考案されてきた多くの戦略の一つに過ぎない。
【０００３】
ウイルス検出のもう一つの公知の方法は、利用可能な多くの抗ウイルス・ソフトウエア・パッケージにおいて実施されているが、ウイルスが存在するらしいことを指示するバイトの一定の特徴的なシーケンス（シグネチャとして知られる）に対するスキャン・プログラムまたは他のファイルを含む。シグネチャに基づく検出の実際的問題の一つは、新しいウイルスが最初に検出された時にその適切な特性のシグネチャを確立するために、若干の技能とかなりの量の時間を必要とすることである。このシグネチャは、多数の疑陽性（ｆａｌｓｅ  ｐｏｓｉｔｉｖｅ）を生成し過ぎず、このウイルスをたとえばより良性のペイロードを有する既存のウイルスと誤認しないものであることを要する。このシグネチャ情報は、またこの新しく識別されたウイルスを検出するために、該当する抗ウイルス・パッケージを使用するサイトへそのパッケージがそのサイトで使用される前に普及される必要がある。近年多くの注意すべきウイルスの発生は、インターネット上を伝播するウイルスを含み、ウイルスの発生が起こった時に、抗ウイルス・ソフトウエアの発行者が対応する時間が必要である。
【０００４】
いくつかのインターネット・サービス・プロバイダは、彼らのインターネット・ノードを通過するインターネット・トラフィックの抗ウイルス・スキャンニングを付加価値サービスとして提供している。
【発明の開示】
【発明が解決しようとする課題】
【０００５】
本発明は、たとえばＥメールに添付されたプログラム・ファイルなどの実行可能なものの抗ウイルス・スキャンニングを遂行するＩＳＰに有用であることを意図するウイルス検出方法に関連するが、決してそのアプリケーションに限定されず、多くの抗ウイルス・パッケージにおいて使用可能である。
【課題を解決するための手段】
【０００６】
本発明によれば、ウイルス感染に関してコンピュータ・ファイルをスキャンする方法が供給され、それは、
ａ）前記ファイル内のプログラム・コードを識別することと、
ｂ）前記プログラム・コードを生成するために使用される前記コンパイラを識別することと、
ｃ）選択される機械コード命令またはそうした命令のシーケンスの度数分布を決定することと、
ｄ）そのコンパイラから予想された機械コード命令またはそのシーケンスの度数分布と、前記決定された度数分布を比較することに基づいて、前記ファイルがウイルスに感染したらしいかどうかのフラッグを立てることとを含む。
【０００７】
本発明はまた、ウイルス感染についてコンピュータ・ファイルをスキャンするシステムを提供し、それは、
ａ）前記ファイル内のプログラム・コードを識別する手段と、
ｂ）前記プログラム・コードを生成するのに使用される前記コンパイラを識別する手段と、
ｃ）選択される機械コード命令またはそうした諸命令のシーケンスの度数分布を決定する手段と、
ｄ）そのコンパイラについて予想された機械コード命令およびそのシーケンスの度数分布と前記決定された度数分布の比較に基づいて、前記ファイルがウイルスに感染したらしいかどうかのフラグを立てる手段とを含む。
【０００８】
以下では、１６進数値は先頭に0xを付けて、0xff78のように表現される。0x????は、値が重要でない場合に１６進数値を表現するのに使用される。
【０００９】
最初に、いくつかの用語について議論する。
【００１０】
「MD５（メッセージ・ダイジェスト５）チェック・サム」：MD５は一方向ハッシング・アルゴリズムであって、それはファイルなどのバイト・ストリームを分析した後で、大きな数（MD５チェック・サム）を生成する。二つのファイルが同一の大きな数を生成する可能性は、非常に小さい。いずれか特定のMD５チェック・サムを生成するようなファイルを生成することも非常に困難である。
【００１１】
「疑陽性（ｆａｌｓｅ  ｐｏｓｉｔｉｖｅ）」：疑陽性は、ある抗ウイルス製品がある特定ファイル「ａ」を破壊工作ソフト（ｍａｌｗａｒｅ）であると識別したが、実はそうではない場合に起こる。
【００１２】
「正規表現（ｒｅｇｕｌａｒ  ｅｘｐｒｅｓｓｉｏｎ）」：正規表現は、パターン・マッチングのために使用できるストリングである。たとえばパール（ｐｅｒｌ）正規表現
/^hello [0-9]+/
は、文字列「ｈｅｌｌｏ」で始まり、次に一つのスペース、次に一つまたはそれ以上の数字である任意のストリングに一致する。
【００１３】
「メモリ・マップ（ｍｅｍｏｒｙ  ｍａｐ）」：メモリ・マップは、メモリへロードされたときにプログラムが占める位置と、いくつかの他の位置との一対一マッピングである。こうしてあるプログラムがロードされたときに0x400000ないし0x410000の位置を占めるならば、0x100000から0x110000までのマップが構成される。プログラムが特定位置を参照すると常に、（この場合）0x300000を差し引くことにより、メモリ・マップ内の同等の位置が決定される。こうして、0x400000は0x100000へマップされ、0x400001は0x100001へマップされ、以下同様である。
【００１４】
「コンパイラ（ｃｏｍｐｉｌｅｒ）」：厳密な使用法によれば、コンパイラは、プログラム・ソース・コードから一つまたはそれ以上のオブジェクト・モジュールを生成する。これらのオブジェクト・モジュールは、典型的にそれ自体実行可能なプログラムではなく、リンカによりリンクする追加のステップを必要とする。リンカの作用は、典型的に一つまたは複数のオブジェクト・モジュールおよびそのまたはそれらのモジュールが参照する外部のバイナリライブラリを互いにリンクすることにより、実行可能なもののイメージを生成することであり、イメージの生成は対象となるオペレーティング・システムの実行可能なファイルのレイアウトに従ってヘッダ領域を前に置くこととともに、ビット・マップなどの資源の追加を含む。「コンパイラ」という用語は、ここでは、技術的見地から必要ならば、リンカを含むことを意図して使用される。コンパイラが生成するものは、もちろん必ずしもスタンド・アローンのプログラムではなく、コンパイラはまたダイナミック・リンク・ライブラリおよびデバイス・ドライバなどのような実行可能なものを生成する。
【００１５】
コンパイラはしばしばコンパイラ・フラグ（「スイッチ」としても知られる）を有し、これはユーザーによりセット可能であり、コンパイル処理および生成されたコードに影響する。たとえばコンパイラ・フラグは、生成されたコードが速度、コード・サイズについて最適化されているかどうか、サブルーチン呼び出しのためにスタック・フレームが使用されるかなどを制御することができる。これらフラグの種々の設定は、生成されたコード内の命令の度数分布に影響し得るし、本発明の諸実施例は、コンパイラごとのコンパイラ・フラグ設定の多様な組み合わせについて予想される度数データを有することにより、これを明らかにすることができる。
【００１６】
ここで使用される「コンパイラ・ファイル」という用語は、一般的な意味に解されることを意図し、特にオン・ディスク・ファイルに限定されるべきではない。
【００１７】
ウイルスが制御を獲得するためには、プログラム・コードの実行パスに潜入しなければならない。このウイルス・コードは、最初は一つの特定のコンパイラまたはアセンブラにより生成されたものであり、一般に別のコンパイラまたはアセンブラにより生成されたプログラムへ潜入する。しばしば特定のコンパイラは、そのコンパイラまたはコンパイラのファミリからきたように認識できるコードを生成する。この場合であれば、識別されたコンパイラにより生成された命令の予想度数分布と、そのプログラム内の命令の実際の度数分布を比較することにより、挿入されたウイルス・コードが他のプログラムを生成したコンパイラにより生成されたのではないことを決定することができる。このプログラムは、それからウイルスの疑いがあるかまたは感染しているかのフラグを立てることができる。
【実施例】
【００１８】
図1は、ウイルス・スキャン・エンジン内に組み込まれる本発明の実施例のウイルス検索システム１０の一つの形態をブロック形式で示す。このシステム１０の全体的な動作は、下記の通りである。
【００１９】
スキャンされるべきファイルは入力２０へ逐次的に加えられ、たとえば入力待ち行列を形成する。どのようにファイルがこの待ち行列に配置されるか、またどのソース（一つまたは複数）からであるかは、本発明に直接に関連しないが、それらはたとえばＩＳＰのメール・ゲートウエイにより処理されたＥメールの添付ファイルであるか、またはディスク・スキャン操作により処理されたデレクトリー内のファイルである。
【００２０】
処理されるべき各ファイルは、ファイル・タイプ・アナライザ３０へ渡され、これはファイルのタイプをその内容から識別しようとする。たとえばそれは非プログラムまたはプログラムである。非プログラム・ファイルはそれ以上分析されず、４０で処理が中断される。プログラムと思われるファイルは、さらにそのタイプ、たとえばＤＯＳ（登録商標）、Ｗｉｎｄｏｗｓ（登録商標）ＰＥ、Ｗｉｎｄｏｗｓ（登録商標）ＮＥ、Ｌｉｎｕｘ（登録商標）ＥＬＦ、Ｍａｃｉｎｔｏｓｈ（登録商標）など、そのタイプにより分類される。ファイル・タイプが知られているとタイプ・アナライザ３０が決定すれば、このファイルはそれからコンパイラ・アナライザ５０により処理され、コンパイラ・アナライザ５０は、ファイル内のコードを生成するために使用されるコンパイラの識別を試みる。これに失敗すれば、４０でファイルの処理が中断され、そうでなければ、このファイルは次に命令度数アナライザ６０により処理される。
【００２１】
詳細は後述するが、アナライザ６０はプログラムを効果的にリバース・エンジニアして、一定の機械コード・オペコードおよび／またはオぺコード構文（ｏｐｃｏｄｅ  ｃｏｎｓｔｒｕｃｔ）の度数分布の表を準備する。この表は度数分布チェッカ７０へ送られて、そこでデータ・ベース８０内に保持された識別済みコンパイラの特性度数分布の一つまたはそれ以上のセットと比較される。いずれか所与のコンパイラ／リンカは、二つ以上のタイプの実行可能なもの（ＧＵＩアプリケーション、コンソール・アプリケーション、デバイス・ドライバーなど）を生成でき、またそのコンパイル／リンク・サイクルは、一つまたはそれ以上のコンパイラ／リンカ・フラグ（たとえばサブルーチン呼び出しのためスタック・フレームを生成するかどうかを制御するフラグ、生成されたプログラムがデバッグ・バージョンであるかどうかを指示するフラグなど）の設定に影響されるようにでき、これは種々の予想度数分布を生み出して、データ・ベース内に記憶されて、度数分布チッカ７０による考慮のために個別に選択される。
【００２２】
アナライザ６０からの実際の度数分布が、識別されたコンパイラについて予想される度数分布に充分に密接に一致すると、度数分布チェッカ７０が決定すれば、このファイルの処理は４０で中断される。そうでなければファイルは疑わしく、ウイルスを含む可能性があると考えられる。疑陽性の数を減らすために、疑わしいファイルは例外リストチェッカにより例外リストと比較して検討される、つまり、度数分布チェッカ７０により疑わしいとされたファイルであるにも関わらず良性とみなされる場合もある。例外リスト・チェッカは、検討中のファイルが一つの例外に一致するかどうかを決定するために使用される特性とともに、データ・ベース８０に保持された例外リストを参照して動作する。ファイルが一つの例外に一致しなければ、出力１００でウイルス感染としてフラグを立てられる。このフラグの設定は、オペレータへ警告したり、またはファイルの更なる処理を開始したり、または適当な救済措置（たとえば、このファイルを隔離する）を開始するために使用できる。
【００２３】
（実行可能なものの認識）
下記は、一つのファイルがファイル・タイプ・アナライザ３０により使用できる実行可能なものであるらしいかどうかを決定するアルゴリズムの簡略な例である。ファイルの最初の少数のバイトを分析することにより、それが実行可能ファイルであるらしいかどうかを知らせることができる。たとえば、Ｗｉｎｄｏｗｓ（登録商標）ＰＥファイルを認識するためには、下記の通りである。
最初の２バイトを読み込む。これが、「ＭＺ」でなければ、停止する。
他の５８バイトを読み込む。
（インテル（登録商標）・バイト順序を使用し処理して）４バイトを変数ｘへ読み込む。
ファイル内のオフセットｘをシークする。
４バイトを読み込む。
もし、バイトがＰＥ＼０＼０であれば、そのときはファイルがWｉｎｄｏｗｓ（登録商標）ＰＥファイルであるらしい。
【００２４】
このアルゴリズムを強化して、希望する数の他のタイプの実行可能ファイルについて認識を追加できる。たとえば、あるファイルの最初の４バイトが０ｘ７Ｆ  ０ｘ４５  ０ｘ４６であれば、そのときこのファイルはＥＬＦフォーマットを使用するｌｉｎｕｘ（登録商標）実行ファイルであるらしい。
【００２５】
（コンパイラの認識）
どのコンパイラがある特定のプログラムを生成するかを、コンパイラ・アナライザ５０が認識できるようにするための種々の方法がある。たとえばそれにはプログラムの開始シーケンスを検査できるし、またはサブルーチン呼び出しおよびリターン・シーケンスを検査することができる。いくつかの場合は、使用されるコンパイラの正確なバージョンを識別するために、これで充分である。他の場合は、これにはコンパイラのあり得るファミリを識別する。
【００２６】
（プログラムのリバース・エンジニアリング）
下記は、命令度数アナライザ６０によりこれを実行するための、簡単な方法である。この方法は図２に図示されていて、下記の通りである。
このプログラムに使用される位置のメモリ・マップを生成して、各バイトが「未使用」であるとフラグを立てる（ステップ２１０）。
検討すべき位置のスタックへ、プログラム・エントリ・ポイントをプッシュする（２２０）。
検討すべき位置がまだ存在する間は、下記の通り実行する（２３０）
次の位置を「カレント位置」として、ゲットする（２４０）
ＬｂｌＮｅｘｔ：
メモリ・マップがこのバイトを「コード」とマークするならば（２５０）、この位置の処理を停止する。
この位置で命令を読み込み、その長さをバイトで計算する（２６０）
この命令について、度数カウントを更新する（２７０）
メモリ・マップ内の「長さ」バイト分を「コード」とマークする（２８０）
命令が「コール」、「ジャンプ」または次の命令の位置を変えるかも知れない他の命令であれば（２９０）、検討すべき位置のスタックへ宛て先をプッシュする（３００）
この命令が「常にジャンプ」または「リターン」タイプの命令であれば、この位置の処理を停止する（３１０）
命令が、特定位置でデータをロードまたは記憶するならば（３２０）、メモリ・マップ内の宛て先を「可能なデータ」とマークする（３３０）
「長さ」バイト分だけ「カレント位置」を進める（３４０）
ｌｂｌｎｅｘｔにおいて、処理を遂行する
Ｗｅｎｄ
【００２７】
より良き結果を供給するために、このアルゴリズムを多くの方法により強化できる。たとえば、処理を終了した後にメモリ・マップは、「コード」、「可能なデータ」、および「未使用」とマークされた領域を有する。もし、あまりに多くの領域が「未使用」とマークされるならば、そのときはこれらの領域上でさらなる分析が行われて、それがコードまたはデータであるかどうかを試して決定する。そうしたアルゴリズムの一つは、データをチェックして０ｘ２０ないし０ｘ７ｆ、または０ｘ０Ａ、０ｘ０９、０ｘ０ｄであって、０ｘ００または「＄」で終わる範囲内に文字が含まれるかどうかを調べる。もしそうであれば、これは分析されたプログラムにより表示されたメッセージであるかも知れず、データとしてマークされ得る。このメッセージの直前に先行するバイトもまた分析されて、それらが１、２または４バイト長のメッセージのようであるかどうかを調べられる。多くの他のアルゴリズムが可能である。あるタイプのプログラム・ファイル、たとえば、ウィンドウズ（登録商標）・ダイナミック・リンク・ライブラリは、多数のエントリ・ポイントを有し、上記のアルゴリズムはそれらの各々に適用できる。
【００２８】
（既知度数チェック）
特定のコンパイラは、同一のことを同一の方法で各回（コンパイラ・フラッグの同一セットが使用されたとき）実行する。たとえば、コンパイラ「Ａ」がＥＡＸレジスタへ１を加えることを望むならばそれは、下記のコードを生成する。
add   eax,0x01
【００２９】
このｅａｘレジスタは、４バイト長さである。しかしながら、このコンパイラは、プロセッサが正確に０ｘ０１を０ｘ０００００００１へ伸張することを考慮して、１バイト値を追加する命令を生成する。
【００３０】
しかしながら、これはＥＡＸレジスタへ１を追加する唯一の方法ではなく、コンパイラＡにより生成されたプログラム内に、下記のコードのいずれかが発見されるならば、これは、疑わしい。  
inc    eax
add   eax,  0x0001          ＃２バイトが使用される
add   eax,  0x00000001      ＃４バイトが使用される
【００３１】
多くのコンパイラが、サブルーチンのために特定の開始および終了シーケンスを生成する。コンパイラが常に下記を生成すると仮定すると、ルーチンは下記の通りである。
#ここに開始コードがある
push   ebp
mov    ebp,  esp
sub    esp,   0x???
...
#ここに終了コードがある
mov   esp,  ebp
pop   ebp
retn
【００３２】
それから、プログラムが１００回の「retn」を含み、プログラムはサブルーチン終了シーケンスの間にretnを生成するだけであれば、少なくとも１００回の「push  ebp」、「mov  ebp,  esp」、「sub  esp  0x????」、「mov  esp,  ebp」および「pop  ebp」を発見するとも期待される。これより少ないものは、いずれもウイルス・コードが導入された可能性があることを示す。
【００３３】
コンパイラはまた、サブルーチンを呼び出す特定の方法を有する。
call   0x????
add   esp,  0x????
【００３４】
こうして、プログラムが１００回の「call」を含むならば、少なくとも１００回の「add  esp,  0x????」が見出されると期待される。
【００３５】
コンパイラは決して特定の命令を生成しない。従って、プログラムが一つまたはそれ以上のこれらを含むならば、これはウイルス・コードが導入された可能性があることを示す。
たとえば、      int  3，    これは、ｘ８６シリーズＩｎｔｅｌ（登録商標）プロセッサにおいて、デバッガ・ブレーク・ポイント命令である。
【００３６】
（例外規則）
種々の例外規則をデータ・ベース８０へ追加することができ、例外リスト・チェッカ９０により利用できる。例として、ｉｎｔ  ３命令は、ウイルスに一般的であるが、しかし、また、プログラムのデバッグ・バージョン内に存在し得る。従って、一つの規則は、「ｉｎｔ  ３」の存在は、プログラムがデバッグ・バージョンであることが決定されるならば、無視されるということである。
【００３７】
他の諸命令は、システムまたはカーネルのプログラムにより使用されるが、ユーザ・プログラムにより使用されない。従って、もしそれらが存在してもプログラムがシステムまたはカーネルのプログラムであることが決定されれば、それらは無視できる。
【００３８】
一つのコンパイラによってコンパイルされたプログラムは、他のコンパイラにより生成されたライブラリからのコードとリンクできる。これらのライブラリは、パターン・マッチングおよび正規表現により検出でき、分析から除外される。このステップはまた、ステップ３（リバース・エンジニアリング）の以前に遂行されて諸領域を「分析から除外」とマークする。
【００３９】
プログラムのｍｄ５チェック・サムを除外ｍｄ５のリストと比較することにより、特定の実行可能ファイルを除外できる。
【００４０】
（強化）
これをスタンド・アローンのウイルス検出アルゴリズムとして使用するのと同様に、より大きなシステムの部分として、他の技法とこれを組み合わせることができる。たとえばこの方法により疑わしいとフラグを立てられたプログラムに、テストの通過および失敗による一定の点数または種々の点数を割り当てることができる。他の発見的な技法を使用して、点数を割り当てることもでき、総点数がある限界を超えた場合にのみ、プログラムにウイルス感染とフラグを立てることができる。
【００４１】
このシステムは、インジケータすなわちプログラムのどの部分をさらに分析するかに使用することもできる。たとえば、異常な分布が発見された場合プログラムを再分析して、どこにそれが起きたかを発見し「異常コード」の限界を決定することができる。このフラグを立てられたコードは、それから詳細な分析を受けて、そのコードが実際に実行していることがテストされ、決定される。たとえば、それがファイルを削除しているか、または大量メールをしていれば、そのときは、それはプログラムがウイルスに感染している可能性を指示する。
【図面の簡単な説明】
【００４２】
添付図面を参照して、非限定的な例示の方法により、本発明を詳細に説明してきた。
【図１】本発明の一つの実施例によるウイルス・スキャン・エンジンのブロック図およびその作業のフロー・チャートを組み合わせた図である。
【図２】図１に示した命令度数アナライザの一例の作業を示すフローチャートである。
【図１】
0004464832.tif 000002
【図２】
0004464832.tif 000003