(57)【特許請求の範囲】
【請求項１】
パッキングされたプログラムからオリジナルコードを抽出する抽出装置であって、
前記プログラムを実行させ、前記オリジナルコードの候補を抽出する候補抽出手段と、
前記プログラムを実行するプロセスによるメモリアクセスに関する情報であって、前記候補抽出手段によって抽出された時点の前後一定期間におけるメモリアクセス情報を取得する取得手段と、
前記候補抽出手段によって抽出されたオリジナルコード候補の情報と、前記取得手段によって取得されたメモリアクセス情報とに基づいてメモリアクセスの傾向を抽出し、抽出されたメモリアクセスの傾向について、所定条件を満たすか否かを判定する傾向抽出手段と
を有することを特徴とする抽出装置。
【請求項２】
前記傾向抽出手段は、前記オリジナルコード候補の情報と、前記メモリアクセス情報とに基づいて、アクセスされたアドレスの範囲の平均値を求め、該平均値をメモリアクセスの傾向として抽出することを特徴とする請求項１に記載の抽出装置。
【請求項３】
前記傾向抽出手段は、前記メモリアクセスの傾向について、前記候補抽出手段によって抽出された時点の前後で所定閾値以上変化しているか否かを判定することを特徴とする請求項１又は２に記載の抽出装置。
【請求項４】
前記傾向抽出手段は、前記メモリアクセスの傾向について、前記候補抽出手段によって抽出された時点の前後で最も大きく変化しているか否かを判定することを特徴とする請求項１又は２に記載の抽出装置。
【請求項５】
前記傾向抽出手段による判定の結果、所定条件を満たすものについて、前記候補抽出手段による抽出時点が複数のメモリアクセスのうち少なくとも２つで一致する場合に、一致した抽出時点でのオリジナルコード候補をオリジナルコードとして判定し、前記候補抽出手段による抽出時点が複数のメモリアクセスで全て一致しない場合に、メモリアクセスの傾向について最も大きな変化を有するオリジナルコード候補をオリジナルコードとして判定する判定手段をさらに有することを特徴とする請求項１〜４のいずれか一つに記載の抽出装置。
【請求項６】
前記取得手段は、メモリに対する読み込み、書き込み及び命令フェッチのメモリアクセス情報を取得することを特徴とする請求項１に記載の抽出装置。
【請求項７】
パッキングされたプログラムからオリジナルコードを抽出する抽出方法であって、
前記プログラムを実行させ、前記オリジナルコードの候補を抽出する候補抽出工程と、
前記プログラムを実行するプロセスによるメモリアクセスに関する情報であって、前記候補抽出工程によって抽出された時点の前後一定期間におけるメモリアクセス情報を取得する取得工程と、
前記候補抽出工程によって抽出されたオリジナルコード候補の情報と、前記取得工程によって取得されたメモリアクセス情報とに基づいてメモリアクセスの傾向を抽出し、抽出されたメモリアクセスの傾向について、所定条件を満たすか否かを判定する傾向抽出工程と
を含んだことを特徴とする抽出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、抽出装置及び抽出方法に関する。
【背景技術】
【０００２】
従来、コンピュータウィルスやスパイウェア等の悪意のあるプログラムであるマルウェアのプログラムコードは、該マルウェアの動作や機能が解析されることを妨害するために難読化されていることが多い。かかる難読化は、一つの態様として、ＸＯＲエンコードや特定の鍵を利用した暗号化等の可逆なアルゴリズムを利用するものが挙げられる。また、マルウェアのプログラムコードが難読化されることで、本来のプログラムコードであるオリジナルコードが隠蔽されることはパッキングと呼ばれ、該パッキングを実行するツールは総じてパッカーと呼ばれる。
【０００３】
ところで、パッキングされたマルウェアは、難読化されたプログラムコードをデータとして有するとともに、オリジナルコードを復元するための展開コードを有する。詳細には、パッキングされたマルウェアが実行された場合には、展開コードの部分が実行されて難読化されたプログラムコードが解かれ、オリジナルコードがメモリ上に展開される。続いて、オリジナルコードの展開が完了した場合には、展開されたオリジナルコードが実行される。なお、パッカーの中には、オリジナルコードを難読化するだけでなく、デバッガによる解析を妨害するアンチデバッグの機能を展開されるコードに含むものもある。
【０００４】
このようなパッキングされたマルウェアを解析する場合に、解析者は、オリジナルコードを取り出してから逆アセンブルすることでアセンブラコードを復元し、復元されたアセンブラコードを読むことでマルウェアの解析を進める。また、オリジナルコードを取り出す場合に、解析者は、デバッガをマルウェアにアタッチした状態で該マルウェアを実行させる。続いて、解析者は、マルウェアの展開コードが終了してオリジナルコードの先頭（OEP：Original  Entry  Point）に移る直前又は直後等の近傍でマルウェアの動作を停止させる。その後、解析者は、メモリ上においてマルウェアが利用しているアドレスの範囲のバイナリデータをファイルにダンプすることでオリジナルコードを抽出する。
【０００５】
また、最近では、上記のように解析者がデバッガを利用して手動で解析するものの他に、難読化されたプログラムコードからオリジナルコードを自動的に取り出す技術が考えられている。例えば、オリジナルコードを自動的に取り出す技術では、実行プログラムの書きこみと命令フェッチとのメモリアクセスを監視する。そして、オリジナルコードを自動的に取り出す技術では、実行中のプロセスで書き込まれたメモリアドレス領域が実行されるときのメモリアクセスをＯＥＰとして、メモリ上のデータをファイルにダンプするものがある。
【先行技術文献】
【非特許文献】
【０００６】
【非特許文献１】Min  Gyung  Kang，Pongsin Poosankam，Heng  Yin，“Renovo：a  hidden  code  extractor  for  packed  executables”，In  Proceedings  of  the  2007  ACM  workshop  on  Recurring  malcode，pages  46‐53，2007
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、上述した従来技術では、高精度にオリジナルコードを抽出することができないという課題がある。具体的には、解析者によって解析される場合には、実行されるマルウェアのコードを順次追いかけることになるため、相当な数のステップを有するマルウェアであれば非常に手間のかかる作業となってしまう。加えて、解析者によって解析される場合には、展開コードの終端の判断について経験を要することになるため、解析者によって結果が異なるとともに、未熟な解析者では間違いが発生する可能性が大きい。
【０００８】
また、オリジナルコードを自動的に取り出す技術では、マルウェアの難読化が多段階になっている場合に、オリジナルコードの出現前であるにもかかわらず、書き込みのあったアドレス領域を実行してしまうことがあり得る。これにより、オリジナルコードを自動的に取り出す技術では、展開途中のコードをオリジナルコードとして誤って抽出してしまう可能性がある。
【０００９】
そこで、本願に開示する技術は、上記に鑑みてなされたものであって、高精度にオリジナルコードを抽出することが可能である抽出装置及び抽出方法を提供することを目的とする。
【課題を解決するための手段】
【００１０】
上述した課題を解決し、目的を達成するため、本願に開示する抽出装置は、パッキングされたプログラムからオリジナルコードを抽出する抽出装置であって、前記プログラムを実行させ、前記オリジナルコードの候補を抽出する候補抽出手段と、前記プログラムを実行するプロセスによるメモリアクセスに関する情報であって、前記候補抽出手段によって抽出された時点の前後一定期間におけるメモリアクセス情報を取得する取得手段と、前記候補抽出手段によって抽出されたオリジナルコード候補の情報と、前記取得手段によって取得されたメモリアクセス情報とに基づいてメモリアクセスの傾向を抽出し、抽出されたメモリアクセスの傾向について、所定条件を満たすか否かを判定する傾向抽出手段とを有する。
【００１１】
また、本願に開示する抽出方法は、パッキングされたプログラムからオリジナルコードを抽出する抽出方法であって、前記プログラムを実行させ、前記オリジナルコードの候補を抽出する候補抽出工程と、前記プログラムを実行するプロセスによるメモリアクセスに関する情報であって、前記候補抽出工程によって抽出された時点の前後一定期間におけるメモリアクセス情報を取得する取得工程と、前記候補抽出工程によって抽出されたオリジナルコード候補の情報と、前記取得工程によって取得されたメモリアクセス情報とに基づいてメモリアクセスの傾向を抽出し、抽出されたメモリアクセスの傾向について、所定条件を満たすか否かを判定する傾向抽出工程とを含む。
【発明の効果】
【００１２】
本願に開示する抽出装置及び抽出方法の一つの様態によれば、高精度にオリジナルコードを抽出することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、実施例１に係る抽出装置の構成例を示す図である。
【図２】図２は、実施例１に係る抽出装置を含むシステムの全体像の例を示す図である。
【図３】図３は、実施例１に係る抽出装置による全体処理の流れの例を示すフローチャートである。
【図４】図４は、実施例１に係るメモリアクセス傾向抽出処理の流れの例を示すフローチャートである。
【図５】図５は、実施例２に係る抽出装置の構成例を示す図である。
【図６】図６は、実施例２に係る判定処理の流れの例を示すフローチャートである。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、本願に開示する抽出装置及び抽出方法の実施例を説明する。なお、以下の実施例により本発明が限定されるものではない。また、各実施例は、内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例１】
【００１５】
［実施例１に係る抽出装置の構成］
最初に、図１を用いて、実施例１に係る抽出装置の構成を説明する。図１は、実施例１に係る抽出装置の構成例を示す図である。
【００１６】
例えば、図１に示すように、抽出装置１００は、メモリダンプ抽出部１１１と、メモリアクセス情報取得部１１２と、メモリアクセス傾向抽出部１１３とを有する。また、抽出装置１００は、パッキングされたプログラムから本来のプログラムコードであるオリジナルコードを抽出する装置である。
【００１７】
メモリダンプ抽出部１１１は、例えば、パッキングされたプログラムを実行させ、該パッキングされたプログラムが書き込みを行なったメモリ領域を実行する場合に、メモリ上のバイナリデータをファイルとしてダンプする。つまり、このダンプファイルは、パッキングされたプログラムに含まれるオリジナルコードの候補として抽出される。そして、メモリダンプ抽出部１１１は、ダンプファイルの抽出時点等の情報を含むダンプファイル情報をメモリアクセス傾向抽出部１１３に通知する。
【００１８】
メモリアクセス情報取得部１１２は、例えば、パッキングされたプログラムを実行するプロセスによるメモリアクセスに関する情報であって、メモリダンプ抽出部１１１によってオリジナルコード候補となるダンプファイルが抽出された時点の前後一定期間におけるメモリアクセス情報を取得する。メモリアクセス情報取得部１１２によって取得されるメモリアクセス情報は、例えば、「メモリアクセスの回数」や「メモリアクセスの際のアドレス値」等の情報を含む。なお、メモリアクセスについては、例えば、メモリに対する読み込み、書き込み及び命令フェッチ等が挙げられる。
【００１９】
メモリアクセス傾向抽出部１１３は、例えば、メモリダンプ抽出部１１１によって通知されたダンプファイル情報と、メモリアクセス情報取得部１１２によって取得されたメモリアクセス情報とに基づいて、メモリアクセスの傾向を抽出する。メモリアクセス傾向抽出部１１３による処理は、例えば、メモリダンプ抽出部１１１とメモリアクセス情報取得部１１２とにおいてある程度の情報が抽出及び取得できた時点で開始されれば良い。
【００２０】
詳細には、メモリアクセス傾向抽出部１１３は、オリジナルコード候補の抽出時前後の一定期間それぞれにおける「メモリアクセスの回数：ｎ」と、「各メモリアクセスの際のアドレス値：α」とから「アクセスされたアドレスの範囲の平均値：μ」を式（１）により求める。
【００２１】
【数１】
0005389733.tif 000002
【００２２】
また、メモリアクセス傾向抽出部１１３は、オリジナルコード候補が抽出された時点の前後におけるメモリアクセスの傾向の「変化率：ρ」を式（２）により求める。式（２）では、抽出前の平均値を「μｂｅｆｏｒｅ」として、抽出後の平均値を「μａｆｔｅｒ」として示す。
【００２３】
【数２】
0005389733.tif 000003
【００２４】
その後、メモリアクセス傾向抽出部１１３は、メモリアクセスの傾向として求められた「変化率：ρ」について、ダンプファイル抽出時点の前後で所定条件を満たすか否かを判定する。かかる所定条件の判定において、メモリアクセス傾向抽出部１１３は、例えば、ダンプファイル抽出時点の前後で「変化率：ρ」が所定閾値以上変化しているか否か、或いは、該「変化率：ρ」が最も大きく変化しているか否かを判定する。
【００２５】
メモリアクセス傾向抽出部１１３による判定の結果、所定閾値以上変化していると判定された場合、或いは、最も大きく変化していると判定された場合に、抽出装置１００は、メモリアクセスの傾向に該当する時点でメモリダンプ抽出部１１１によって抽出されたオリジナルコード候補をオリジナルコードとして抽出する。なお、抽出装置１００は、メモリアクセス傾向抽出部１１３による判定の結果、該当するオリジナルコード候補が複数存在する場合に、複数の時点でのオリジナルコード候補をオリジナルコードとして抽出する。
【００２６】
このように、抽出装置１００は、オリジナルコード候補の抽出前後におけるメモリアクセスの傾向が大きく変化している場合に、該オリジナルコード候補をオリジナルコードとして抽出するので、高精度にオリジナルコードを抽出することができる。換言すると、抽出装置１００は、プログラムコードの目的（役割）が異なればプログラムコードが変化し、該変化に伴ってメモリアクセスの傾向も変化することと、難読化されたプログラムコードの実行において最初に展開コードが実行される特性とを利用し、プログラムコードの目的が大きく変化する時点をオリジナルコードの展開が終わり、実行されはじめたこととしている。要するに、抽出装置１００は、オリジナルコードの展開が終わり、実行されはじめた時点をメモリアクセスの傾向の変化として捉え、諸傾向の変化の大きい時点で抽出したメモリダンプをオリジナルコードとして抽出するので、解析者が解析したり、メモリアクセス時点のコードをオリジナルコードとして抽出したりする従来技術と比較して、高精度にオリジナルコードを抽出することができる。
【００２７】
［システム全体像］
次に、図２を用いて、実施例１に係る抽出装置１００を含むシステムの全体像を説明する。図２は、実施例１に係る抽出装置１００を含むシステムの全体像の例を示す図である。
【００２８】
例えば、図２に示すように、抽出装置１００を含むシステムは、難読化プロセスと、アプリケーションと、ＧＵＥＳＴ  ＯＳ（Operating  System）と、ＶＭＭ（Virtual  Machine  Monitor）と、ＨＯＳＴ  ＯＳと、ＨＷ（hardware）とを有する。なお、難読化プロセスとは、パッキングされたプログラムを指す。
【００２９】
メモリダンプ抽出部１１１とメモリアクセス情報取得部１１２とは、システムにおいてメモリアクセス情報を取得するため、ＯＳに仮想的なハードウェアを提供するソフトウェアである仮想マシンモニタ（ＶＭＭ）を利用する。
【００３０】
ＶＭＭは、ＨＯＳＴ  ＯＳがインストールされているＨＷ上にて動作する。また、ＧＵＥＳＴ  ＯＳは、ＶＭＭ上にて動作させる仮想ＯＳであり、さらに、該ＧＵＥＳＴ  ＯＳの上位にてアプリケーションと、難読化プロセスとが動作する。また、メモリアクセス傾向抽出部１１３は、ＨＯＳＴ  ＯＳ側でアプリケーションとして動作する。
【００３１】
また、ＶＭＭによって提供される仮想的なメモリに配置された監視モジュールは、メモリアクセスを監視する。監視モジュールによる監視でメモリアクセスが発生した場合に、メモリアクセス情報取得部１１２は、アクセス先のアドレス値と、該アドレス値に格納されたデータ（書き込みの場合は書き込もうとしたデータ）と、読み込み或いは書き込みのトリガとなった実行命令とをログとして取得する。
【００３２】
また、ＶＭＭは、一度書き込まれた領域を記憶しておく。そして、メモリダンプ抽出部１１１は、領域が実行される場合に、メモリ上のデータをファイルとして抽出する。このとき、メモリアクセス情報取得部１１２は、取得したメモリアクセス情報をメモリアクセス傾向抽出部１１３に出力する。そして、メモリアクセス傾向抽出部１１３は、ＶＭＭ内で動作するメモリダンプ抽出部１１１とメモリアクセス情報取得部１１２とからダンプファイル情報及びメモリアクセス情報を受け取り、メモリアクセスの傾向を抽出し、抽出されたメモリアクセスの傾向について所定条件を満たすか否かの判定結果を出力する。
【００３３】
［全体処理フロー］
次に、図３を用いて、実施例１に係る抽出装置１００による全体処理の流れを説明する。図３は、実施例１に係る抽出装置１００による全体処理の流れの例を示すフローチャートである。
【００３４】
例えば、図３に示すように、抽出装置１００は、パッキングされたプログラムを実行させ、書き込みのあったメモリ領域を実行する場合に、メモリ上のバイナリデータをファイルとしてダンプすることでオリジナルコード候補を抽出する（ステップＳ１０１）。そして、抽出装置１００は、オリジナルコード候補が抽出された時点の前後一定期間で、パッキングされたプログラムを実行するプロセスでのメモリアクセス情報を取得する（ステップＳ１０２）。
【００３５】
続いて、抽出装置１００は、オリジナルコード候補の抽出時前後の一定期間それぞれにおけるメモリアクセスの回数と、各メモリアクセスの際のアドレス値とから、アクセスされたアドレスの範囲の平均値を求めることで、メモリアクセスの傾向を抽出する（ステップＳ１０３）。かかるメモリアクセスの傾向の抽出では、メモリアクセスそれぞれについてさらに変化率を求める。その後、抽出装置１００は、変化率が所定閾値以上であるか否かを判定し、判定結果を出力する（ステップＳ１０４）。かかる判定については、変化率が最も大きいか否かを判定することにしても良い。
【００３６】
［メモリアクセス傾向抽出処理］
次に、図４を用いて、実施例１に係るメモリアクセス傾向抽出処理の流れを説明する。図４は、実施例１に係るメモリアクセス傾向抽出処理の流れの例を示すフローチャートである。なお、メモリアクセス傾向抽出処理とは、主にメモリアクセス傾向抽出部１１３による処理を指す。また、図４では、メモリアクセスのうち、読み込みに係るメモリアクセスの傾向抽出について説明する。
【００３７】
例えば、図４に示すように、メモリアクセス傾向抽出部１１３は、メモリダンプ情報とメモリアクセス情報との数がある程度の量になった場合に、ダンプファイルの抽出時点におけるメモリアクセス情報を受け取る（ステップＳ２０１）。かかるメモリアクセス情報は、例えば、各ダンプファイルの抽出時点の前後一定期間における読み込み、書き込み及び命令フェッチ等のメモリアクセスの情報であり、ダンプファイル毎に存在する。
【００３８】
そして、メモリアクセス傾向抽出部１１３は、受け取ったメモリアクセス情報が空であるか否かを判定する（ステップＳ２０２）。このとき、メモリアクセス傾向抽出部１１３は、メモリアクセス情報が空である場合に（ステップＳ２０２肯定）、最大値（ｍａｘ値）を有するダンプファイルの抽出時点の情報を判定部１１４に通知する（ステップＳ２０３）。
【００３９】
一方、メモリアクセス傾向抽出部１１３は、メモリアクセス情報が空でない場合に（ステップＳ２０２否定）、ダンプファイルの抽出前におけるメモリアクセスのアドレス範囲の平均値を算出する（ステップＳ２０４）。続いて、メモリアクセス傾向抽出部１１３は、ダンプファイルの抽出後におけるメモリアクセスのアドレス範囲の平均値を算出する（ステップＳ２０５）。
【００４０】
その後、メモリアクセス傾向抽出部１１３は、ダンプファイルの抽出の前後における平均値の差分を計算し、「ｄ」として保存する（ステップＳ２０６）。そして、メモリアクセス傾向抽出部１１３は、最大値が空であるか否かを判定する（ステップＳ２０７）。このとき、メモリアクセス傾向抽出部１１３は、最大値が空でない場合に（ステップＳ２０７否定）、「ｄ」が最大値よりも大きいか否かを判定する（ステップＳ２０８）。一方、メモリアクセス傾向抽出部１１３は、最大値が空である場合に（ステップＳ２０７肯定）、該最大値を「ｄ」に設定する（ステップＳ２０９）。
【００４１】
また、メモリアクセス傾向抽出部１１３は、「ｄ」が最大値よりも大きい場合に（ステップＳ２０８肯定）、該最大値を「ｄ」に設定する（ステップＳ２０９）。ここで、メモリアクセス傾向抽出部１１３は、「ｄ」が最大値よりも小さい場合（ステップＳ２０８否定）、及び、最大値を「ｄ」に設定した場合（ステップＳ２０９）に、ステップＳ２０１の処理を実行することになる。
【００４２】
要するに、メモリアクセス傾向抽出部１１３は、メモリアクセス情報に基づき、ダンプ毎のダンプ時点前後におけるメモリアクセスの回数とアドレス値とから平均値を求め、該ダンプ時点前後での平均値の差分を変化率として定義する。そして、メモリアクセス傾向抽出部１１３は、求められた変化率と既に求めた変化率とを比較し、全てのダンプ時点の中で最大となる変化率を抽出する。その後、メモリアクセス傾向抽出部１１３は、全てのダンプ時点における変化率を求めた場合に、最大の変化率を有するダンプファイル情報を出力する。これにより、抽出装置１００は、ダンプファイル情報に該当するオリジナルコード候補をオリジナルコードとして抽出することとなる。
【００４３】
［実施例１による効果］
上述したように、抽出装置１００は、マルウェアを実行させて得られるオリジナルコード候補を抽出し、抽出された時点の前後一定期間におけるプロセスでのメモリアクセス情報からメモリアクセスの傾向を抽出し、メモリアクセスの傾向が大きく変化しているものに該当するオリジナルコード候補をオリジナルコードとして抽出するので、高精度にオリジナルコードを抽出することができる。
【実施例２】
【００４４】
ところで、上記実施例１では、メモリアクセスの傾向が所定条件を満たす場合にオリジナルコード候補をオリジナルコードとして抽出する場合を説明したが、抽出されたオリジナルコードからさらに好適なオリジナルコードを抽出することもできる。そこで、実施例２では、実施例１において抽出されたオリジナルコードからさらに好適なオリジナルコードを抽出する場合を説明する。
【００４５】
［実施例２に係る抽出装置の構成］
図５を用いて、実施例２に係る抽出装置の構成を説明する。図５は、実施例２に係る抽出装置の構成例を示す図である。なお、図５では、実施例１に係る抽出装置１００と同様の構成や機能を有するブロックについては同一の符号を付している。以下では、実施例１に係る抽出装置１００と同一の処理についてはその説明を省略し、特に、判定部２１４の処理について説明する。
【００４６】
例えば、図５に示すように、抽出装置２００は、メモリダンプ抽出部１１１と、メモリアクセス情報取得部１１２と、メモリアクセス傾向抽出部１１３と、判定部１１４とを有する。また、抽出装置２００は、パッキングされたプログラムから本来のプログラムコードであるオリジナルコードを抽出する。なお、判定部２１４は、図２において、メモリアクセス傾向抽出部１１３と同様に、ＨＯＳＴ  ＯＳ側でアプリケーションとして動作する。
【００４７】
判定部２１４は、例えば、メモリアクセス傾向抽出部１１３よる判定の結果、所定条件を満たすものについて、メモリダンプ抽出部１１１による抽出時点が複数のメモリアクセスのうち少なくとも２つで一致する場合に、一致した抽出時点でのオリジナルコード候補をオリジナルコードとして判定する。
【００４８】
また、判定部２１４は、メモリアクセス傾向抽出部１１３による判定の結果、所定条件を満たすものについて、メモリダンプ抽出部１１１による抽出時点が複数のメモリアクセスで全て一致しない場合に、メモリアクセスの傾向について最も大きな変化を有するオリジナルコード候補をオリジナルコードとして判定する。なお、メモリアクセスは、例えば、読み込み、書き込み及び命令フェッチ等である。また、判定部２１４による判定の結果、オリジナルコードとして判定された場合に、抽出装置２００は、該当するオリジナルコード候補をオリジナルコードとして抽出する。
【００４９】
［判定処理］
次に、図６を用いて、実施例２に係る判定処理の流れを説明する。図６は、実施例２に係る判定処理の流れの例を示すフローチャートである。なお、判定処理とは、主に判定部２１４による処理を指す。
【００５０】
例えば、図６に示すように、判定部２１４は、メモリアクセス傾向抽出部１１３によって抽出されたメモリアクセスそれぞれの最大の差分値である変化率やダンプ時点におけるダンプファイル情報等を受け取る（ステップＳ３０１）。かかるメモリアクセスは、例えば、読み込み、書き込み及び命令フェッチ等である。
【００５１】
そして、判定部２１４は、全てのメモリアクセスの中でダンプファイルの抽出時点が同一のものがあるか否かを判定する（ステップＳ３０２）。このとき、判定部２１４は、３つのメモリアクセスのうち、全てにおいてダンプファイルの抽出時点が同一でない場合に（ステップＳ３０２否定）、３つのメモリアクセスのうち２つにおいてダンプファイルの抽出時点が同一であるか否かを判定する（ステップＳ３０３）。
【００５２】
続いて、判定部２１４は、３つのメモリアクセスのうち、２つにおいてダンプファイルの抽出時点が同一でない場合に（ステップＳ３０３否定）、該メモリアクセスのうち、最大の変化率を有するダンプファイルの抽出時点を取得する（ステップＳ３０４）。なお、ダンプファイルの抽出時点の取得については、最大の変化率ではなく、該変化率が所定閾値以上であるものを取得するようにしても良い。
【００５３】
その後、判定部２１４は、取得されたダンプファイルの抽出時点のものをオリジナルコードとして決定する（ステップＳ３０５）。なお、判定部２１４は、全てのメモリアクセスにおいてダンプファイルの抽出時点が同一である場合（ステップＳ３０２肯定）と、２つにおいてダンプファイルの抽出時点が同一である場合（ステップＳ３０３肯定）とについても、一致しているダンプファイル抽出時点のものをオリジナルコードとして決定する（ステップＳ３０５）。
【００５４】
［実施例２による効果］
上述したように、抽出装置２００は、メモリアクセスの変化の大きいオリジナルコード候補のうち、メモリアクセスにおいて同一のダンプポイントがあれば該当するオリジナルコード候補をオリジナルコードとして決定し、同一のダンプポイントがなければ最も変化の大きいオリジナルコード候補をオリジナルコードとして決定するので、より高精度にオリジナルコードを抽出することができる。
【実施例３】
【００５５】
さて、これまで本願に開示する抽出装置及び抽出方法の実施例について説明したが、上述した実施例以外にも種々の異なる形態にて実施されてよいものである。そこで、（１）所定条件に係る処理、（２）装置の構成、において異なる実施例を説明する。
【００５６】
（１）所定条件に係る処理
上記実施例では、所定条件に係る処理、すなわちメモリアクセスの傾向が所定閾値以上変化しているか否か、或いは、最も大きく変化しているか否かの判定について、メモリアクセス傾向抽出部１１３で処理する場合を説明したが、これらの処理を判定部２１４で実施することにしても良い。例えば、メモリアクセス傾向抽出部１１３は、ダンプファイル情報とメモリアクセス情報とに基づき変化率等のメモリアクセスの傾向を抽出し、判定部２１４は、メモリアクセスの傾向について所定条件を満たすか否かを判定し、所定条件を満たすものについて、メモリアクセスのうち複数で同一のダンプポイントを有するか否かを判定し、オリジナルコード候補からオリジナルコードを決定する。
【００５７】
また、上記実施例では、所定条件を満たすものとして、メモリアクセスの傾向が所定閾値以上変化するもの、或いは、最も大きく変化しているものについて、該当するオリジナルコード候補をオリジナルコードとすることとして説明したが、メモリアクセスの傾向が所定閾値以上変化するもの、且つ、最も大きく変化しているものについて、該当するオリジナルコード候補をオリジナルコードとすることとしても良い。すなわち、メモリアクセスの傾向が全てにおいて変化が小さい（所定閾値未満である）場合には、オリジナルコードとして抽出しない。
【００５８】
（２）装置の構成
なお、上記文書中や図面中などで示した処理手順、制御手順、具体的名称、各種のデータやパラメタなどを含む情報（例えば、メモリアクセスの種類等）については、特記する場合を除いて任意に変更することができる。
【００５９】
また、図示した各装置の各構成要素は、機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は、図示のものに限られず、その全部または一部を各種の負担や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合することができる。さらに、各装置にて行われる各処理機能は、その全部または任意の一部が、ＣＰＵおよび当該ＣＰＵにて解析実行されるプログラムにて実現され、或いは、ワイヤードロジックによるハードウェアとして実現され得る。
【産業上の利用可能性】
【００６０】
以上のように、本発明に係る抽出装置及び抽出方法は、パッキングされたプログラムからオリジナルコードを抽出する場合に有用であり、特に、高精度にオリジナルコードを抽出することに適する。
【符号の説明】
【００６１】
１００，２００  抽出装置
１１１  メモリダンプ抽出部
１１２  メモリアクセス情報取得部
１１３  メモリアクセス傾向抽出部
２１４  判定部
【図１】
0005389733.tif 000004
【図２】
0005389733.tif 000005
【図３】
0005389733.tif 000006
【図４】
0005389733.tif 000007
【図５】
0005389733.tif 000008
【図６】
0005389733.tif 000009