"パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する抽出部と、前記抽出部により抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する算出部と、前記算出部により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する特定部とを備えたことを特徴とする特定装置。前記抽出部は、前記間接分岐箇所に加えて、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出し、前記抽出部により抽出された箇所間の分岐関係を解析することで、前記間接分岐箇所が直接的又は間接的に分岐先となる前記直接分岐箇所を識別する識別部を更に備え、前記算出部は、前記抽出部により抽出された箇所各々について前記第1の確率を算出し、該箇所各々について算出した該第1の確率に基づいて、前記間接分岐箇所の先頭と、該間接分岐箇所が分岐先となる前記識別部により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる前記第2の確率を算出することを特徴とする請求項1に記載の特定装置。前記分岐先アドレス格納場所が同一となる前記間接分岐箇所が複数抽出された場合に、前記算出部は、前記抽出部により抽出された箇所各々について前記第1の確率を算出し、該箇所各々について算出した該分岐命令となる該第1の確率に基づいて、前記分岐先アドレス格納場所が同一となる前記間接分岐箇所各々の先頭と、該間接分岐箇所各々のうちいずれかが分岐先となる前記識別部により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる前記第2の確率を算出することを特徴とする請求項2に記載の特定装置。前記算出部は、前記抽出部により抽出された前記箇所各々に該当する前記第1の確率を用いて、当該箇所すべてが分岐命令とならない第3の確率を1から減算することで、前記第2の確率を算出することを特徴とする請求項1~3のいずれか一つに記載の特定装置。パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する抽出工程、前記抽出工程により抽出された箇所が分岐命令となる第1の確率を算出し、算出した値に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する算出工程と、前記算出工程により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する特定工程とを含んだことを特徴とする特定方法。コンピュータを請求項1~3のいずれか一つに記載の特定装置として機能させるための特定プログラム。しかしながら、上述の従来の特定手法では、逆アセンブル結果が不正確である場合に、誤ったインポートアドレス格納場所が特定されるという課題がある。例えば、データ部分を誤って間接call命令として抽出されると、誤ったインポートアドレス格納場所が特定される。すなわち、オリジナルコードから間接call命令を抽出し、抽出した間接call命令により示されるメモリ領域をインポートアドレス格納場所とする上述の従来の特定手法では、オリジナルコードに対応する正確な逆アセンブル結果が必要となる。ここで、マルウェア作者は、アンチウィルスソフトベンダ等による解析や対策から逃れることを目的として、ソースコードや逆アセンブルに要するシンボル情報などを非公開とすることがある。この場合、正確な逆アセンブル結果が得られず、誤ったインポートアドレス格納場所を特定されることがある。開示の実施形態は、上述に鑑みてなされたものであって、適切なインポートアドレス格納場所を特定可能となる特定装置、特定方法及び特定プログラムを提供することを目的とする。開示する特定装置は、一つの態様において、抽出部と、算出部と、特定部とを有する。抽出部は、パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。算出部は、前記抽出部により抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。特定部は、前記算出部により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。開示する特定装置の一つの態様によれば、適切なインポートアドレス格納場所を特定可能となるという効果を奏する。以下に、開示する特定装置、特定方法及び特定プログラムの実施例について、図面に基づいて詳細に説明する。なお、本実施例により開示する発明が限定されるものではない。各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。図1は、実施例1における特定装置の構成の一例を示すブロック図である。図1に示す例では、特定装置100は、記憶部110と、制御部120とを有する。また、特定装置100は、以下に詳細に説明するように、オリジナルコード10の入力を受け付け、インポートアドレス格納場所を出力する。なお、以下では、インポートアドレス格納場所20を分岐先アドレス格納場所とも記載する。言い換えると、以下では、特定装置100が、パッキングされたプログラムコードをアンパックすることで得られるオリジナルコード10の入力を受け付ける場合を例に説明する。言い換えると、パッキング前のプログラムコードの入力を受け付ける場合を用いて説明する。ただし、これに限定されるものではなく、例えば、特定装置100は、パッキングされたファイルを受け付け、受け付けたファイルからオリジナルコード10を抽出した上で、後述する一連の処理を実行することでインポートアドレス格納場所情報を出力しても良い。図2は、実施例1における特定装置に入力されるオリジナルコードの一部を示す図である。図2に示す例では、説明の便宜上、オリジナルコード10に記載された一連の機械語のうちの機械語命令と解釈される部分の先頭を示すアドレスと対応付けて、アドレスから始まる機械語が機械語命令であると解釈した場合に得られるニーモニックを示した。図2に示す例では、アドレス0x0005とニーモニックcall0x000Fとを対応付けて記憶する。すなわち、オリジナルコード10のうち、0x0005が機械語命令であると解釈した場合には、ニーモニックcall0x000Fが得られることを示す。なお、図2に示す例では、ニーモニックがcallで始まる場合には、call命令を示す。また、ニーモニックがjumpで始まる場合には、jump命令を示す。また、図2において、[]がある場合には、間接分岐命令を示し、[]がない場合には、直接分岐命令を示す。例えば、ニーモニックcall0x000Fは、0x000Fに分岐する直接call命令を示す。また、ニーモニックcall[0x2004]は、アドレス0x2004に格納されている値を分岐先アドレスとして分岐する間接call命令を示す。記憶部110は、制御部120と接続される。記憶部110は、制御部120による各種処理に用いるデータを記憶する。記憶部110は、例えば、RAMRandomAccessMemoryやROMReadOnlyMemory、フラッシュメモリFlashMemoryなどの半導体メモリ素子、又は、ハードディスクや光ディスクなどである。図1に示す例では、記憶部110は、暫定分岐情報格納テーブル111と、暫定分岐ツリー情報テーブル112とを有する。暫定分岐情報格納テーブル111は、後述する制御部120の分岐命令解析部121による処理結果を記憶する。図3は、実施例1における暫定分岐情報格納テーブルに記憶された情報の一例を示す図である。図3に示す例では、暫定分岐情報格納テーブル111は、アドレスと、種別と、命令確率と、暫定分岐先アドレスと、暫定分岐先アドレス格納場所とを対応付けて記憶する。ここで、アドレスは、オリジナルコード10に記載された一連の機械語のうち機械語命令と解釈される部分の先頭を示す。種別は、分岐命令の種別を示す。例えば、種別は、アドレスから始まる機械語が機械語命令であると解釈した場合に、直接call命令か間接call命令か直接jump命令か間接jump命令かを示す。また、命令確率は、アドレスから始まる機械語が機械語命令である確率を示す。命令確率は第1の確率とも記載する。暫定分岐先アドレスと暫定分岐先アドレス格納場所とは、それぞれ、アドレスから始まる機械語が機械語命令についての分岐先アドレス、又は、分岐先アドレスが格納された格納場所を示す。例えば、暫定分岐情報格納テーブル111は、アドレス0x0005と、種別直接callと、命令確率0.2と、暫定分岐先アドレス0x000Fとを含むレコードを記憶する。すなわち、暫定分岐情報格納テーブル111は、アドレス0x0005から始まる機械語が機械語命令であると解釈した場合に、分岐先アドレスが0x000Fとなる直接call命令である確率が0.2であることを記憶する。なお、暫定分岐情報格納テーブル111は、直接分岐命令についてのレコードでは、暫定分岐先アドレスを記憶する。また、暫定分岐情報格納テーブル111は、間接分岐命令についてのレコードでは、暫定分岐先アドレス格納場所を記憶する。なお、暫定分岐情報格納テーブル111に記憶された情報は、分岐命令解析部121により格納され、分岐関係解析部122により用いられる。暫定分岐ツリー情報テーブル112は、後述する制御部120の分岐関係解析部122による処理結果を記憶する。具体的には、暫定分岐ツリー情報テーブル112は、分岐命令解析部121により抽出された分岐命令と解釈可能な部分各々について、他の命令との分岐元又は分岐先を示す分岐関係を示す暫定分岐関係ツリーを記憶する。図4は、実施例1における暫定分岐ツリー情報テーブルに記憶された情報の一例を示す図である。図4に示す例では、図3におけるアドレスを用いて、分岐命令解析部121により抽出された部分各々を示した。図3に示すように、暫定分岐ツリー情報テーブル112は、例えば、0x0005が分岐元となり0x000Fが分岐先となる関係を記憶し、0x000Fが分岐元となり0x1004が分岐先となる関係を記憶する。なお、暫定分岐ツリー情報テーブル112に記憶された情報は、分岐関係解析部122により格納され、インポートアドレス格納場所特定部123により用いられる。制御部120は、記憶部110と接続される。制御部120は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。制御部120は、例えば、ASICApplicationSpecificIntegratedCircuit、FPGAFieldProgrammableGateArray、CPUCentralProcessingUnit、MPUMicroProcessingUnitなどの電子回路である。図1に示す例では、制御部120は、分岐命令解析部121と、分岐関係解析部122と、インポートアドレス格納場所特定部123とを有する。分岐命令解析部121は、パックされたプログラムコードをアンパックすることで得られるオリジナルコード10から、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。また、分岐命令解析部121は、間接分岐箇所に加えて、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出する。すなわち、分岐命令解析部121は、例えば、オリジナルコード10の入力を受け付けると、分岐命令と解釈可能な部分をすべて抽出する。より詳細な一例をあげて説明すると、分岐命令解析部121は、オリジナルコード10から、直接call命令と間接call命令と直接jump命令と間接jump命令とのうち、いずれかであると解釈可能な部分を抽出する。なお、分岐命令解析部121により抽出された箇所は、分岐命令と解釈可能である箇所であり、実際には分岐命令ではない箇所も含まれることがあり得る。ここで、分岐命令について簡単に説明した上で、直接分岐命令と間接分岐命令との違いについて簡単に説明する。分岐命令とは、次に実行される命令を切り替える命令である。なお、一連の命令は、分岐命令でない場合には、逐次順番に実行される。分岐命令には、例えば、jump命令やcall命令などがある。jump命令やcall命令は、次に実行する命令を変更する。言い換えると、jump命令やcall命令の次に実行される命令は、jump命令やcall命令の次に記載された命令ではなく、jump命令やcall命令のオペランドとして指定された命令となる。例えば、jump命令やcall命令は、オペランドとしてメモリアドレスを指定しており、オペランドとして指定されたメモリアドレスに格納されている値が分岐先アドレスとなる。つまり、jump命令やcall命令の次に、オペランドとして指定されたメモリアドレスに格納されている値が取得されたり処理されたりする。直接分岐命令と間接分岐命令との違いについて簡単に説明する。直接分岐命令には、例えば、直接call命令と直接jump命令とがある。また、間接分岐命令には、例えば、間接call命令と間接jump命令とがある。直接分岐命令では、命令内に分岐先となる分岐先アドレスが明示されており、命令解読時に分岐先が決定される。間接分岐命令では、命令内に分岐先アドレスが明示されておらず、実際に間接分岐命令を実行する際に初めて分岐先アドレスが決定される。例えば、間接分岐命令では、命令内には分岐先アドレスが明示されておらず、分岐先アドレス格納場所から分岐先アドレスを読み出すことで、分岐先アドレスが決定される。例えば、間接分岐命令は、実行時にロードされたDLLが分岐先となり、DLLがロードされるメモリアドレスが動的に決定される場合に利用される。また、分岐先アドレス格納場所と、間接分岐箇所と、直接分岐箇所との関係について簡単に説明する。分岐先アドレス格納場所を参照する分岐命令は、間接分岐箇所のみとなる。また、間接分岐箇所を分岐先とする分岐命令は、直接分岐箇所のみとなる。間接分岐箇所を分岐先とする直接分岐箇所は、ない場合もある。直接分岐箇所を分岐先とする分岐命令は、直接分岐箇所のみとなる。直接分岐箇所を分岐先とする直接分岐箇所は、ない場合もある。分岐命令解析部121の説明に戻る。分岐命令解析部121は、公知の手法を用いて、オリジナルコード10から分岐命令と解釈可能な箇所を抽出する。例えば、分岐命令解析部121は、機械語にて記載された命令である機械語命令として解釈可能なバイト列を識別することで、直接分岐箇所や間接分岐箇所を抽出する。詳細な一例をあげて説明すると、IA-32命令セットの場合、分岐命令解析部121は、1バイト目が0xEBであれば、直接jump命令であると解釈可能な部分として抽出する。また、分岐命令解析部121は、抽出した間接分岐箇所が分岐命令となる第1の確率を算出する。また、同様に、分岐命令解析部121は、抽出した間接分岐箇所が分岐命令となる第1の確率に加えて、抽出した直接分岐箇所が分岐命令となる第1の確率を算出する。なお、分岐命令解析部121による第1の確率を算出する算出手法の一例については、後述する。また、分岐命令解析部121は、抽出した間接分岐箇所と直接分岐箇所とについて、算出した第1の確率と対応付けて暫定分岐情報格納テーブル111に格納する。また、分岐命令解析部121は、抽出した直接分岐箇所について格納する際には、抽出した直接分岐箇所が実際に直接分岐命令である場合に分岐先と解釈される分岐先アドレスを暫定分岐先アドレスとして併せて格納する。また、分岐命令解析部121は、抽出した間接分岐箇所を格納する際には、抽出した間接分岐箇所が実際に間接分岐命令である場合に分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所と解釈される位置を暫定分岐先アドレス格納場所として併せて格納する。例えば、分岐命令解析部121は、先頭が0x0005から始まる箇所が直接call命令である第1の確率が0.2であると算出した場合を用いて説明する。また、先頭が0x0005から始まる箇所が直接call命令であり、分岐先の先頭のアドレスが0x000Fである場合を用いて説明する。この場合、分岐命令解析部121は、アドレス0x0005と、種別直接callと、命令確率0.2と、暫定分岐先アドレス0x000Fとを含むレコードを暫定分岐情報格納テーブル111に格納する。分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を解析することで、間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所を識別する。そして、分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を示すツリーである暫定分岐関係ツリーを生成する。なお、分岐関係解析部122は、識別部とも称する。例えば、分岐関係解析部122は、分岐命令解析部121により生成された暫定分岐情報格納テーブル111内に記憶されたレコードのうち、種別が直接call又は直接jumpとなるレコードを識別する。そして、分岐関係解析部122は、種別が直接call又は直接jumpとなるレコードの先頭から抽出された箇所が、他のレコードの暫定分岐先アドレスと一致するか否かを判定する。すなわち、直接分岐命令として抽出された箇所の分岐元が、直接分岐命令として抽出された箇所と一致するか否かを判定する。なお、レコードの先頭から抽出された箇所とは、例えば、図3のアドレスに示す箇所が該当する。ここで、分岐関係解析部122は、一致すると判定した場合には、一致すると判定したレコードに対応する箇所各々が分岐元と分岐先とが関係あると判定する。また、分岐関係解析部122は、種別が直接call又は直接jumpとなるレコードについての判定結果に加えて、種別が間接call又は間接jumpとなるレコードの先頭と暫定分岐先アドレス格納場所とを加えることで、暫定分岐関係ツリーを生成する。例えば、分岐関係解析部122は、図3に示す暫定分岐情報格納テーブル111に基づいて処理を実行する場合には、図4に示すような暫定分岐ツリーを生成し、暫定分岐ツリー情報テーブル112に格納する。図4は、実施例1における分岐関係解析部により生成される暫定分岐関係ツリーの一例を示す。図4に示す例では、説明の便宜上、直接分岐箇所については4角形で表し、間接分岐箇所については3角形で表し、暫定分岐先アドレス格納場所については丸で表した。例えば、分岐関係解析部122は、直接分岐箇所についての分岐関係の判定結果からツリーを生成する。その後、分岐関係解析部122は、直接分岐箇所の分岐先となる間接分岐箇所と、間接分岐箇所の暫定分岐先アドレス格納場所とを加えることで、暫定分岐ツリーを生成する。なお、図4に示す例では、0x0005が分岐元となり0x000Fが分岐先となり、0x000Fが分岐元となり0x1004が分岐先となる。インポートアドレス格納場所特定部123は、間接分岐箇所の先頭と、間接分岐箇所が分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する。なお、間接分岐箇所の先頭や直接分岐箇所の先頭とは、間接分岐箇所や直接分岐箇所としてレコードから抽出された箇所のうち、先頭部分にある箇所を示す。すなわち、図3に示す例では、アドレスに示された箇所が該当する。また、インポートアドレス格納場所特定部123は、暫定分岐先アドレス格納場所が同一となる間接分岐箇所が複数抽出された場合に、暫定分岐先アドレス格納場所が同一となる間接分岐箇所各々の先頭と、暫定分岐先アドレス格納場所が同一となる間接分岐箇所各々のうちいずれかが分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する。つまり、インポートアドレス格納場所特定部123は、抽出された間接分岐箇所の分岐先アドレスが格納されている暫定分岐先アドレス格納場所が実際に分岐先アドレス格納場所となる確率を算出する。ここで、計算の単純化を目的として、分岐命令解析部121により抽出された箇所各々が機械語命令として解釈される事象がお互いに独立であると仮定して説明する。また、暫定分岐先アドレス格納場所Xが実際に分岐先アドレス格納場所となる第2の確率をPXとして説明する。また、Xと同一の暫定分岐ツリー内に存在する分岐命令Yi1≦i≦N,NはXと同一ツリー内に存在する分岐命令の数を示し、iはツリー内の分岐命令各々を表すインデックスを示す。として説明する。また、分岐命令Yiが実際に分岐命令となる第1の確率をPYiとした上で説明する。この場合、PXは、下記の式1にて算出可能となる。すなわち、式1に示すように、Xと同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率は、1から、Xと同一の暫定分岐ツリー内に存在する分岐命令のすべてが機械語命令の先頭とはならない確率を減算することで得られる。なお、式1のΠは、総積を示す。言い換えると、式1に示す例では、Π1-PYiは、Xと同一の暫定分岐ツリー内に存在するすべての分岐命令Yiについて1-PYiを乗算した結果を示す。すなわち、インポートアドレス格納場所特定部123は、抽出された箇所各々に該当する第1の確率を用いて、抽出された同一ツリー内にある箇所すべてが分岐命令とならない第3の確率を1から減算することで、第2の確率を算出する。ここで、第3の確率とは、例えば、式1におけるΠ1-PYiを示す。より詳細な一例をあげて説明すると、インポートアドレス格納場所特定部123は、処理対象となる箇所について算出された第1の確率を1から減算した値を処理対象となる箇所ごとに算出し、処理対象となる箇所ごとに算出された値各々を積算し、積算することで得られた値を1から減算することで、第2の確率を算出する。処理対象となる箇所とは、同一の暫定分岐ツリー内に存在する分岐命令となり、例えば、間接分岐箇所の先頭一つであったり、間接分岐箇所の先頭、及び間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所の先頭であったり、分岐先アドレス格納場所が同一となる間接分岐箇所各々の先頭及び間接分岐箇所各々のうちいずれかが分岐先となる直接分岐箇所の先頭であったりする。例えば、図3における暫定分岐先アドレス格納場所0x2004がインポートアドレス格納場所20となる第2の確率は下記の式2にて算出される。同様に、図3における暫定分岐先アドレス格納場所0x20AAがインポートアドレス格納場所20である第2の確率は下記の式3にて算出される。また、インポートアドレス格納場所特定部123は、算出された第2の確率が閾値以上である場合に、間接分岐箇所が間接分岐命令であるとした場合における間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。例えば、閾値として0.5を用いる場合には、インポートアドレス格納場所特定部123は、アドレス0x2004をインポートアドレス格納場所20として特定し、アドレス0x20AAをインポートアドレス格納場所20として特定しない。なお、インポートアドレス格納場所特定部123は、間接分岐箇所について算出された第1の確率が閾値以上となる場合に分岐先アドレス格納場所を特定しても良い。言い換えると、同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を用いることなく、間接分岐箇所について算出された第1の確率のみを用いても良い。ここで、同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率が閾値以上となる場合に、分岐先アドレス格納場所を特定する点について補足する。暫定分岐ツリー内に分岐命令が存在する場合、その分岐先も機械語命令と考えられることを踏まえ、インポートアドレス格納場所特定部123は、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出して用いても良い。ここで、インポートアドレス格納場所特定部123により分岐先アドレス格納場所として特定されるのは、間接分岐箇所として抽出された箇所のうち、算出された第2の確率が閾値以上となった間接分岐箇所についての暫定分岐先アドレス格納場所となる。言い換えると、インポートアドレス格納場所特定部123により分岐先アドレス格納場所として特定されるのは、直接分岐箇所の暫定分岐先アドレスではない。この点について補足する。上述したように、例えば、ランタイムパッカーによりパッキングされたプログラムは、通常はローダが行う動的ライブラリのリンク処理等を実施した後に、オリジナルコードのエントリポイントへ処理が渡される。ここで、Win32APIやDLLに含まれる外部関数は、通常、実行時にメモリ上に一度ロードされた上で、実行時に決定されたメモリアドレスが参照されて実行される。このことを踏まえ、インポートアドレス格納場所特定部123は、直接分岐箇所の分岐先アドレスではなく、間接分岐箇所の分岐先アドレス格納場所を特定する。ここで、機械語命令として解釈可能な部分が実際に機械語命令である第1の確率を算出する分岐命令解析部121による処理の一例について説明する。以下では,隠れマルコフモデルに基づき箇所各々について命令確率を算出する場合を用いて説明するが,これに限定されるものではない。分岐命令解析部121は、例えば、隠れマルコフモデルによりオリジナルコード10をモデル化し、Forward/Backwardアルゴリズムを用いることで、オリジナルコード10の各バイトが機械語命令の先頭である確率を算出する。なお、以下に説明する処理は一例であり、これに限定されるものではない。隠れマルコフモデルによりオリジナルコード10をモデル化する点について簡単に説明する。なお、以下では、オリジナルコード10に対して逆アセンブルが行われることで、オリジナルコード10を構成する複数のバイナリ値が複数の単語に分割され、分割された複数の単語それぞれに命令部又はデータ部のいずれかの状態であることを示すタグが割り当てられ、命令部としてのタグが割り当てられた単語の命令長に基づいて、ニーモニックアセンブルコードを当てはめられた場合を用いて説明する。すなわち、オリジナルコード10を構成する複数のバイナリ値が複数の単語に分割されており、複数の単語それぞれにタグが付されている場合を用いて説明する。また、以下では、入力バイナリ列:Xとは、逆アセンブルの対象となるオリジナルコード10のバイナリ列を示し、N個のバイナリ値であるとする。式4に示すように、逆アセンブルの対象となるオリジナルコードを構成するN個のバイナリ値は、x1~xNとして表される。また、単語列:wとは、入力バイナリ列:Xを1命令の命令部もしくは1データのデータ部としての単語として分割したものである。式5に示すように、入力バイナリ列:Xを分割したM個の単語それぞれは、w1~wMとして表される。wiは1命令もしくは1データを表す。なお、命令部は、複数のバイナリ値から構成される場合もあるため、単語数:M≦入力バイナリ数:Nとなる。また、タグ列:Tとは、単語w1~wMそれぞれに対して、命令部かデータ部であるかのタグが割り当てられたものである。式6に示すように、単語w1~wMに対応付けてタグt1~tMとして表される。また、命令タグ集合:Iは、命令部としての状態を表すタグの集合であり、データタグ集合:Dは、データ部としての状態を表すタグの集合である。ここで、タグti1≦i≦Mは、命令部かデータ部かのいずれかとなる。この結果、式7に示すように、tiは、命令タグ集合:Iあるいはデータタグ集合:Dのいずれかに属する。図5及び図6は、隠れマルコフモデルの一例を示す図である。すなわち、図5に示すように、命令タグ集合:Iに属するタグを継続命令状態:S及びデータ直前命令状態:Tの2種類に更に分割し、データタグ集合:Dに属するデータ状態:Uと合わせて3種類の状態から構成される隠れマルコフモデルを前提とする。継続命令状態:Sは、1命令を出力したのち、引き続き継続命令状態:Sに留まる場合と、データ直前命令状態:Tに遷移する場合とがある。データ直前命令状態:Tは、継続命令状態:Sと同様に、1命令を出力するが、その遷移先は、データ状態:Uのみとなる。一般的に、後方にデータが続く命令は、無条件分岐であることが多い。この結果、命令状態を、継続命令状態と、データ直前命令状態に分割することで、逆アセンブルの精度を向上することが期待できる。ここで、継続命令状態:S、データ直前命令状態:T、又は、データ状態:Uのいずれかの状態iから始まる確率初期確率をπiとし、状態iから状態jへ遷移する確率遷移確率をaijとし、状態iにおけるシンボルとしての単語wが出力される確率シンボル出力確率をbiwとする。このような隠れマルコフモデルの一例において、データ状態:Uで出力されるシンボルをデータ1バイトとすると、これにより、データ状態:Uにおけるシンボル出力確率bUwにおいて、wは、0以上255以下の範囲にある整数とすることができる。これに対して、命令タグ集合:Iに属する状態iにおいて出力されるシンボルの長さシンボル長は、1命令の長さとなる。ここで、複合命令セットコンピュータCISC:ComplexInstructionSetComputerアーキテクチャの代表的な例であるIntel社のx86命令の場合、1命令の長さは最大で16バイトにも及ぶため、そのままで統計的に信頼できるシンボル出力確率biwを学習することは容易ではない。こうした状況に対応するため、図6を用いて近似的にシンボル出力確率biwiはIに属するを算出する方法について述べる。x86命令は、PREFIX命令長:0~4バイト、OPCODE命令長:1~2バイト、ModRM命令長:0~1バイト、SIB命令長:0~1バイト、DISPLACEMENT命令長:0~4バイト、IMMEDIATE命令長:0~4バイトといった命令部から構成される。また、これらの命令部間の遷移パターンは、図6に示すパターンとなる。ここで、図6に示す遷移パターンによって遷移する各命令部を状態とし、命令開始状態と命令終了状態とを除いた各状態PREFIX,OPCODE,ModRM,SIB,DISPLACEMENT,IMMEDIATEでは、1バイトの命令部を出力するとする。また、単語wを1バイトごとに分解した結果を、式8によって表しxa~xb、対応する命令部の種別を、式9によって表すとする。このとき、命令部1バイトを出力する確率は、その時点での命令部の状態によってのみ決まると仮定し、更に、命令部の状態へ遷移する確率は、一つ前の命令部の状態によって決まると仮定すると、命令タグ集合:Iに属する状態iにおけるシンボルとしての単語wのシンボル出力確率biwは、式10に示すように、近似することができる。なお、ここで示す命令部の状態とは、図6のOPCODEやModRMなどを示す。これにより、隠れマルコフモデルにおける最尤状態系列算出の問題として、オリジナルコード10から命令部とデータ部とを識別するために用いるモデルパラメータは、命令部間の状態遷移確率と、命令部ごとの1バイトの出現確率のみとすることができる。この命令部に関するモデルパラメータは、継続命令状態:Sとデータ直前命令状態:Tとで個別に持たせる。次に、分岐命令解析部121によるモデルパラメータの学習について説明する。分岐命令解析部121は、命令部間の遷移確率Pvi|vi-1及び各命令部における1バイト値のシンボル出力確率Pxi|viを、各状態タグ間での遷移回数及び各状態タグにおけるシンボル出現回数をカウントすることで算出する。ここで、命令部間の遷移確率Pvi|vi-1及び各命令部における1バイト値のシンボル出力確率Pxi|viは、式11~式14を算出するためのモデルパラメータである。ここで、式11は、命令タグ集合:I又はデータタグ集合:Dのいずれかに属する状態iの初期確率πiを示す。式12は、命令タグ集合:I又はデータタグ集合:Dのいずれかに属する状態iから命令タグ集合:I又はデータタグ集合:Dのいずれかに属する状態jへの遷移確率aijを示す。式13は、状態iがデータタグ集合:Dに属する場合のシンボル出力確率biwを示す。式14は、状態iが命令タグ集合:Iに属する場合のシンボル出力確率biwを示す。例えば、分岐命令解析部121は、初期状態、継続命令状態:S、データ直前命令状態:T及びデータ状態:Uの間での遷移確率を、図7に示すように、算出する。なお、図7は、実施例1における分岐命令解析部による処理の一例について示す図である。なお、逆アセンブルされていないタグなしのオリジナルコード10について処理を実行する場合の一例について簡単に説明する。分岐命令解析部121は、タグ付きのオリジナルコード10に基づいて決定されたモデルパラメータと、タグなしのオリジナルコード10とを用いて、バウムウェルチアルゴリズムによって新たなモデルパラメータを決定して用いる。次に、Forward/Backwardアルゴリズムについて簡単に説明する。分岐命令解析部121は、Forwardアルゴリズムに基づき、モデルパラメータθが与えられたときのオリジナルコード10候補Xの出力確率PX|θを算出する。図8-1及び図8-2、図9は、実施例1における分岐命令解析部による処理の一例について示す図である。図8-1に示すような16進数表記の入力バイナリ列がオリジナルコード10として特定装置100に入力された場合を用いて説明する。また、入力バイナリ列を先頭から1バイトずつずらしながら、命令として解釈した場合の命令長を取得することで、図8-2に示すデータが得られた場合を用いて説明する。例えば、図8-2に示すように、入力バイナリ列が55である場合に、命令長:1が取得され、これに対応するニーモニックがPUSHEBPとなる場合を用いて説明する。図9に示す行列は、横軸に入力バイナリ列が配置され、縦軸に継続命令状態:S、データ直前命令状態:T及びデータ状態:Uが配置される。j行目i列目の要素には、x1,...,xi-1を出力し且つ状態jでxi状態jが命令状態の場合は、xiを命令の先頭としたときの命令全体を出力する累積最大確率値が格納される。また、各要素には、累積最大確率値以外にも、遷移元要素リストと累積最大確率値算出の元になった遷移元要素が格納される。ここで、各要素における遷移元要素リストは、図8-2に示す命令長と、式11~式14に示される遷移状態相関関係とを利用することで算出可能である。具体的には、図9に示す行列における1行目1列目継続命令状態:Sの場合、55は、1バイト命令であり、遷移先は、1行目2列目継続命令状態:Sと、2行目2列目データ直前命令状態:Tとなる。つまり、1行目2列目と、2行目2列目の遷移元要素リストへ、1行目1列目を追加する。分岐命令解析部121は、全要素について同様の処理を繰り返すことで、各要素における遷移元要素リストが算出する。なお、分岐命令解析部121は、すべての入力バイナリ列を出力し終える場合には、図9に示す行列における終了状態出力確率は1の列に遷移するとする。なお、例外として、1列目の要素の遷移元は、図9に示す行列における初期状態累積最大確率値は1としておく。なお、累積最大確率値の算出手法についても簡単に補足する。例えば、分岐命令解析部121は、j行目i列目の遷移元要素が、n行目m列目であり、n行目m列目の累積最大確率値をPnm、遷移元状態:nから現状態:jに遷移する確率図7のモデルパラメータを参照をanjとすると、最大確率値算出の元となった遷移元要素は、式15に示すように、Pnm×anjが最大となるm及びnを探すことで算出される。そして、Pnm×anjの最大値に、xi現状態が命令状態の場合は、xiを命令の先頭としたときの命令全体のシンボル出力確率を乗算した値を、j行目i列目の累積最大確率値として算出し、対応する要素に格納する。図9に示すように、分岐命令解析部121は、図9に示す行列の要素間の遷移において、すべてのタグ系列の総和を計算する。例えば、分岐命令解析部121は、n行目m列目の要素からj行目i列目の要素への遷移m<iとする。に対して、式16に示すように、n行目m列目の確率値Pnmに、状態nから状態jに遷移する確率anj例えば、図7のモデルパラメータを参照を乗算し、遷移元となるすべてのm,nについて和をとる。そして、式16の値にxiのシンボル出力確率を乗算した値をj行目i列目の確率値として算出し、このような計算を初期状態から終了状態まで算出して確率PX|θを得る。分岐命令解析部121は、上述したようなモデルを利用し、Forward/Backwardアルゴリズムを用いることで、各バイトが機械語命令である第1の確率を算出する。なお、特定装置100は、既知のパーソナルコンピュータ、ワークステーション、携帯電話、PHSPersonalHandyphoneSystem端末、移動体通信端末又はPDAPersonalDigitalAssistantなどの情報処理装置を利用して実現しても良い。例えば、PDAなどの情報処理装置に、図1に示した記憶部110や制御部120の各機能を搭載することによって実現しても良い。[特定装置による処理]図10は、実施例1における特定装置による処理の流れの一例を示すフローチャートである。図10に示すように、特定装置100では、オリジナルコード10の入力があるとステップS101肯定、分岐命令解析部121が、分岐命令と解釈可能な箇所を抽出するステップS102。例えば、分岐命令解析部121は、直接分岐命令又は間接分岐命令と解釈可能な箇所を抽出する。また、分岐命令解析部121は、抽出した箇所の先頭が機械語命令の先頭となる確率を算出するステップS103。そして、分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を解析することで、間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所を識別しステップS104、分岐命令解析部121により抽出された箇所間の分岐関係を示すツリーである暫定分岐関係ツリーを生成するステップS105。そして、インポートアドレス格納場所特定部123は、間接分岐箇所の先頭と、間接分岐箇所が分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる確率を算出するステップS106。図4における暫定分岐先アドレス格納場所0x2004を例に説明すると、インポートアドレス格納場所特定部123は、1-1-0.2×1-0.4×1-0.1×1-0.6×1-0.8=0.96544であると算出する。そして、インポートアドレス格納場所特定部123は、閾値以上の確率が算出されるとステップS107肯定、間接分岐箇所が間接分岐命令である場合に間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定するステップS108。例えば、所定の閾値として0.5を用いる場合には、インポートアドレス格納場所特定部123は、アドレス0x2004をインポートアドレス格納場所20として特定する。一方、インポートアドレス格納場所特定部123は、閾値以上の確率が算出されないとステップS107否定、そのまま処理を終了する。なお、上記の処理手順は、上記の順番に限定されるものではなく、処理内容を矛盾させない範囲で適宜変更しても良い。例えば、上記のステップS103をS105の後に実行しても良い。[実施例1の効果]上述したように、実施例1によれば、パックされたプログラムコードをアンパックすることで得られるオリジナルコード10から、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出し、抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。そして、閾値以上の第2の確率が算出されると、間接分岐箇所が間接分岐命令である場合に間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。この結果、適切な分岐先アドレス格納場所を特定可能となる。すなわち、逆アセンブル結果が不正確であったとしても、機械語命令の先頭となる第1の確率に基づいて処理を実行することで、誤ったインポートアドレス格納場所20を特定することを減らすことが可能となる。すなわち、実施例1によれば、プログラムコードにおいて、外部関数を呼び出すときに使用される分岐先アドレス格納場所を適切に特定可能となる。従来の手法では、プログラムコードから間接call命令を探し出し、探し出した間接call命令が示すメモリ領域を分岐先アドレス格納場所として特定していた。この従来の手法では、オリジナルコード10がマルウェアである場合など、逆アセンブルが困難で正確な逆アセンブル結果が得られない場合には、誤ったインポートアドレス格納場所20を特定することになる。これに対して、実施例1によれば、プログラムコード内の間接分岐命令と解釈できるすべての箇所について、機械語命令と解釈できる第1の確率に基づき、分岐先アドレス格納場所である確率が高い箇所を特定可能となる。この結果、従来の手法よりも高精度に分岐先アドレス格納場所を特定可能となる。また、分岐先アドレス格納場所を特定できれば、例えばマルウェアが利用しようとしている外部APIを特定でき、マルウェアがどんな機能を持つか等の脅威把握や、脅威に基づくマルウェアの分類作業が可能となる。さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、その他の実施例にて実施されても良い。そこで、以下では、その他の実施例を示す。[システム構成]また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報図1~図10については、特記する場合を除いて任意に変更することができる。また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散統合して構成することができる。例えば、図1に示す例では、記憶部110を特定装置100の外部装置としてネットワーク経由で接続するようにしても良い。[プログラム]図11は、特定装置による一連の処理を実行するための特定プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。図11に例示するように、コンピュータ3000は、例えば、メモリ3010と、CPUCentralProcessingUnit3020と、ネットワークインタフェース3070とを有する。コンピュータ3000の各部はバス3100によって接続される。メモリ3010は、図11に例示するように、ROM3011及びRAM3012を含む。ROM3011は、例えば、BIOSBasicInputOutputSystem等のブートプログラムを記憶する。ここで、図11に例示するように、ハードディスクドライブ3080は、例えば、OS3081、アプリケーションプログラム3082、プログラムモジュール3083、プログラムデータ3084を記憶する。すなわち、開示の技術に係る特定プログラムは、コンピュータによって実行される指令が記述されたプログラムモジュール3083として、例えばハードディスクドライブ3080に記憶される。具体的には、上記実施例で説明した記憶部110と同様の情報処理を実行する手順各々が記述されたプログラムモジュールが、ハードディスクドライブ3080に記憶される。また、上記実施例で説明した記憶部110に記憶されるデータのように、特定プログラムによる情報処理に用いられるデータは、プログラムデータ3084として、例えばハードディスクドライブ3080に記憶される。そして、CPU3020が、ハードディスクドライブ3080に記憶されたプログラムモジュール3083やプログラムデータ3084を必要に応じてRAM3012に読み出し、各種の手順を実行する。なお、特定プログラムに係るプログラムモジュール3083やプログラムデータ3084は、ハードディスクドライブ3080に記憶される場合に限られない。例えば、プログラムモジュール3083やプログラムデータ3084は、着脱可能な記憶媒体に記憶されても良い。この場合、CPU3020は、ディスクドライブなどの着脱可能な記憶媒体を介してデータを読み出す。また、同様に、更新プログラムに係るプログラムモジュール3083やプログラムデータ3084は、ネットワークLANLocalAreaNetwork、WANWideAreaNetwork等を介して接続された他のコンピュータに記憶されても良い。この場合、CPU3020は、ネットワークインタフェースを介して他のコンピュータにアクセスすることで各種データを読み出す。[その他]なお、本実施例で説明した特定プログラムは、インターネットなどのネットワークを介して配布することができる。また、特定プログラムは、ハードディスク、フレキシブルディスクFD、CD-ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。"