説明

特定装置、特定方法及び特定プログラム

【課題】適切なインポートアドレス格納場所を特定すること。
【解決手段】開示する特定装置は、一つの態様において、抽出部と、算出部と、特定部とを有する。抽出部は、パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。算出部は、前記抽出部により抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。特定部は、前記算出部により算出された確率が閾値以上である場合に、間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、特定装置、特定方法及び特定プログラムに関する。
【背景技術】
【0002】
近時、コンピュータウィルス等の悪意あるソフトウェアに対する対策が不可欠となっている。コンピュータウィルス等の悪意あるソフトウェアとは、例えば、マルウェアが該当する。マルウェアには、パッカーと呼ばれるツールにより、機械語のオリジナルコードに対して解読を困難にするため隠蔽処理であるパッキングが施される。オリジナルコードにパッキングが施されることで、アンチウィルスソフトのパターンマッチング機構を回避され、マルウェアの解析が困難となる。また、プログラムの解析を困難にする機構を持つパッカーもある。なお、オリジナルコードを復元する処理を「アンパッキング」とも称する。プログラムの解析を困難にする機構とは、例えば、Anti−DebugやAnti−VMなどがある。
【0003】
また、実行可能形式のファイルを受け付け、オリジナルコードを隠蔽しつつも実行可能形式を保ったファイルを出力するパッカーであるランタイムパッカーがある。ランタイムパッカーによりパッキングされたプログラムは、オリジナルコードを復元し、通常はローダが行う動的ライブラリのリンク処理等を実施した後に、オリジナルコードのエントリポイントへ処理を渡す。
【0004】
ここで、マルウェアの脅威を把握する際には、オリジナルコードを抽出し、抽出したオリジナルコードから外部関数を呼び出すときに使用される外部関数のアドレスが格納される格納場所であるインポートアドレス格納場所を特定する必要がある。なお、外部関数とは、例えば、Win32 API(Application Program Interface)、DLL(Dynamic Link Library)などがある。
【0005】
なお、インポートアドレス格納場所を特定する手法として、逆アセンブル結果に基づき、オリジナルコード領域から間接call命令を抽出し、抽出した間接call命令により示されるメモリ領域をインポートアドレス格納場所として特定する特定手法がある。
【先行技術文献】
【特許文献】
【0006】
【特許文献1】特開2010−92179号公報
【非特許文献】
【0007】
【非特許文献1】Daniel Quist, Lorie Liebrock, Joshua Neil, Improving antivirus accuracy with hypervisor assisted analysis, Journal in Computer Virology (Published online: 6 April 2010)[online]、[2011年5月16日検索]、[インターネット](URL:http://csr.lanl.gov/vera/jcv−quist−liebrock−neil.pdf)
【発明の概要】
【発明が解決しようとする課題】
【0008】
しかしながら、上述の従来の特定手法では、逆アセンブル結果が不正確である場合に、誤ったインポートアドレス格納場所が特定されるという課題がある。例えば、データ部分を誤って間接call命令として抽出されると、誤ったインポートアドレス格納場所が特定される。
【0009】
すなわち、オリジナルコードから間接call命令を抽出し、抽出した間接call命令により示されるメモリ領域をインポートアドレス格納場所とする上述の従来の特定手法では、オリジナルコードに対応する正確な逆アセンブル結果が必要となる。ここで、マルウェア作者は、アンチウィルスソフトベンダ等による解析や対策から逃れることを目的として、ソースコードや逆アセンブルに要するシンボル情報などを非公開とすることがある。この場合、正確な逆アセンブル結果が得られず、誤ったインポートアドレス格納場所を特定されることがある。
【0010】
開示の実施形態は、上述に鑑みてなされたものであって、適切なインポートアドレス格納場所を特定可能となる特定装置、特定方法及び特定プログラムを提供することを目的とする。
【課題を解決するための手段】
【0011】
開示する特定装置は、一つの態様において、抽出部と、算出部と、特定部とを有する。抽出部は、パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。算出部は、前記抽出部により抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。特定部は、前記算出部により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。
【発明の効果】
【0012】
開示する特定装置の一つの態様によれば、適切なインポートアドレス格納場所を特定可能となるという効果を奏する。
【図面の簡単な説明】
【0013】
【図1】図1は、実施例1における特定装置の構成の一例を示すブロック図である。
【図2】図2は、実施例1における特定装置に入力されるオリジナルコードの一部を示す図である。
【図3】図3は、実施例1における暫定分岐情報格納テーブルに記憶された情報の一例を示す図である。
【図4】図4は、実施例1における暫定分岐ツリー情報テーブルに記憶された情報の一例を示す図である。
【図5】図5は、隠れマルコフモデルの一例を示す図である。
【図6】図6は、隠れマルコフモデルの一例を示す図である。
【図7】図7は、実施例1における分岐命令解析部による処理の一例について示す図である。
【図8−1】図8−1は、実施例1における分岐命令解析部による処理の一例について示す図である。
【図8−2】図8−2は、実施例1における分岐命令解析部による処理の一例について示す図である。
【図9】図9は、実施例1における分岐命令解析部による処理の一例について示す図である。
【図10】図10は、実施例1における特定装置による処理の流れの一例を示すフローチャートである。
【図11】図11は、特定装置による一連の処理を実行するための特定プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。
【発明を実施するための形態】
【0014】
以下に、開示する特定装置、特定方法及び特定プログラムの実施例について、図面に基づいて詳細に説明する。なお、本実施例により開示する発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。
【実施例1】
【0015】
図1は、実施例1における特定装置の構成の一例を示すブロック図である。図1に示す例では、特定装置100は、記憶部110と、制御部120とを有する。また、特定装置100は、以下に詳細に説明するように、オリジナルコード10の入力を受け付け、インポートアドレス格納場所を出力する。
【0016】
なお、以下では、インポートアドレス格納場所20を「分岐先アドレス格納場所」とも記載する。言い換えると、以下では、特定装置100が、パッキングされたプログラムコードをアンパックすることで得られるオリジナルコード10の入力を受け付ける場合を例に説明する。言い換えると、パッキング前のプログラムコードの入力を受け付ける場合を用いて説明する。
【0017】
ただし、これに限定されるものではなく、例えば、特定装置100は、パッキングされたファイルを受け付け、受け付けたファイルからオリジナルコード10を抽出した上で、後述する一連の処理を実行することでインポートアドレス格納場所情報を出力しても良い。
【0018】
図2は、実施例1における特定装置に入力されるオリジナルコードの一部を示す図である。図2に示す例では、説明の便宜上、オリジナルコード10に記載された一連の機械語のうちの機械語命令と解釈される部分の先頭を示す「アドレス」と対応付けて、「アドレス」から始まる機械語が機械語命令であると解釈した場合に得られる「ニーモニック」を示した。
【0019】
図2に示す例では、アドレス「0x0005」とニーモニック「call 0x000F」とを対応付けて記憶する。すなわち、オリジナルコード10のうち、「0x0005」が機械語命令であると解釈した場合には、ニーモニック「call 0x000F」が得られることを示す。なお、図2に示す例では、ニーモニックが「call」で始まる場合には、call命令を示す。また、ニーモニックが「jump」で始まる場合には、jump命令を示す。また、図2において、[]がある場合には、間接分岐命令を示し、[]がない場合には、直接分岐命令を示す。例えば、ニーモニック「call 0x000F」は、「0x000F」に分岐する直接call命令を示す。また、ニーモニック「call [0x2004]」は、アドレス「0x2004」に格納されている値を分岐先アドレスとして分岐する間接call命令を示す。
【0020】
記憶部110は、制御部120と接続される。記憶部110は、制御部120による各種処理に用いるデータを記憶する。記憶部110は、例えば、RAM(Random Access Memory)やROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、又は、ハードディスクや光ディスクなどである。図1に示す例では、記憶部110は、暫定分岐情報格納テーブル111と、暫定分岐ツリー情報テーブル112とを有する。
【0021】
暫定分岐情報格納テーブル111は、後述する制御部120の分岐命令解析部121による処理結果を記憶する。図3は、実施例1における暫定分岐情報格納テーブルに記憶された情報の一例を示す図である。
【0022】
図3に示す例では、暫定分岐情報格納テーブル111は、「アドレス」と、「種別」と、「命令確率」と、「暫定分岐先アドレス」と、「暫定分岐先アドレス格納場所」とを対応付けて記憶する。ここで、「アドレス」は、オリジナルコード10に記載された一連の機械語のうち機械語命令と解釈される部分の先頭を示す。「種別」は、分岐命令の種別を示す。例えば、「種別」は、「アドレス」から始まる機械語が機械語命令であると解釈した場合に、「直接call命令」か「間接call命令」か「直接jump命令」か「間接jump命令」かを示す。また、「命令確率」は、「アドレス」から始まる機械語が機械語命令である確率を示す。「命令確率」は「第1の確率」とも記載する。「暫定分岐先アドレス」と「暫定分岐先アドレス格納場所」とは、それぞれ、「アドレス」から始まる機械語が機械語命令についての分岐先アドレス、又は、分岐先アドレスが格納された格納場所を示す。
【0023】
例えば、暫定分岐情報格納テーブル111は、アドレス「0x0005」と、種別「直接call」と、命令確率「0.2」と、暫定分岐先アドレス「0x000F」とを含むレコードを記憶する。すなわち、暫定分岐情報格納テーブル111は、アドレス「0x0005」から始まる機械語が機械語命令であると解釈した場合に、分岐先アドレスが「0x000F」となる直接call命令である確率が「0.2」であることを記憶する。なお、暫定分岐情報格納テーブル111は、直接分岐命令についてのレコードでは、「暫定分岐先アドレス」を記憶する。また、暫定分岐情報格納テーブル111は、間接分岐命令についてのレコードでは、「暫定分岐先アドレス格納場所」を記憶する。
【0024】
なお、暫定分岐情報格納テーブル111に記憶された情報は、分岐命令解析部121により格納され、分岐関係解析部122により用いられる。
【0025】
暫定分岐ツリー情報テーブル112は、後述する制御部120の分岐関係解析部122による処理結果を記憶する。具体的には、暫定分岐ツリー情報テーブル112は、分岐命令解析部121により抽出された分岐命令と解釈可能な部分各々について、他の命令との分岐元又は分岐先を示す分岐関係を示す暫定分岐関係ツリーを記憶する。
【0026】
図4は、実施例1における暫定分岐ツリー情報テーブルに記憶された情報の一例を示す図である。図4に示す例では、図3における「アドレス」を用いて、分岐命令解析部121により抽出された部分各々を示した。図3に示すように、暫定分岐ツリー情報テーブル112は、例えば、「0x0005」が分岐元となり「0x000F」が分岐先となる関係を記憶し、「0x000F」が分岐元となり「0x1004」が分岐先となる関係を記憶する。
【0027】
なお、暫定分岐ツリー情報テーブル112に記憶された情報は、分岐関係解析部122により格納され、インポートアドレス格納場所特定部123により用いられる。
【0028】
制御部120は、記憶部110と接続される。制御部120は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。制御部120は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、CPU(Central Processing Unit)、MPU(Micro Processing Unit)などの電子回路である。図1に示す例では、制御部120は、分岐命令解析部121と、分岐関係解析部122と、インポートアドレス格納場所特定部123とを有する。
【0029】
分岐命令解析部121は、パックされたプログラムコードをアンパックすることで得られるオリジナルコード10から、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。また、分岐命令解析部121は、間接分岐箇所に加えて、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出する。すなわち、分岐命令解析部121は、例えば、オリジナルコード10の入力を受け付けると、分岐命令と解釈可能な部分をすべて抽出する。
【0030】
より詳細な一例をあげて説明すると、分岐命令解析部121は、オリジナルコード10から、直接call命令と間接call命令と直接jump命令と間接jump命令とのうち、いずれかであると解釈可能な部分を抽出する。
【0031】
なお、分岐命令解析部121により抽出された箇所は、分岐命令と解釈可能である箇所であり、実際には分岐命令ではない箇所も含まれることがあり得る。
【0032】
ここで、分岐命令について簡単に説明した上で、直接分岐命令と間接分岐命令との違いについて簡単に説明する。分岐命令とは、次に実行される命令を切り替える命令である。なお、一連の命令は、分岐命令でない場合には、逐次順番に実行される。分岐命令には、例えば、jump命令やcall命令などがある。jump命令やcall命令は、次に実行する命令を変更する。言い換えると、jump命令やcall命令の次に実行される命令は、jump命令やcall命令の次に記載された命令ではなく、jump命令やcall命令のオペランドとして指定された命令となる。例えば、jump命令やcall命令は、オペランドとしてメモリアドレスを指定しており、オペランドとして指定されたメモリアドレスに格納されている値が分岐先アドレスとなる。つまり、jump命令やcall命令の次に、オペランドとして指定されたメモリアドレスに格納されている値が取得されたり処理されたりする。
【0033】
直接分岐命令と間接分岐命令との違いについて簡単に説明する。直接分岐命令には、例えば、直接call命令と直接jump命令とがある。また、間接分岐命令には、例えば、間接call命令と間接jump命令とがある。直接分岐命令では、命令内に分岐先となる分岐先アドレスが明示されており、命令解読時に分岐先が決定される。間接分岐命令では、命令内に分岐先アドレスが明示されておらず、実際に間接分岐命令を実行する際に初めて分岐先アドレスが決定される。例えば、間接分岐命令では、命令内には分岐先アドレスが明示されておらず、分岐先アドレス格納場所から分岐先アドレスを読み出すことで、分岐先アドレスが決定される。例えば、間接分岐命令は、実行時にロードされたDLLが分岐先となり、DLLがロードされるメモリアドレスが動的に決定される場合に利用される。
【0034】
また、分岐先アドレス格納場所と、間接分岐箇所と、直接分岐箇所との関係について簡単に説明する。分岐先アドレス格納場所を参照する分岐命令は、間接分岐箇所のみとなる。また、間接分岐箇所を分岐先とする分岐命令は、直接分岐箇所のみとなる。間接分岐箇所を分岐先とする直接分岐箇所は、ない場合もある。直接分岐箇所を分岐先とする分岐命令は、直接分岐箇所のみとなる。直接分岐箇所を分岐先とする直接分岐箇所は、ない場合もある。
【0035】
分岐命令解析部121の説明に戻る。分岐命令解析部121は、公知の手法を用いて、オリジナルコード10から分岐命令と解釈可能な箇所を抽出する。例えば、分岐命令解析部121は、機械語にて記載された命令である機械語命令として解釈可能なバイト列を識別することで、直接分岐箇所や間接分岐箇所を抽出する。詳細な一例をあげて説明すると、IA−32命令セットの場合、分岐命令解析部121は、1バイト目が「0xEB」であれば、直接jump命令であると解釈可能な部分として抽出する。
【0036】
また、分岐命令解析部121は、抽出した間接分岐箇所が分岐命令となる第1の確率を算出する。また、同様に、分岐命令解析部121は、抽出した間接分岐箇所が分岐命令となる第1の確率に加えて、抽出した直接分岐箇所が分岐命令となる第1の確率を算出する。なお、分岐命令解析部121による第1の確率を算出する算出手法の一例については、後述する。
【0037】
また、分岐命令解析部121は、抽出した間接分岐箇所と直接分岐箇所とについて、算出した第1の確率と対応付けて暫定分岐情報格納テーブル111に格納する。また、分岐命令解析部121は、抽出した直接分岐箇所について格納する際には、抽出した直接分岐箇所が実際に直接分岐命令である場合に分岐先と解釈される分岐先アドレスを「暫定分岐先アドレス」として併せて格納する。また、分岐命令解析部121は、抽出した間接分岐箇所を格納する際には、抽出した間接分岐箇所が実際に間接分岐命令である場合に分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所と解釈される位置を「暫定分岐先アドレス格納場所」として併せて格納する。
【0038】
例えば、分岐命令解析部121は、先頭が「0x0005」から始まる箇所が直接call命令である第1の確率が「0.2」であると算出した場合を用いて説明する。また、先頭が「0x0005」から始まる箇所が直接call命令であり、分岐先の先頭のアドレスが「0x000F」である場合を用いて説明する。この場合、分岐命令解析部121は、アドレス「0x0005」と、種別「直接call」と、命令確率「0.2」と、暫定分岐先アドレス「0x000F」とを含むレコードを暫定分岐情報格納テーブル111に格納する。
【0039】
分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を解析することで、間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所を識別する。そして、分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を示すツリーである暫定分岐関係ツリーを生成する。なお、分岐関係解析部122は、「識別部」とも称する。
【0040】
例えば、分岐関係解析部122は、分岐命令解析部121により生成された暫定分岐情報格納テーブル111内に記憶されたレコードのうち、種別が「直接call」又は「直接jump」となるレコードを識別する。そして、分岐関係解析部122は、種別が「直接call」又は「直接jump」となるレコードの「先頭」から抽出された箇所が、他のレコードの「暫定分岐先アドレス」と一致するか否かを判定する。すなわち、直接分岐命令として抽出された箇所の分岐元が、直接分岐命令として抽出された箇所と一致するか否かを判定する。なお、レコードの「先頭」から抽出された箇所とは、例えば、図3の「アドレス」に示す箇所が該当する。ここで、分岐関係解析部122は、一致すると判定した場合には、一致すると判定したレコードに対応する箇所各々が分岐元と分岐先とが関係あると判定する。また、分岐関係解析部122は、種別が「直接call」又は「直接jump」となるレコードについての判定結果に加えて、種別が「間接call」又は「間接jump」となるレコードの「先頭」と「暫定分岐先アドレス格納場所」とを加えることで、暫定分岐関係ツリーを生成する。
【0041】
例えば、分岐関係解析部122は、図3に示す暫定分岐情報格納テーブル111に基づいて処理を実行する場合には、図4に示すような暫定分岐ツリーを生成し、暫定分岐ツリー情報テーブル112に格納する。図4は、実施例1における分岐関係解析部により生成される暫定分岐関係ツリーの一例を示す。図4に示す例では、説明の便宜上、直接分岐箇所については4角形で表し、間接分岐箇所については3角形で表し、暫定分岐先アドレス格納場所については丸で表した。例えば、分岐関係解析部122は、直接分岐箇所についての分岐関係の判定結果からツリーを生成する。その後、分岐関係解析部122は、直接分岐箇所の分岐先となる間接分岐箇所と、間接分岐箇所の暫定分岐先アドレス格納場所とを加えることで、暫定分岐ツリーを生成する。なお、図4に示す例では、「0x0005」が分岐元となり「0x000F」が分岐先となり、「0x000F」が分岐元となり「0x1004」が分岐先となる。
【0042】
インポートアドレス格納場所特定部123は、間接分岐箇所の先頭と、間接分岐箇所が分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する。なお、間接分岐箇所の「先頭」や直接分岐箇所の「先頭」とは、間接分岐箇所や直接分岐箇所としてレコードから抽出された箇所のうち、先頭部分にある箇所を示す。すなわち、図3に示す例では、「アドレス」に示された箇所が該当する。
【0043】
また、インポートアドレス格納場所特定部123は、暫定分岐先アドレス格納場所が同一となる間接分岐箇所が複数抽出された場合に、暫定分岐先アドレス格納場所が同一となる間接分岐箇所各々の先頭と、暫定分岐先アドレス格納場所が同一となる間接分岐箇所各々のうちいずれかが分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する。つまり、インポートアドレス格納場所特定部123は、抽出された間接分岐箇所の分岐先アドレスが格納されている暫定分岐先アドレス格納場所が実際に分岐先アドレス格納場所となる確率を算出する。
【0044】
ここで、計算の単純化を目的として、分岐命令解析部121により抽出された箇所各々が機械語命令として解釈される事象がお互いに独立であると仮定して説明する。また、暫定分岐先アドレス格納場所「X」が実際に分岐先アドレス格納場所となる第2の確率を「PX」として説明する。また、「X」と同一の暫定分岐ツリー内に存在する分岐命令「Yi(1≦i≦N,NはXと同一ツリー内に存在する分岐命令の数を示し、iはツリー内の分岐命令各々を表すインデックスを示す。)」として説明する。また、分岐命令「Yi」が実際に分岐命令となる第1の確率を「PYi」とした上で説明する。この場合、「PX」は、下記の式(1)にて算出可能となる。
【0045】
【数1】

【0046】
すなわち、式(1)に示すように、「X」と同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率は、「1」から、「X」と同一の暫定分岐ツリー内に存在する分岐命令のすべてが機械語命令の先頭とはならない確率を減算することで得られる。なお、式(1)の「Π」は、総積を示す。言い換えると、式(1)に示す例では、「Π(1−PYi)」は、「X」と同一の暫定分岐ツリー内に存在するすべての分岐命令「Yi」について「1−PYi」を乗算した結果を示す。
【0047】
すなわち、インポートアドレス格納場所特定部123は、抽出された箇所各々に該当する第1の確率を用いて、抽出された同一ツリー内にある箇所すべてが分岐命令とならない第3の確率を1から減算することで、第2の確率を算出する。ここで、第3の確率とは、例えば、式(1)における「Π(1−PYi)」を示す。
【0048】
より詳細な一例をあげて説明すると、インポートアドレス格納場所特定部123は、処理対象となる箇所について算出された第1の確率を1から減算した値を処理対象となる箇所ごとに算出し、処理対象となる箇所ごとに算出された値各々を積算し、積算することで得られた値を1から減算することで、第2の確率を算出する。処理対象となる箇所とは、同一の暫定分岐ツリー内に存在する分岐命令となり、例えば、間接分岐箇所の先頭一つであったり、間接分岐箇所の先頭、及び間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所の先頭であったり、分岐先アドレス格納場所が同一となる間接分岐箇所各々の先頭及び間接分岐箇所各々のうちいずれかが分岐先となる直接分岐箇所の先頭であったりする。
【0049】
例えば、図3における暫定分岐先アドレス格納場所「0x2004」がインポートアドレス格納場所20となる第2の確率は下記の式(2)にて算出される。
【0050】
【数2】

【0051】
同様に、図3における暫定分岐先アドレス格納場所「0x20AA」がインポートアドレス格納場所20である第2の確率は下記の式(3)にて算出される。
【0052】
【数3】

【0053】
また、インポートアドレス格納場所特定部123は、算出された第2の確率が閾値以上である場合に、間接分岐箇所が間接分岐命令であるとした場合における間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。例えば、閾値として「0.5」を用いる場合には、インポートアドレス格納場所特定部123は、アドレス「0x2004」をインポートアドレス格納場所20として特定し、アドレス「0x20AA」をインポートアドレス格納場所20として特定しない。
【0054】
なお、インポートアドレス格納場所特定部123は、間接分岐箇所について算出された第1の確率が閾値以上となる場合に分岐先アドレス格納場所を特定しても良い。言い換えると、同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を用いることなく、間接分岐箇所について算出された第1の確率のみを用いても良い。
【0055】
ここで、同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率が閾値以上となる場合に、分岐先アドレス格納場所を特定する点について補足する。暫定分岐ツリー内に分岐命令が存在する場合、その分岐先も機械語命令と考えられることを踏まえ、インポートアドレス格納場所特定部123は、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出して用いても良い。
【0056】
ここで、インポートアドレス格納場所特定部123により分岐先アドレス格納場所として特定されるのは、間接分岐箇所として抽出された箇所のうち、算出された第2の確率が閾値以上となった間接分岐箇所についての暫定分岐先アドレス格納場所となる。言い換えると、インポートアドレス格納場所特定部123により分岐先アドレス格納場所として特定されるのは、直接分岐箇所の暫定分岐先アドレスではない。この点について補足する。上述したように、例えば、ランタイムパッカーによりパッキングされたプログラムは、通常はローダが行う動的ライブラリのリンク処理等を実施した後に、オリジナルコードのエントリポイントへ処理が渡される。ここで、Win32 APIやDLLに含まれる外部関数は、通常、実行時にメモリ上に一度ロードされた上で、実行時に決定されたメモリアドレスが参照されて実行される。このことを踏まえ、インポートアドレス格納場所特定部123は、直接分岐箇所の分岐先アドレスではなく、間接分岐箇所の分岐先アドレス格納場所を特定する。
【0057】
ここで、機械語命令として解釈可能な部分が実際に機械語命令である第1の確率を算出する分岐命令解析部121による処理の一例について説明する。以下では,隠れマルコフモデルに基づき箇所各々について命令確率を算出する場合を用いて説明するが,これに限定されるものではない。
【0058】
分岐命令解析部121は、例えば、隠れマルコフモデルによりオリジナルコード10をモデル化し、Forward/Backwardアルゴリズムを用いることで、オリジナルコード10の各バイトが機械語命令の先頭である確率を算出する。なお、以下に説明する処理は一例であり、これに限定されるものではない。
【0059】
隠れマルコフモデルによりオリジナルコード10をモデル化する点について簡単に説明する。なお、以下では、オリジナルコード10に対して逆アセンブルが行われることで、オリジナルコード10を構成する複数のバイナリ値が複数の単語に分割され、分割された複数の単語それぞれに「命令部」又は「データ部」のいずれかの状態であることを示す「タグ」が割り当てられ、「命令部」としての「タグ」が割り当てられた単語の命令長に基づいて、ニーモニック(アセンブルコード)を当てはめられた場合を用いて説明する。すなわち、オリジナルコード10を構成する複数のバイナリ値が複数の単語に分割されており、複数の単語それぞれにタグが付されている場合を用いて説明する。
【0060】
また、以下では、「入力バイナリ列:X」とは、「逆アセンブル」の対象となる「オリジナルコード10」のバイナリ列を示し、「N」個のバイナリ値であるとする。式(4)に示すように、「逆アセンブル」の対象となる「オリジナルコード」を構成するN個のバイナリ値は、「x1〜xN」として表される。
【0061】
【数4】

【0062】
また、「単語列:w」とは、「入力バイナリ列:X」を1命令の「命令部」もしくは1データの「データ部」としての単語として分割したものである。式(5)に示すように、「入力バイナリ列:X」を分割したM個の単語それぞれは、「w1〜wM」として表される。「wi」は1命令もしくは1データを表す。なお、「命令部」は、複数のバイナリ値から構成される場合もあるため、「単語数:M」≦「入力バイナリ数:N」となる。
【0063】
【数5】

【0064】
また、「タグ列:T」とは、単語「w1〜wM」それぞれに対して、「命令部」か「データ部」であるかの「タグ」が割り当てられたものである。式(6)に示すように、単語「w1〜wM」に対応付けてタグ「t1〜tM」として表される。
【0065】
【数6】

【0066】
また、「命令タグ集合:I」は、「命令部」としての状態を表す「タグ」の集合であり、「データタグ集合:D」は、「データ部」としての状態を表す「タグ」の集合である。ここで、タグ「ti(1≦i≦M)」は、命令部かデータ部かのいずれかとなる。この結果、式(7)に示すように、「ti」は、「命令タグ集合:I」あるいは「データタグ集合:D」のいずれかに属する。
【0067】
【数7】

【0068】
図5及び図6は、隠れマルコフモデルの一例を示す図である。すなわち、図5に示すように、「命令タグ集合:I」に属するタグを「継続命令状態:S」及び「データ直前命令状態:T」の2種類に更に分割し、「データタグ集合:D」に属する「データ状態:U」と合わせて3種類の状態から構成される隠れマルコフモデルを前提とする。
【0069】
「継続命令状態:S」は、1命令を出力したのち、引き続き「継続命令状態:S」に留まる場合と、「データ直前命令状態:T」に遷移する場合とがある。
【0070】
「データ直前命令状態:T」は、「継続命令状態:S」と同様に、1命令を出力するが、その遷移先は、「データ状態:U」のみとなる。一般的に、後方にデータが続く命令は、無条件分岐であることが多い。この結果、命令状態を、継続命令状態と、データ直前命令状態に分割することで、逆アセンブルの精度を向上することが期待できる。
【0071】
ここで、「継続命令状態:S」、「データ直前命令状態:T」、又は、「データ状態:U」のいずれかの「状態i」から始まる確率(初期確率)を「πi」とし、「状態i」から「状態j」へ遷移する確率(遷移確率)を「aij」とし、「状態i」におけるシンボルとしての「単語w」が出力される確率(シンボル出力確率)を「bi(w)」とする。
【0072】
このような隠れマルコフモデルの一例において、「データ状態:U」で出力されるシンボルをデータ1バイトとすると、これにより、「データ状態:U」におけるシンボル出力確率「bU(w)」において、「w」は、「0以上255以下の範囲にある整数」とすることができる。
【0073】
これに対して、「命令タグ集合:I」に属する「状態i」において出力されるシンボルの長さ(シンボル長)は、1命令の長さとなる。ここで、複合命令セットコンピュータ(CISC:Complex Instruction Set Computer)アーキテクチャの代表的な例であるIntel社の「x86命令」の場合、1命令の長さは最大で16バイトにも及ぶため、そのままで統計的に信頼できるシンボル出力確率「bi(w)」を学習することは容易ではない。こうした状況に対応するため、図6を用いて近似的にシンボル出力確率「bi(w)」(iはIに属する)を算出する方法について述べる。「x86命令」は、「PREFIX(命令長:0〜4バイト)」、「OPCODE(命令長:1〜2バイト)」、「ModRM(命令長:0〜1バイト)」、「SIB(命令長:0〜1バイト)」、「DISPLACEMENT(命令長:0〜4バイト)」、「IMMEDIATE(命令長:0〜4バイト)」といった命令部から構成される。また、これらの命令部間の遷移パターンは、図6に示すパターンとなる。
【0074】
ここで、図6に示す遷移パターンによって遷移する各命令部を「状態」とし、「命令開始状態」と「命令終了状態」とを除いた各状態(PREFIX,OPCODE,ModRM,SIB,DISPLACEMENT,IMMEDIATE)では、1バイトの命令部を出力するとする。
【0075】
また、「単語w」を1バイトごとに分解した結果を、式(8)によって表し(「xa〜xb」)、対応する命令部の種別を、式(9)によって表すとする。
【0076】
【数8】

【数9】

【0077】
このとき、「命令部1バイトを出力する確率は、その時点での命令部の状態によってのみ決まる」と仮定し、更に、「命令部の状態へ遷移する確率は、一つ前の命令部の状態によって決まる」と仮定すると、「命令タグ集合:I」に属する「状態i」におけるシンボルとしての「単語w」のシンボル出力確率「bi(w)」は、式(10)に示すように、近似することができる。なお、ここで示す「命令部の状態」とは、図6のOPCODEやModRMなどを示す。
【0078】
【数10】

【0079】
これにより、隠れマルコフモデルにおける最尤状態系列算出の問題として、オリジナルコード10から命令部とデータ部とを識別するために用いるモデルパラメータは、命令部間の状態遷移確率と、命令部ごとの1バイトの出現確率のみとすることができる。この命令部に関するモデルパラメータは、「継続命令状態:S」と「データ直前命令状態:T」とで個別に持たせる。
【0080】
次に、分岐命令解析部121によるモデルパラメータの学習について説明する。分岐命令解析部121は、『命令部間の遷移確率「P(vi|vi−1)」及び各命令部における1バイト値のシンボル出力確率「P(xi|vi)」』を、各状態(タグ)間での遷移回数及び各状態(タグ)におけるシンボル出現回数をカウントすることで算出する。ここで、『命令部間の遷移確率「P(vi|vi−1)」及び各命令部における1バイト値のシンボル出力確率「P(xi|vi)」』は、式(11)〜式(14)を算出するためのモデルパラメータである。
【0081】
【数11】

【数12】

【数13】

【数14】

【0082】
ここで、式(11)は、「命令タグ集合:I」又は「データタグ集合:D」のいずれかに属する「状態i」の初期確率「πi」を示す。式(12)は、「命令タグ集合:I」又は「データタグ集合:D」のいずれかに属する「状態i」から「命令タグ集合:I」又は「データタグ集合:D」のいずれかに属する「状態j」への遷移確率「aij」を示す。式(13)は、「状態i」が「データタグ集合:D」に属する場合のシンボル出力確率「bi(w)」を示す。式(14)は、「状態i」が「命令タグ集合:I」に属する場合のシンボル出力確率「bi(w)」を示す。
【0083】
例えば、分岐命令解析部121は、「初期状態」、「継続命令状態:S」、「データ直前命令状態:T」及び「データ状態:U」の間での遷移確率を、図7に示すように、算出する。なお、図7は、実施例1における分岐命令解析部による処理の一例について示す図である。
【0084】
なお、逆アセンブルされていないタグなしのオリジナルコード10について処理を実行する場合の一例について簡単に説明する。分岐命令解析部121は、タグ付きのオリジナルコード10に基づいて決定されたモデルパラメータと、タグなしのオリジナルコード10とを用いて、バウム・ウェルチアルゴリズムによって新たなモデルパラメータを決定して用いる。
【0085】
次に、Forward/Backwardアルゴリズムについて簡単に説明する。分岐命令解析部121は、Forwardアルゴリズムに基づき、モデルパラメータθが与えられたときのオリジナルコード10候補Xの出力確率P(X|θ)を算出する。図8−1及び図8−2、図9は、実施例1における分岐命令解析部による処理の一例について示す図である。
【0086】
図8−1に示すような16進数表記の「入力バイナリ列」がオリジナルコード10として特定装置100に入力された場合を用いて説明する。また、「入力バイナリ列」を先頭から1バイトずつずらしながら、命令として解釈した場合の命令長を取得することで、図8−2に示すデータが得られた場合を用いて説明する。例えば、図8−2に示すように、「入力バイナリ列」が「55」である場合に、「命令長:1」が取得され、これに対応するニーモニックが「PUSH EBP」となる場合を用いて説明する。
【0087】
図9に示す行列は、横軸に「入力バイナリ列」が配置され、縦軸に「継続命令状態:S」、「データ直前命令状態:T」及び「データ状態:U」が配置される。j行目i列目の要素には、「x1,...,xi−1」を出力し且つ「状態j」で「xi(状態jが命令状態の場合は、xiを命令の先頭としたときの命令全体)」を出力する「累積最大確率値」が格納される。また、各要素には、「累積最大確率値」以外にも、「遷移元要素リスト」と「累積最大確率値算出の元になった遷移元要素」が格納される。
【0088】
ここで、各要素における「遷移元要素リスト」は、図8−2に示す命令長と、式(11)〜式(14)に示される遷移状態相関関係とを利用することで算出可能である。具体的には、図9に示す行列における1行目1列目(継続命令状態:S)の場合、「55」は、1バイト命令であり、遷移先は、1行目2列目(継続命令状態:S)と、2行目2列目(データ直前命令状態:T)となる。つまり、1行目2列目と、2行目2列目の「遷移元要素リスト」へ、1行目1列目を追加する。分岐命令解析部121は、全要素について同様の処理を繰り返すことで、各要素における「遷移元要素リスト」が算出する。
【0089】
なお、分岐命令解析部121は、すべての入力バイナリ列を出力し終える場合には、図9に示す行列における終了状態(出力確率は「1」)の列に遷移するとする。なお、例外として、1列目の要素の遷移元は、図9に示す行列における初期状態(累積最大確率値は「1」)としておく。
【0090】
なお、累積最大確率値の算出手法についても簡単に補足する。例えば、分岐命令解析部121は、j行目i列目の遷移元要素が、n行目m列目であり、n行目m列目の累積最大確率値を「Pnm」、「遷移元状態:n」から「現状態:j」に遷移する確率(図7のモデルパラメータを参照)を「anj」とすると、「最大確率値算出の元となった遷移元要素」は、式(15)に示すように、「Pnm×anj」が最大となる「m」及び「n」を探すことで算出される。そして、「Pnm×anj」の最大値に、「xi」(現状態が命令状態の場合は、xiを命令の先頭としたときの命令全体)のシンボル出力確率を乗算した値を、j行目i列目の累積最大確率値として算出し、対応する要素に格納する。
【0091】
【数15】

【0092】
図9に示すように、分岐命令解析部121は、図9に示す行列の要素間の遷移において、すべてのタグ系列の総和を計算する。例えば、分岐命令解析部121は、n行目m列目の要素からj行目i列目の要素への遷移(m<iとする。)に対して、式(16)に示すように、n行目m列目の確率値Pnmに、状態「n」から状態「j」に遷移する確率「anj」(例えば、図7のモデルパラメータを参照)を乗算し、遷移元となるすべてのm,nについて和をとる。そして、式(16)の値に「xi」のシンボル出力確率を乗算した値をj行目i列目の確率値として算出し、このような計算を初期状態から終了状態まで算出して確率P(X|θ)を得る。
【0093】
【数16】

【0094】
分岐命令解析部121は、上述したようなモデルを利用し、Forward/Backwardアルゴリズムを用いることで、各バイトが機械語命令である第1の確率を算出する。
【0095】
なお、特定装置100は、既知のパーソナルコンピュータ、ワークステーション、携帯電話、PHS(Personal Handyphone System)端末、移動体通信端末又はPDA(Personal Digital Assistant)などの情報処理装置を利用して実現しても良い。例えば、PDAなどの情報処理装置に、図1に示した記憶部110や制御部120の各機能を搭載することによって実現しても良い。
【0096】
[特定装置による処理]
図10は、実施例1における特定装置による処理の流れの一例を示すフローチャートである。
【0097】
図10に示すように、特定装置100では、オリジナルコード10の入力があると(ステップS101肯定)、分岐命令解析部121が、分岐命令と解釈可能な箇所を抽出する(ステップS102)。例えば、分岐命令解析部121は、直接分岐命令又は間接分岐命令と解釈可能な箇所を抽出する。また、分岐命令解析部121は、抽出した箇所の先頭が機械語命令の先頭となる確率を算出する(ステップS103)。
【0098】
そして、分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を解析することで、間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所を識別し(ステップS104)、分岐命令解析部121により抽出された箇所間の分岐関係を示すツリーである暫定分岐関係ツリーを生成する(ステップS105)。
【0099】
そして、インポートアドレス格納場所特定部123は、間接分岐箇所の先頭と、間接分岐箇所が分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる確率を算出する(ステップS106)。図4における暫定分岐先アドレス格納場所「0x2004」を例に説明すると、インポートアドレス格納場所特定部123は、「1−(1−0.2)×(1−0.4) ×(1−0.1)×(1−0.6)×(1−0.8)=0.96544」であると算出する。
【0100】
そして、インポートアドレス格納場所特定部123は、閾値以上の確率が算出されると(ステップS107肯定)、間接分岐箇所が間接分岐命令である場合に間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する(ステップS108)。例えば、所定の閾値として「0.5」を用いる場合には、インポートアドレス格納場所特定部123は、アドレス「0x2004」をインポートアドレス格納場所20として特定する。一方、インポートアドレス格納場所特定部123は、閾値以上の確率が算出されないと(ステップS107否定)、そのまま処理を終了する。
【0101】
なお、上記の処理手順は、上記の順番に限定されるものではなく、処理内容を矛盾させない範囲で適宜変更しても良い。例えば、上記のステップS103をS105の後に実行しても良い。
【0102】
[実施例1の効果]
上述したように、実施例1によれば、パックされたプログラムコードをアンパックすることで得られるオリジナルコード10から、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出し、抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。そして、閾値以上の第2の確率が算出されると、間接分岐箇所が間接分岐命令である場合に間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。この結果、適切な分岐先アドレス格納場所を特定可能となる。すなわち、逆アセンブル結果が不正確であったとしても、機械語命令の先頭となる第1の確率に基づいて処理を実行することで、誤ったインポートアドレス格納場所20を特定することを減らすことが可能となる。
【0103】
すなわち、実施例1によれば、プログラムコードにおいて、外部関数を呼び出すときに使用される分岐先アドレス格納場所を適切に特定可能となる。従来の手法では、プログラムコードから間接call命令を探し出し、探し出した間接call命令が示すメモリ領域を分岐先アドレス格納場所として特定していた。この従来の手法では、オリジナルコード10がマルウェアである場合など、逆アセンブルが困難で正確な逆アセンブル結果が得られない場合には、誤ったインポートアドレス格納場所20を特定することになる。これに対して、実施例1によれば、プログラムコード内の間接分岐命令と解釈できるすべての箇所について、機械語命令と解釈できる第1の確率に基づき、分岐先アドレス格納場所である確率が高い箇所を特定可能となる。この結果、従来の手法よりも高精度に分岐先アドレス格納場所を特定可能となる。また、分岐先アドレス格納場所を特定できれば、例えばマルウェアが利用しようとしている外部APIを特定でき、マルウェアがどんな機能を持つか等の脅威把握や、脅威に基づくマルウェアの分類作業が可能となる。
【実施例2】
【0104】
さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、その他の実施例にて実施されても良い。そこで、以下では、その他の実施例を示す。
【0105】
[システム構成]
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報(図1〜図10)については、特記する場合を除いて任意に変更することができる。
【0106】
また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。例えば、図1に示す例では、記憶部110を特定装置100の外部装置としてネットワーク経由で接続するようにしても良い。
【0107】
[プログラム]
図11は、特定装置による一連の処理を実行するための特定プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。図11に例示するように、コンピュータ3000は、例えば、メモリ3010と、CPU(Central Processing Unit)3020と、ネットワークインタフェース3070とを有する。コンピュータ3000の各部はバス3100によって接続される。
【0108】
メモリ3010は、図11に例示するように、ROM3011及びRAM3012を含む。ROM3011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。
【0109】
ここで、図11に例示するように、ハードディスクドライブ3080は、例えば、OS3081、アプリケーションプログラム3082、プログラムモジュール3083、プログラムデータ3084を記憶する。すなわち、開示の技術に係る特定プログラムは、コンピュータによって実行される指令が記述されたプログラムモジュール3083として、例えばハードディスクドライブ3080に記憶される。具体的には、上記実施例で説明した記憶部110と同様の情報処理を実行する手順各々が記述されたプログラムモジュールが、ハードディスクドライブ3080に記憶される。
【0110】
また、上記実施例で説明した記憶部110に記憶されるデータのように、特定プログラムによる情報処理に用いられるデータは、プログラムデータ3084として、例えばハードディスクドライブ3080に記憶される。そして、CPU3020が、ハードディスクドライブ3080に記憶されたプログラムモジュール3083やプログラムデータ3084を必要に応じてRAM3012に読み出し、各種の手順を実行する。
【0111】
なお、特定プログラムに係るプログラムモジュール3083やプログラムデータ3084は、ハードディスクドライブ3080に記憶される場合に限られない。例えば、プログラムモジュール3083やプログラムデータ3084は、着脱可能な記憶媒体に記憶されても良い。この場合、CPU3020は、ディスクドライブなどの着脱可能な記憶媒体を介してデータを読み出す。また、同様に、更新プログラムに係るプログラムモジュール3083やプログラムデータ3084は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されても良い。この場合、CPU3020は、ネットワークインタフェースを介して他のコンピュータにアクセスすることで各種データを読み出す。
【0112】
[その他]
なお、本実施例で説明した特定プログラムは、インターネットなどのネットワークを介して配布することができる。また、特定プログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
【符号の説明】
【0113】
100 特定装置
110 記憶部
111 暫定分岐情報格納テーブル
112 暫定分岐ツリー情報テーブル
120 制御部
121 分岐命令解析部
122 分岐関係解析部
123 インポートアドレス格納場所特定部

【特許請求の範囲】
【請求項1】
パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する抽出部と、
前記抽出部により抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する算出部と、
前記算出部により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する特定部と
を備えたことを特徴とする特定装置。
【請求項2】
前記抽出部は、前記間接分岐箇所に加えて、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出し、
前記抽出部により抽出された箇所間の分岐関係を解析することで、前記間接分岐箇所が直接的又は間接的に分岐先となる前記直接分岐箇所を識別する識別部を更に備え、
前記算出部は、前記抽出部により抽出された箇所各々について前記第1の確率を算出し、該箇所各々について算出した該第1の確率に基づいて、前記間接分岐箇所の先頭と、該間接分岐箇所が分岐先となる前記識別部により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる前記第2の確率を算出することを特徴とする請求項1に記載の特定装置。
【請求項3】
前記分岐先アドレス格納場所が同一となる前記間接分岐箇所が複数抽出された場合に、前記算出部は、前記抽出部により抽出された箇所各々について前記第1の確率を算出し、該箇所各々について算出した該分岐命令となる該第1の確率に基づいて、前記分岐先アドレス格納場所が同一となる前記間接分岐箇所各々の先頭と、該間接分岐箇所各々のうちいずれかが分岐先となる前記識別部により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる前記第2の確率を算出することを特徴とする請求項2に記載の特定装置。
【請求項4】
前記算出部は、前記抽出部により抽出された前記箇所各々に該当する前記第1の確率を用いて、当該箇所すべてが分岐命令とならない第3の確率を1から減算することで、前記第2の確率を算出することを特徴とする請求項1〜3のいずれか一つに記載の特定装置。
【請求項5】
パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する抽出工程、
前記抽出工程により抽出された箇所が分岐命令となる第1の確率を算出し、算出した値に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する算出工程と、
前記算出工程により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する特定工程と
を含んだことを特徴とする特定方法。
【請求項6】
コンピュータを請求項1〜3のいずれか一つに記載の特定装置として機能させるための特定プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8−1】
image rotate

【図8−2】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2012−248058(P2012−248058A)
【公開日】平成24年12月13日(2012.12.13)
【国際特許分類】
【出願番号】特願2011−120293(P2011−120293)
【出願日】平成23年5月30日(2011.5.30)
【出願人】(000004226)日本電信電話株式会社 (13,992)
【Fターム(参考)】