(57)【要約】【課題】命令内容に基づくブレークポイントの設定により、解析対象プロセスに対する効率的な解析を可能とする解析装置、解析方法及び解析プログラムを提供すること。【解決手段】コンピュータ上で実行されるプログラムの動作を、解析用プロセスを利用して解析する解析装置であって、コンピュータ上で実行される解析対象プロセスの命令を取得する命令取得部１１と、命令取得部１１で取得された命令と、解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを判断する判断部１２と、判断部１２において一致すると判断された命令が解析対象プロセスで実行された場合に、当該命令の次に実行される命令の読み込みを停止させ、解析対象プロセスを解析用プロセスへアタッチさせる制御を行う制御部１３と、を有する。【選択図】      図４
2010092178.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータ上で実行されるプログラムの動作を、解析用プロセスを利用して解析する解析装置であって、
前記コンピュータ上で実行される解析対象プロセスの命令を取得する命令取得部と、
前記命令取得部で取得された命令と、前記解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを判断する判断部と、
前記判断部において一致すると判断された命令が前記解析対象プロセスで実行された場合に、当該命令の次に実行される命令の読み込みを停止させ、前記解析対象プロセスを前記解析用プロセスへアタッチさせる制御を行う制御部と、を有することを特徴とする解析装置。
【請求項２】
前記解析対象プロセスの実行を停止させるための停止条件として、命令、及び命令に付随する情報が予め設定され、
前記判断部は、前記命令取得部で取得された命令、及び当該命令に付随する情報が前記停止条件を満たすか否かを判断し、
前記停止条件を満たす場合に、前記制御部は、当該命令の次に実行される命令の読み込みを停止させ、前記解析対象プロセスを前記解析用プロセスへアタッチさせる制御を行うことを特徴とする請求項１に記載の解析装置。
【請求項３】
前記解析対象プロセスの実行を停止させるための停止条件として、一つ以上の連続した命令の実行パターンの組み合わせが予め設定されることを特徴とする請求項１又は２に記載の解析装置。
【請求項４】
前記解析用プロセスは、デバッガであることを特徴とする請求項１〜３のいずれか一項に記載の解析装置。
【請求項５】
コンピュータ上で実行されるプログラムの動作を、解析用プロセスを利用して解析する解析方法であって、
前記コンピュータ上で実行される解析対象プロセスの命令を取得する命令取得工程と、
前記命令取得工程で取得された命令と、前記解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを判断する判断工程と、
前記判断工程において一致すると判断された命令が前記解析対象プロセスで実行された場合に、当該命令の次に実行される命令の読み込みを停止させ、前記解析対象プロセスを前記解析用プロセスへアタッチさせる制御を行う制御工程と、を含むことを特徴とする解析方法。
【請求項６】
コンピュータ上で実行されるプログラムの動作を、解析用プロセスを利用して解析する解析プログラムであって、
前記コンピュータ上で実行される解析対象プロセスの命令を取得する命令取得ステップと、
前記命令取得ステップで取得された命令と、前記解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを判断する判断ステップと、
前記判断ステップにおいて一致すると判断された命令が前記解析対象プロセスで実行された場合に、当該命令の次に実行される命令の読み込みを停止させ、前記解析対象プロセスを前記解析用プロセスへアタッチさせる制御を行う制御ステップと、をコンピュータに実行させることを特徴とする解析プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、コンピュータ上で実行されるプログラムの動作を解析する解析装置、解析方法及び解析プログラムに関する。
【背景技術】
【０００２】
従来、プログラムの動作の解析には、デバッガを利用するのが一般的である（例えば、非特許文献１参照）。デバッガは、解析対象であるプロセスの実行を、任意のメモリアドレスで停止及び再開させる制御を行う。ある特定のプログラム部分の実行時に解析対象プロセスをデバッガにより停止させ、その際のレジスタやメモリ等の値を調査することにより、解析対象プロセスの動作の詳細な解析が可能となる。例えば、ソフトウェアの設計や製作では、プログラムの動作を解析することで誤った変数処理や分岐条件を確認し、修正がなされる。また、例えば、セキュリティ対策技術では、コンピュータウィルスやワーム等が持つ特徴的な動作を解析する（例えば、非特許文献２参照）。
【０００３】
一般に、デバッガは、特定のプログラム部分の実行時に解析対象プロセスを停止させるために、ブレークポイントを利用する（例えば、非特許文献３参照）。デバッガは、予め設定されたブレークポイントにおいて、デバッガが持つメモリバッファに解析対象プロセスの命令を一旦保存し、当該命令をブレークポイント命令に置き換える。例えばインテル社のｘ８６系ＣＰＵの場合、当該命令を、ブレークポイント命令である「０ｘＣＣ」に１バイトだけ置き換える。ＣＰＵは、ブレークポイント命令のフェッチ及び実行により、例外を発生させる。フェッチとは、ＣＰＵが次の命令を読み込むことである。デバッガが存在する場合、一般的なＯＳ（Operating  System）は、ＣＰＵからの例外を受け取ると、デバッガに解析対象プロセスの制御を渡す。デバッガが存在しない場合、当該プロセスは、ＯＳの処理により、例えば異常終了する。
【０００４】
【非特許文献１】”Debugger”、（Wikipedia）、［online］、［平成２０年９月２５日検索］、インターネット＜URL: http://en.wikipedia.org/wiki/Debugger＞
【非特許文献２】Norton  AntiVirus（Symantec  Corp.）、［online］、［平成２０年９月２５日検索］、インターネット＜URL: http://www.symantec.com/norton/index.jsp＞
【非特許文献３】”Breakpoint”、（Wikipedia）、［online］、［平成２０年９月２５日検索］、インターネット＜URL: http://en.wikipedia.org/wiki/Breakpoint＞
【発明の開示】
【発明が解決しようとする課題】
【０００５】
一般に、ブレークポイントは、上述のようにブレークポイント命令により実現する場合と、ＣＰＵが持っているハードウェア機構を利用して実現する場合（ハードウェアブレークポイント）とがある。いずれの場合も、ブレークポイントは、基本的に、メモリアドレスに基づき設定される。ＣＰＵは、ブレークポイントが設定されたメモリアドレスの命令を実行する際にデバッガ例外を発生させる。
【０００６】
動的に確保されたメモリバッファ内に書き込まれた命令を実行しているプロセスを停止させたい場合、動的なメモリバッファがいずれのメモリアドレスに確保されるかはシステムの実行時に決定される。この場合、プログラムがいずれのアドレス領域で展開されるかを予測することは困難である。コードが展開されたバッファのメモリアドレスを知ることができない場合、メモリアドレスに基づくブレークポイントの設定が困難となってしまう。これに対しては、解析対象プロセスの動作を逐一監視し、コードが展開された後にブレークポイントを設定することが考えられる。かかる設定手法では、目的となるメモリアドレスでコードが展開されるまでのほぼ全ての命令について、メモリ上での展開を追う必要が生じるため、膨大な時間及び労力を費やすこととなる。
【０００７】
本発明は、上記に鑑みてなされたものであって、命令内容に基づくブレークポイントの設定により、解析対象プロセスに対する効率的な解析を可能とする解析装置、解析方法及び解析プログラムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するために、本発明は、コンピュータ上で実行されるプログラムの動作を、解析用プロセスを利用して解析する解析装置であって、コンピュータ上で実行される解析対象プロセスの命令を取得する命令取得部と、命令取得部で取得された命令と、解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを判断する判断部と、判断部において一致すると判断された命令が解析対象プロセスで実行された場合に、当該命令の次に実行される命令の読み込みを停止させ、解析対象プロセスを解析用プロセスへアタッチさせる制御を行う制御部と、を有することを特徴とする。
【発明の効果】
【０００９】
本発明によると、メモリアドレスに基づくブレークポイントの設定に代えて、命令内容に基づくブレークポイントの設定を行う。解析対象プロセスのうち任意の特徴的な命令列の実行時に解析対象プロセスを停止可能とすることで、動的なコード展開を行うプログラムや、自己書き換えを行うプログラムに対して、正確に、目的とする命令の実行時に解析対象プロセスをブレークさせることができる。これにより、解析対象プロセスに対する効率的な解析が可能となるという効果を奏する。
【発明を実施するための最良の形態】
【００１０】
以下に添付図面を参照して、本発明に係る解析装置、解析方法及び解析プログラムの実施例を詳細に説明する。
【実施例】
【００１１】
図１及び図２は、本発明の実施例に係る解析装置の概要を説明するための説明図である。解析装置は、コンピュータ上で実行されるプログラムの動作を、解析用プロセスであるデバッガを利用して解析する。図１は、アプリケーション型の解析用プロセスを利用する場合の構成例を示す。仮想マシン（ＶＭ；Virtual  Machine）は、ハードウェアデバイスを全てソフトウェアにより実現した仮想ハードウェアにより構成されている。仮想マシンは、ホストＯＳがインストールされている一台の物理マシン上にて動作させる。ゲストＯＳは、仮想マシン上にて動作させる仮想ＯＳである。さらに、ゲストＯＳの上位にて解析用プロセスであるデバッガ、及び解析対象プロセスを動作させる。
【００１２】
図２は、カーネル型の解析用プロセスを利用する場合の構成例を示す。アプリケーション型の解析用プロセスを利用する場合と同様、仮想マシンは、ホストＯＳがインストールされている一台の物理マシン上にて動作させる。解析用プロセスであるデバッガは、ゲストＯＳの下で動作させ、ゲストＯＳ及び解析対象プロセスを解析対象とする。本実施例は、図１及び図２に示すいずれの構成を適用しても良い。なお、本実施例に係る解析装置は、当該分野の技術者によって、以下の説明要綱に基づき適宜変形可能である。従って、本実施例の説明は、当該分野に対して開示される内容として広く理解されるべきであり、発明を限定するものではない。
【００１３】
図３は、図１及び図２に示す仮想マシンの構成例を示す。仮想マシンは、仮想ＣＰＵ、仮想物理メモリ、仮想ＮＩＣ（Network  Interface  Card）、仮想ハードディスク、その他の仮想デバイスや仮想ハードウェア、例えば、仮想ＢＩＯＳ（Basic  Input  Output  System）を有する。仮想マシンを構成する各要素は、従来ハードウェアとして用いられるものをソフトウェアで表現したものであって、基本的な機能はハードウェアの場合と同様である。
【００１４】
図４は、本実施例に係る解析装置のモジュール構成要素を示したものである。解析装置は、命令取得部１１、判断部１２、及び制御部１３の三つのモジュールを備える。命令取得部１１は、ゲストＯＳ上で動作させる全てのプロセスの命令を取得する。仮想ＣＰＵを用いる構成例では、命令取得部１１は、仮想ＣＰＵ内のＥＩＰが指しているメモリ上の全ての命令を取得する。ＥＩＰは、次に実行すべきアドレスのオフセットを指すレジスタである。
【００１５】
判断部１２は、命令取得部１１において取得された命令と、解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを判断する。解析対象プロセスの実行を停止させるために設定された命令或いは命令列は、例えばシグネチャに記述されている。仮想ＣＰＵを用いる構成例では、判断部１２は、仮想ＣＰＵ内のＥＩＰに読み込まれたデータと、シグネチャに記述された命令とが一致するか否かを判断する。また、命令、及び命令に付随する情報、例えばレジスタやメモリの値によりブレークポイントの条件（停止条件）を設定する場合、判断部１２は、命令実行時の該当するレジスタやメモリの値もシグネチャの値と比較し、停止条件を満たすか否かを判断する。
【００１６】
制御部１３は、判断部１２において一致すると判断された命令が解析対象プロセスにより実行された場合に、当該命令の次に実行される命令の読み込みを停止させ、解析対象プロセスへ解析用プロセスであるデバッガをアタッチさせる制御を行う。
【００１７】
図５は、シグネチャの具体例を示す。シグネチャは、命令と命令に付随する情報、具体的にはレジスタやメモリの値により１行以上で記述される。シグネチャの記述は、アセンブラニーモニック及びバイナリのいずれを採用しても良い。アセンブラニーモニックの場合、シグネチャには、アセンブラ命令部と、レジスタやメモリの設定条件とが記述される。バイナリの場合、シグネチャには、命令部分に該当するバイナリと、レジスタやメモリに格納される条件を数値や算術記号等により表現された設定条件とが記述される。さらに、バイナリで記述する場合、命令のオペランドに相当する部分もバイナリ列で記述しても良い。
【００１８】
図６は、命令取得部１１及び判断部１２の動作を説明するフローチャートである。ゲストＯＳ上でプロセスの実行を開始させる（ステップＳ１）と、仮想ＣＰＵは、ゲストＯＳ上で実行させる命令の一つをフェッチする（ステップＳ２）。シグネチャがアセンブラニーモニックで記述されている場合は、フェッチした命令のバイト列をこのステップで逆アセンブルし、バイナリコードからアセンブリ言語に変換する。
【００１９】
次に、仮想ＣＰＵがフェッチした命令が解析対象である解析対象プロセスの命令に該当するか否かを判断する（ステップＳ３）。基本的には、プロセスに特有のプロセス情報が、仮想マシンの実行時にコンフィグファイルや設定画面等の仮想マシン側へデータ転送が可能な箇所から設定されている。解析対象プロセスか否かの識別には、かかるプロセス情報を用いる。プロセス情報としては、例えば、ＰＩＤ（プロセス識別番号）や、プロセスを一意に識別可能なデータ構造等を用いる。命令取得部１１は、命令取得工程であるステップＳ２及びステップＳ３により、コンピュータ上で実行される解析対象プロセスの命令を取得する。
【００２０】
仮想ＣＰＵは、ゲストＯＳ上で動作しているあらゆるプロセス、ＯＳ自身の命令をフェッチする。フェッチした命令が解析対象プロセスの命令に該当しないと判断した場合（ステップＳ３、Ｎｏ）であって、プロセスが終了していない場合（ステップＳ１３、Ｎｏ）、仮想ＣＰＵは、ゲストＯＳ上で実行させる次の命令をフェッチする（ステップＳ２）。なお、解析対象プロセスの範囲は任意であって、適宜設定可能である。例えば、プロセスの全てを解析対象とする場合は、ステップＳ３を省略しても良い。
【００２１】
フェッチした命令が解析対象プロセスの命令に該当すると判断した場合（ステップＳ３、Ｙｅｓ）、過去における仮想ＣＰＵの実行に関して、マッチング情報が存在するか否かを確認する（ステップＳ４）。マッチング情報とは、仮想ＣＰＵが実行した命令がシグネチャのどの部分までマッチングしたかという情報である。マッチング情報は、例えば、どの命令まで一致したかを示すオフセットと、シグネチャ情報とによって構成されるデータ構造として保持される。シグネチャ情報とは、複数あるシグネチャから特定のシグネチャを一意に識別するための識別子を指す。
【００２２】
マッチング情報が存在することを確認した場合（ステップＳ４、Ｙｅｓ）、かかるマッチング情報を取り出し、過去にマッチしたシグネチャ情報を設定する（ステップＳ５）。次に、ステップＳ５において設定されたマッチング情報と仮想ＣＰＵがフェッチした命令とを比較し、一致するか否かを判断する（ステップＳ６）。具体的には、命令部分が一致するか否かを判断する。
【００２３】
ブレークポイントの条件（停止条件）は、停止させたい命令と、当該命令に付随するオペランドの情報（レジスタやメモリの値）とにより予め設定することとしても良い。このような条件が設定されている場合には、判断部１２は、命令、及び該当するレジスタやメモリの値が停止条件を満たすか否かを判断する。具体的には、例えば、「メモリアドレス０ｘ４０００００から０ｘ５０００００の間の関数をｃａｌｌした」、「レジスタに０ｘ９０９０９０９０の値がロード（ｍｏｖ、ｌｅａ等）された」等の事象を、解析対象プロセスを停止させる停止条件とする。
【００２４】
マッチング情報とフェッチした命令とが一致しないと判断した場合（ステップＳ６、Ｎｏ）、マッチング情報をクリアする（ステップＳ７）。具体的には、データ構造として保持されているオフセットと、シグネチャ情報である識別子とを初期値にリセットする。マッチング情報とフェッチした命令とが一致すると判断した場合（ステップＳ６、Ｙｅｓ）、マッチしたシグネチャに記載された命令の全てがマッチし終わったか否か（シグネチャが終了したか否か）を確認する（ステップＳ８）。
【００２５】
命令の全てがマッチした場合とは、シグネチャにて指定されている命令、つまりプログラムのうちブレークさせたい特徴的な命令列が実行されたことを示す。判断部１２は、命令取得工程において取得された命令と、解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを、判断工程であるステップＳ６及びステップＳ８において判断する。
【００２６】
シグネチャの終了を確認した場合（ステップＳ８、Ｙｅｓ）、仮想ＣＰＵは、シグネチャが一致したメモリアドレス、シグネチャ情報、プロセス情報を制御部１３へ渡す（ステップＳ１２）。さらに、プロセスが終了していない場合（ステップＳ１３、Ｎｏ）、仮想ＣＰＵは、ゲストＯＳ上で実行させる次の命令をフェッチする（ステップＳ２）。
【００２７】
マッチング情報がクリアされた場合（ステップＳ７）、シグネチャの終了が確認されなかった場合（ステップＳ８、Ｎｏ）、及びマッチング情報の存在が確認されなかった場合（ステップＳ４、Ｎｏ）、予め設定されているシグネチャと仮想ＣＰＵがフェッチした命令とを比較し、一致するか否かを判断する（ステップＳ９）。
【００２８】
シグネチャと解析対象プロセスの命令とが一致しないと判断した場合（ステップＳ９、Ｎｏ）であって、プロセスが終了していない（ステップＳ１３、Ｎｏ）場合、仮想ＣＰＵは、ゲストＯＳ上で実行させる次の命令をフェッチする（ステップＳ２）。シグネチャと解析対象プロセスの命令とが一致すると判断した場合（ステップＳ９、Ｙｅｓ）、シグネチャに記載された命令の全てがマッチし終わったか否か（シグネチャが終了したか否か）を確認する（ステップＳ１０）。
【００２９】
命令の全てがマッチした場合とは、シグネチャにて指定されている命令、つまりプログラムのうちブレークさせたい特徴的な命令列が実行されたことを示す。判断部１２は、命令取得工程において取得された命令と、解析対象プロセスの実行を停止させるために予め設定された命令とが一致するか否かを、判断工程であるステップＳ９及びステップＳ１０において判断する。
【００３０】
シグネチャの終了が確認されなかった場合（ステップＳ１０、Ｎｏ）、一致した命令までのオフセットとシグネチャ情報とをマッチング情報として保存する（ステップＳ１１）。さらに、プロセスが終了していない場合（ステップＳ１３、Ｎｏ）、仮想ＣＰＵは、ゲストＯＳ上で実行させる次の命令をフェッチする（ステップＳ２）。
【００３１】
シグネチャの終了を確認した場合（ステップＳ１０、Ｙｅｓ）、仮想ＣＰＵは、シグネチャが一致したメモリアドレス、シグネチャ情報、プロセス情報を制御部１３へ渡す（ステップＳ１２）。さらに、プロセスが終了していない場合（ステップＳ１３、Ｎｏ）、仮想ＣＰＵは、ゲストＯＳ上で実行させる次の命令をフェッチする（ステップＳ２）。プロセスの実行の終了（ステップＳ１３、Ｙｅｓ）により、命令取得部１１及び判断部１２の動作は終了する。
【００３２】
図７は、制御部１３の動作を説明するフローチャートである。命令取得工程において取得された命令と、予め設定されたシグネチャにおいて記述されている命令とが一致した場合に、制御部１３は、当該命令の次に実行される命令の、仮想ＣＰＵによる読み込みを停止させ、シグネチャが一致したメモリアドレス、シグネチャ情報、プロセス情報を仮想ＣＰＵから受け取る（ステップＳ２１）。
【００３３】
次に、解析用プロセスであるデバッガが存在する場合（ステップＳ２２、Ｙｅｓ）、シグネチャと一致した命令のメモリアドレスを利用して、仮想ＣＰＵからデバッグ例外（ＩＮＴ  ０１ｈ）を発生させる。デバッグ例外はデバッガへ通知され、デバッガに制御が移される（ステップＳ２４）。制御工程であるステップＳ２４において、制御部１３は、仮想ＣＰＵによる次の命令のフェッチを停止させ、解析対象プロセスをデバッガへアタッチさせることにより、解析対象プロセスからデバッガへ制御を移す。デバッガによりレジスタやメモリ等の値を調査することにより、解析対象プロセスの動作が詳細に解析される。なお、命令、及び命令に付随する情報が停止条件として設定されている場合は、制御部１３は、停止条件を満たす場合に、当該命令の次の命令に実行される命令の読み込みを停止させ、解析対象プロセスをデバッガへアタッチさせる制御を行う。
【００３４】
解析用プロセスが存在しない場合（ステップＳ２２、Ｎｏ）、シグネチャと一致する命令が実行された旨をログに出力し（ステップＳ２３）、判断部１２の命令フェッチのフェーズまで戻る。このように、解析対象プロセスの命令がシグネチャと一致した場合にログを出力するのみとし、解析対象プロセスの実行自体を停止させず最後まで動作させることとしても良い。制御部１３は、以上のステップＳ２４又はステップＳ２３により動作を終了させ、仮想ＣＰＵから情報を受け取ることにより再び動作する。
【００３５】
以上のように、本発明は、従来のメモリアドレスに基づくブレークポイント設定ではなく、命令内容に基づき解析対象プロセスをブレークさせるブレークポイント設定を行う。インテル社のｘ８６系ＣＰＵを例とすると、例えば、「ｒｅｔ命令が実行された」、「ｃａｌｌ命令が実行された」という事象を契機として、ブレークポイントを設定する。
【００３６】
本発明を用いることで、実行しているプログラムのメモリアドレスに関係無く、シグネチャに記述された命令がＣＰＵ内で実行された場合に、解析対象プロセスを停止させる。そして、ＣＰＵにより例外を発生させることで解析対象プロセスをブレークさせ、解析対象プロセスを解析用プロセスへアタッチさせることができる。
【００３７】
本発明を利用することにより、解析者によって任意に設定された命令の実行時に解析対象プロセスを停止させることができる。従来のブレークポイントでは解析の契機を捉えることが困難とされる場合、例えば、動的に確保したメモリバッファにコードを展開してそのメモリバッファ上のプロセスを実行するような動的なコード展開や、プログラム実行時に自己の命令を書き換える自己書き換えを行うプログラムに対しても、本発明によると、目的とする命令の実行を契機として、正確に解析対象プロセスをブレークさせることができる。
【００３８】
このため、動的なコード展開を行うプログラムや、自己書き換えを行うプログラムに対して、目的とするメモリバッファが展開されるまで、或いは目的とする命令が書き込まれるまで解析対象プロセスのブレーク及びリスタートを繰り返しながら命令実行を逐一監視する必要がなくなる。これにより、従来であれば膨大な時間を費やすような解析対象に対する効率的な解析を可能とし、解析コストを削減することができる。
【００３９】
解析対象のプログラムの特徴的な動作をシグネチャとすることにより、シグネチャで指定した動作をプログラムが行ったか否か判断でき、プログラムの動的解析に利用できる。シグネチャとして、コンピュータウィルス、ワーム等のマルウェアが持つ特徴的な動作を指定することにより、その特徴的な動作を行ったか否かを判断基準としてセキュリティ対策に利用しても良い。
【００４０】
ブレークポイントは、一つの命令の実行が契機となるように設定する場合に限られず、二つ以上の命令の実行が契機となるように設定しても良い。具体的には、例えば、「ｐｏｐ、ｐｏｐ、ｒｅｔの各命令が連続して実行された」という事象を契機として解析対象プログラムを停止させることとしても良い。
【００４１】
さらに、解析対象プロセスの実行を停止させる停止条件として、一つ以上の連続した命令の実行パターンの組み合わせを予め設定することとしても良い。具体的には、例えば、「メモリアドレス０ｘ４０００００をロードした（ｍｏｖ）」というパターンと、「ｐｏｐ、ｅｂｐ、ｒｅｔの各命令が実行された」というパターンとを組み合わせて、「メモリアドレス０ｘ４０００００をロードした後のｐｏｐ、ｅｂｐ、ｒｅｔの各命令が実行された」という事象を捉えて解析対象プロセスを停止させることとしても良い。
【００４２】
本実施例で説明した解析装置、解析方法は、予め用意されたプログラムをパーソナルコンピュータやワークステーション等のコンピュータで実行することによって実現される。本実施例に係る解析装置で実行される解析プログラムは、ハードディスク、フレキシブルディスク（ＦＤ）、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等、コンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行可能としても良い。また、解析装置で実行される解析プログラムは、インターネットなどのネットワークを介して提供或いは配布可能としても良い。
【産業上の利用可能性】
【００４３】
以上のように、本発明に係る解析装置、解析方法及び解析プログラムは、コンピュータ上で実行されるプログラムの動作の解析に有用であり、特に、動的なコード展開を行うプログラムや、自己書き換えを行うプログラムの解析に適している。
【図面の簡単な説明】
【００４４】
【図１】アプリケーション型の解析用プロセスを利用する場合の構成例を示す図である。
【図２】カーネル型の解析用プロセスを利用する場合の構成例を示す図である。
【図３】図１及び図２に示す仮想マシンの構成例を示す図である。
【図４】実施例に係る解析装置のモジュール構成要素を示す図である。
【図５】シグネチャの具体例を示す図である。
【図６】命令取得部及び判断部の動作を説明するフローチャートである。
【図７】制御部の動作を説明するフローチャートである。
【符号の説明】
【００４５】
１１  命令取得部
１２  判断部
１３  制御部
【図１】
2010092178.tif 000003
【図２】
2010092178.tif 000004
【図３】
2010092178.tif 000005
【図４】
2010092178.tif 000006
【図５】
2010092178.tif 000007
【図６】
2010092178.tif 000008
【図７】
2010092178.tif 000009