JP5571035B2 - Specific device, the specific method and a specific program - Google Patents

Specific device, the specific method and a specific program Download PDF

Info

Publication number
JP5571035B2
JP5571035B2 JP2011120293A JP2011120293A JP5571035B2 JP 5571035 B2 JP5571035 B2 JP 5571035B2 JP 2011120293 A JP2011120293 A JP 2011120293A JP 2011120293 A JP2011120293 A JP 2011120293A JP 5571035 B2 JP5571035 B2 JP 5571035B2
Authority
JP
Grant status
Grant
Patent type
Prior art keywords
branch
instruction
probability
indirect
example
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2011120293A
Other languages
Japanese (ja)
Other versions
JP2012248058A (en )
Inventor
誠 岩村
光恭 伊藤
Original Assignee
日本電信電話株式会社
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Grant date

Links

Images

Description

本発明は、特定装置、特定方法及び特定プログラムに関する。 The invention, specific device, a specific method and a specific program.

近時、コンピュータウィルス等の悪意あるソフトウェアに対する対策が不可欠となっている。 In recent years, measures against malicious software such as computer viruses has become essential. コンピュータウィルス等の悪意あるソフトウェアとは、例えば、マルウェアが該当する。 The malicious software such as computer viruses, for example, malware applicable. マルウェアには、パッカーと呼ばれるツールにより、機械語のオリジナルコードに対して解読を困難にするため隠蔽処理であるパッキングが施される。 The malware by tool called packer, Packing a concealment process for making it difficult to decipher for the original code of the machine language is performed. オリジナルコードにパッキングが施されることで、アンチウィルスソフトのパターンマッチング機構を回避され、マルウェアの解析が困難となる。 By packing the original code is applied, it is avoided pattern matching mechanism antivirus software, analysis of the malware difficult. また、プログラムの解析を困難にする機構を持つパッカーもある。 In addition, there is also a packer with a mechanism that makes it difficult to analyze the program. なお、オリジナルコードを復元する処理を「アンパッキング」とも称する。 It should be noted, also referred to as "unpacking" the process of restoring the original code. プログラムの解析を困難にする機構とは、例えば、Anti−DebugやAnti−VMなどがある。 The mechanism that makes it difficult to analysis of the program, for example, there is such as Anti-Debug and Anti-VM.

また、実行可能形式のファイルを受け付け、オリジナルコードを隠蔽しつつも実行可能形式を保ったファイルを出力するパッカーであるランタイムパッカーがある。 Further, receiving the executable files, a runtime packer also packer for outputting a file kept executable format while hiding the original code. ランタイムパッカーによりパッキングされたプログラムは、オリジナルコードを復元し、通常はローダが行う動的ライブラリのリンク処理等を実施した後に、オリジナルコードのエントリポイントへ処理を渡す。 Program is packed by the runtime packer restores the original code, usually after performing link processing of dynamic library loader performs passes the process to entry point of the original code.

ここで、マルウェアの脅威を把握する際には、オリジナルコードを抽出し、抽出したオリジナルコードから外部関数を呼び出すときに使用される外部関数のアドレスが格納される格納場所であるインポートアドレス格納場所を特定する必要がある。 Here, when grasping the malware threat extracts the original code, the import address storage location is a storage location address of the external function is stored to be used when calling the external functions from the extraction original code it is necessary to specify. なお、外部関数とは、例えば、Win32 API(Application Program Interface)、DLL(Dynamic Link Library)などがある。 Note that the external function, for example, Win32 API (Application Program Interface), and the like DLL (Dynamic Link Library).

なお、インポートアドレス格納場所を特定する手法として、逆アセンブル結果に基づき、オリジナルコード領域から間接call命令を抽出し、抽出した間接call命令により示されるメモリ領域をインポートアドレス格納場所として特定する特定手法がある。 Incidentally, as a method of specifying an import address storage location, based on the disassembled to extract an indirect call instruction from the original coding region specifying method for specifying a memory area indicated by the extracted indirect call instruction as an import address storage location is there.

特開2010−92179号公報 JP 2010-92179 JP

しかしながら、上述の従来の特定手法では、逆アセンブル結果が不正確である場合に、誤ったインポートアドレス格納場所が特定されるという課題がある。 However, in the conventional method of specifying above, when disassembled it is incorrect, there is a problem that import address storage location wrong is identified. 例えば、データ部分を誤って間接call命令として抽出されると、誤ったインポートアドレス格納場所が特定される。 For example, when extracted as an indirect call instruction accidental data portion, import address storage location wrong is identified.

すなわち、オリジナルコードから間接call命令を抽出し、抽出した間接call命令により示されるメモリ領域をインポートアドレス格納場所とする上述の従来の特定手法では、オリジナルコードに対応する正確な逆アセンブル結果が必要となる。 That is, to extract an indirect call instruction from the original code, the extracted indirect call certain conventional techniques described above for the memory area import address storage location indicated by the instruction, requires accurate disassembly results corresponding to the original code Become. ここで、マルウェア作者は、アンチウィルスソフトベンダ等による解析や対策から逃れることを目的として、ソースコードや逆アセンブルに要するシンボル情報などを非公開とすることがある。 Here, malware authors, for the purpose of escape analysis and measures by anti-virus software vendor or the like, and symbol information required for the source code and disassembly may be disclosed. この場合、正確な逆アセンブル結果が得られず、誤ったインポートアドレス格納場所を特定されることがある。 In this case, not obtained accurate disassembled, may be identified incorrect import address storage location.

開示の実施形態は、上述に鑑みてなされたものであって、適切なインポートアドレス格納場所を特定可能となる特定装置、特定方法及び特定プログラムを提供することを目的とする。 The disclosed embodiments was made in view of the above, the specific device that enables identifying the appropriate import address storage location, and to provide a specific method and a specific program.

開示する特定装置は、一つの態様において、抽出部と、算出部と、特定部とを有する。 Specific device disclosed includes in one embodiment, an extraction unit, a calculation unit, and a specific portion. 抽出部は、パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。 Extraction unit, from the original code obtained by unpacking a packed program code extracts the indirect branch point is an address indicating an interpretable places with at least indirect branch instruction. 算出部は、前記抽出部により抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。 Calculating section portion extracted by the extraction unit calculates the first probability of a branch instruction, based on the calculated first probability, the head of the extracted relevant section is the head of the machine language instructions calculating a second probability. 特定部は、前記算出部により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。 Specifying unit, when the second probability calculated by the calculation section is equal to or greater than the threshold, specifies the branch destination address storage location which the branch destination address indicating a branch destination from the indirect branch point is stored.

開示する特定装置の一つの態様によれば、適切なインポートアドレス格納場所を特定可能となるという効果を奏する。 According to one aspect of the specific device disclosed, an effect that the appropriate import address location allows specific.

図1は、実施例1における特定装置の構成の一例を示すブロック図である。 Figure 1 is a block diagram showing an example of the configuration of a particular device according to the first embodiment. 図2は、実施例1における特定装置に入力されるオリジナルコードの一部を示す図である。 Figure 2 is a diagram showing a part of the original code input to a particular apparatus in Embodiment 1. 図3は、実施例1における暫定分岐情報格納テーブルに記憶された情報の一例を示す図である。 Figure 3 is a diagram showing an example of information tentative branch information stored in the storage table in the first embodiment. 図4は、実施例1における暫定分岐ツリー情報テーブルに記憶された情報の一例を示す図である。 Figure 4 is a diagram showing an example of information tentative branch tree information stored in the table in Example 1. 図5は、隠れマルコフモデルの一例を示す図である。 Figure 5 is a diagram showing an example of a hidden Markov model. 図6は、隠れマルコフモデルの一例を示す図である。 Figure 6 is a diagram showing an example of a hidden Markov model. 図7は、実施例1における分岐命令解析部による処理の一例について示す図である。 Figure 7 is a diagram illustrating an example of a process by the branch instruction analyzing unit in the first embodiment. 図8−1は、実施例1における分岐命令解析部による処理の一例について示す図である。 Figure 8-1 is a diagram showing an example of a process by the branch instruction analyzing unit in the first embodiment. 図8−2は、実施例1における分岐命令解析部による処理の一例について示す図である。 Figure 8-2 is a diagram showing an example of a process by the branch instruction analyzing unit in the first embodiment. 図9は、実施例1における分岐命令解析部による処理の一例について示す図である。 Figure 9 is a diagram illustrating an example of a process by the branch instruction analyzing unit in the first embodiment. 図10は、実施例1における特定装置による処理の流れの一例を示すフローチャートである。 Figure 10 is a flowchart illustrating an example of a process flow according to a particular device in the first embodiment. 図11は、特定装置による一連の処理を実行するための特定プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。 Figure 11 is a diagram showing that a processing by a specific program for executing the series of processing by a particular device is concretely realized using a computer.

以下に、開示する特定装置、特定方法及び特定プログラムの実施例について、図面に基づいて詳細に説明する。 Hereinafter, the specific device disclosed, for example of the specific process and particular program will be described in detail with reference to the drawings. なお、本実施例により開示する発明が限定されるものではない。 It should be understood that the disclosed invention is not limited by this embodiment. 各実施例は、処理内容を矛盾させない範囲で適宜組み合わせることが可能である。 Each embodiment may be appropriately combined within a range that does not contradict the processing contents.

図1は、実施例1における特定装置の構成の一例を示すブロック図である。 Figure 1 is a block diagram showing an example of the configuration of a particular device according to the first embodiment. 図1に示す例では、特定装置100は、記憶部110と、制御部120とを有する。 In the example shown in FIG. 1, a particular device 100 includes a storage unit 110, a control unit 120. また、特定装置100は、以下に詳細に説明するように、オリジナルコード10の入力を受け付け、インポートアドレス格納場所を出力する。 Further, specific device 100, as will be described in detail below, receives an input of an original code 10, and outputs the import address location.

なお、以下では、インポートアドレス格納場所20を「分岐先アドレス格納場所」とも記載する。 In the following, the import address storage location 20 as "branch target address location." 言い換えると、以下では、特定装置100が、パッキングされたプログラムコードをアンパックすることで得られるオリジナルコード10の入力を受け付ける場合を例に説明する。 In other words, in the following, the specific device 100, will be described as an example a case of accepting the input of the original code 10 obtained by unpacking a packed program code. 言い換えると、パッキング前のプログラムコードの入力を受け付ける場合を用いて説明する。 In other words, it will be described with reference to the case of accepting the packing input before the program code.

ただし、これに限定されるものではなく、例えば、特定装置100は、パッキングされたファイルを受け付け、受け付けたファイルからオリジナルコード10を抽出した上で、後述する一連の処理を実行することでインポートアドレス格納場所情報を出力しても良い。 However, the invention is not limited thereto, for example, import address a particular device 100 receives the packed file, after extracting the original code 10 from the received file, performing a series of processing described later may output the storage location information.

図2は、実施例1における特定装置に入力されるオリジナルコードの一部を示す図である。 Figure 2 is a diagram showing a part of the original code input to a particular apparatus in Embodiment 1. 図2に示す例では、説明の便宜上、オリジナルコード10に記載された一連の機械語のうちの機械語命令と解釈される部分の先頭を示す「アドレス」と対応付けて、「アドレス」から始まる機械語が機械語命令であると解釈した場合に得られる「ニーモニック」を示した。 In the example shown in FIG. 2, for convenience of explanation, the head of the machine language instructions a part to be interpreted in a series of machine language described in the original code 10 in association with the "address", starting from the "Address" machine language showed a "mnemonic" obtained in the case of interpreted as a machine language instruction.

図2に示す例では、アドレス「0x0005」とニーモニック「call 0x000F」とを対応付けて記憶する。 In the example shown in FIG. 2, in association with address "0x0005" and the mnemonic "call 0x000F". すなわち、オリジナルコード10のうち、「0x0005」が機械語命令であると解釈した場合には、ニーモニック「call 0x000F」が得られることを示す。 That is, of the original code 10, when "0x0005" is interpreted as a machine language instruction indicates that the mnemonic "call 0x000F" is obtained. なお、図2に示す例では、ニーモニックが「call」で始まる場合には、call命令を示す。 In the example shown in FIG. 2, when the mnemonic beginning with "call" refers to a call instruction. また、ニーモニックが「jump」で始まる場合には、jump命令を示す。 In addition, if the mnemonic begins with a "jump" indicates a jump instruction. また、図2において、[]がある場合には、間接分岐命令を示し、[]がない場合には、直接分岐命令を示す。 Further, in FIG. 2, when there is a [] indicates an indirect branch instruction, if there is no [] indicates the direct branch instruction. 例えば、ニーモニック「call 0x000F」は、「0x000F」に分岐する直接call命令を示す。 For example, the mnemonic "call 0x000F" indicates a direct call instruction that branches to "0x000F". また、ニーモニック「call [0x2004]」は、アドレス「0x2004」に格納されている値を分岐先アドレスとして分岐する間接call命令を示す。 The mnemonic "call [0x2004]" indicates an indirect call instruction for branching the value stored at address "0x2004" as the branch address.

記憶部110は、制御部120と接続される。 Storage unit 110 is connected to the control unit 120. 記憶部110は、制御部120による各種処理に用いるデータを記憶する。 Storage unit 110 stores data used for various processes performed by the control unit 120. 記憶部110は、例えば、RAM(Random Access Memory)やROM(Read Only Memory)、フラッシュメモリ(Flash Memory)などの半導体メモリ素子、又は、ハードディスクや光ディスクなどである。 Storage unit 110 is, for example, RAM (Random Access Memory) and ROM (Read Only Memory), a semiconductor memory device such as a flash memory (Flash Memory), or a hard disk, an optical disk. 図1に示す例では、記憶部110は、暫定分岐情報格納テーブル111と、暫定分岐ツリー情報テーブル112とを有する。 In the example shown in FIG. 1, the storage unit 110 includes a tentative branch information storage table 111, and a tentative branch tree information table 112.

暫定分岐情報格納テーブル111は、後述する制御部120の分岐命令解析部121による処理結果を記憶する。 Preliminary branch information storage table 111 stores the processing result of the branch instruction analyzing part 121 of the control unit 120 described later. 図3は、実施例1における暫定分岐情報格納テーブルに記憶された情報の一例を示す図である。 Figure 3 is a diagram showing an example of information tentative branch information stored in the storage table in the first embodiment.

図3に示す例では、暫定分岐情報格納テーブル111は、「アドレス」と、「種別」と、「命令確率」と、「暫定分岐先アドレス」と、「暫定分岐先アドレス格納場所」とを対応付けて記憶する。 In the example shown in FIG. 3, the provisional branch information storage table 111 includes a "address", a "type", the "instruction probability", corresponding to "tentative branch address", an "interim branch destination address storage location" put in storage. ここで、「アドレス」は、オリジナルコード10に記載された一連の機械語のうち機械語命令と解釈される部分の先頭を示す。 Here, the "address" indicates the start of the portion to be construed as machine instructions of the series of machine language described in the original code 10. 「種別」は、分岐命令の種別を示す。 "Type" indicates the type of the branch instruction. 例えば、「種別」は、「アドレス」から始まる機械語が機械語命令であると解釈した場合に、「直接call命令」か「間接call命令」か「直接jump命令」か「間接jump命令」かを示す。 For example, "type", if the machine language that starts from the "address" has been interpreted as a machine language instruction, whether "direct call instruction" or "indirect call instruction" or "direct jump instruction," "indirect jump instruction" It is shown. また、「命令確率」は、「アドレス」から始まる機械語が機械語命令である確率を示す。 In addition, the "instruction probability" is a machine language that starts from the "address" indicates the probability that a machine language instruction. 「命令確率」は「第1の確率」とも記載する。 "Instruction probability" is also referred to as "the first of probability". 「暫定分岐先アドレス」と「暫定分岐先アドレス格納場所」とは、それぞれ、「アドレス」から始まる機械語が機械語命令についての分岐先アドレス、又は、分岐先アドレスが格納された格納場所を示す。 And "temporary branch destination address" and "temporary branch destination address storage location" is, respectively, machine language that starts from the "address" is the branch destination address of the machine language instructions, or, the location of the branch destination address is stored .

例えば、暫定分岐情報格納テーブル111は、アドレス「0x0005」と、種別「直接call」と、命令確率「0.2」と、暫定分岐先アドレス「0x000F」とを含むレコードを記憶する。 For example, the interim branch information storage table 111 includes an address "0x0005", type "direct call", stores records containing instructions to the probability "0.2", and a provisional branch destination address "0x000F". すなわち、暫定分岐情報格納テーブル111は、アドレス「0x0005」から始まる機械語が機械語命令であると解釈した場合に、分岐先アドレスが「0x000F」となる直接call命令である確率が「0.2」であることを記憶する。 That provisional branch information storage table 111, the address when the machine language beginning with "0x0005" has been interpreted as a machine language instruction, the branch destination address is the probability that a direct call instruction becomes "0x000F" is "0.2 and stores that it is ". なお、暫定分岐情報格納テーブル111は、直接分岐命令についてのレコードでは、「暫定分岐先アドレス」を記憶する。 Incidentally, interim branch information storage table 111, the record for the direct branch instruction, and stores the "interim branch address". また、暫定分岐情報格納テーブル111は、間接分岐命令についてのレコードでは、「暫定分岐先アドレス格納場所」を記憶する。 Further, provisional branch information storage table 111, the record for the indirect branch instruction, and stores the "interim branch address storage location."

なお、暫定分岐情報格納テーブル111に記憶された情報は、分岐命令解析部121により格納され、分岐関係解析部122により用いられる。 The information stored in the interim branch information storage table 111 is stored by the branch instruction analyzer 121 is used by the branch relationship analysis unit 122.

暫定分岐ツリー情報テーブル112は、後述する制御部120の分岐関係解析部122による処理結果を記憶する。 Preliminary branch tree information table 112 stores the processing result by the branch relationship analysis unit 122 of the control unit 120 described later. 具体的には、暫定分岐ツリー情報テーブル112は、分岐命令解析部121により抽出された分岐命令と解釈可能な部分各々について、他の命令との分岐元又は分岐先を示す分岐関係を示す暫定分岐関係ツリーを記憶する。 Specifically, the interim branch tree information table 112, the interpretation moiety respectively and branch instruction extracted by the branch instruction analyzing part 121, interim branch indicating a branch relationship indicating a branch source or branch destination with other instructions and stores the relationship tree.

図4は、実施例1における暫定分岐ツリー情報テーブルに記憶された情報の一例を示す図である。 Figure 4 is a diagram showing an example of information tentative branch tree information stored in the table in Example 1. 図4に示す例では、図3における「アドレス」を用いて、分岐命令解析部121により抽出された部分各々を示した。 In the example shown in FIG. 4, using the "address" in FIG. 3, showing a portion of each extracted by the branch instruction analyzer 121. 図3に示すように、暫定分岐ツリー情報テーブル112は、例えば、「0x0005」が分岐元となり「0x000F」が分岐先となる関係を記憶し、「0x000F」が分岐元となり「0x1004」が分岐先となる関係を記憶する。 As shown in FIG. 3, the provisional branch tree information table 112, for example, "0x0005" is a branch origin "0x000F" is stored the relationship as a branch destination, "0x000F" is a branch origin "0x1004" is the branch destination for storing with the relationship.

なお、暫定分岐ツリー情報テーブル112に記憶された情報は、分岐関係解析部122により格納され、インポートアドレス格納場所特定部123により用いられる。 The information stored in the interim branch tree information table 112 is stored by the branch relationship analysis unit 122 is used by the import address storage location detection part 123.

制御部120は、記憶部110と接続される。 Control unit 120 is connected to the storage unit 110. 制御部120は、各種の処理手順などを規定したプログラムを記憶する内部メモリを有し、種々の処理を制御する。 Control unit 120 has an internal memory for storing a program that defines various types of processing procedures, and controls various processes. 制御部120は、例えば、ASIC(Application Specific Integrated Circuit)、FPGA(Field Programmable Gate Array)、CPU(Central Processing Unit)、MPU(Micro Processing Unit)などの電子回路である。 The control unit 120, for example, ASIC (Application Specific Integrated Circuit), FPGA (Field Programmable Gate Array), CPU (Central Processing Unit), an electronic circuit such as a MPU (Micro Processing Unit). 図1に示す例では、制御部120は、分岐命令解析部121と、分岐関係解析部122と、インポートアドレス格納場所特定部123とを有する。 In the example shown in FIG. 1, the control unit 120 includes a branch instruction analyzing part 121, a branching relationship analysis unit 122, and a import address storage location detection part 123.

分岐命令解析部121は、パックされたプログラムコードをアンパックすることで得られるオリジナルコード10から、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出する。 Branch instruction analyzing part 121, from the original code 10 obtained by unpacking a packed program code extracts the indirect branch point is an address indicating an interpretable places with at least indirect branch instruction. また、分岐命令解析部121は、間接分岐箇所に加えて、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出する。 The branch instruction analyzer 121, in addition to indirect branch portion, to extract the direct branch point is interpretable places a direct branch instruction. すなわち、分岐命令解析部121は、例えば、オリジナルコード10の入力を受け付けると、分岐命令と解釈可能な部分をすべて抽出する。 That is, the branch instruction analyzer 121, for example, when receiving an input of an original code 10, and extracts all interpretable portion and the branch instruction.

より詳細な一例をあげて説明すると、分岐命令解析部121は、オリジナルコード10から、直接call命令と間接call命令と直接jump命令と間接jump命令とのうち、いずれかであると解釈可能な部分を抽出する。 To describe by way of more detailed example, the branch instruction analyzer 121, from the original code 10, of the direct call instructions and indirect call instructions direct jump instructions and indirect jump instructions, interpretable parts to be either It is extracted.

なお、分岐命令解析部121により抽出された箇所は、分岐命令と解釈可能である箇所であり、実際には分岐命令ではない箇所も含まれることがあり得る。 Note that portions which are extracted by the branch instruction analyzing part 121 is a portion branch instruction that can be interpreted, in fact, it may also be included locations that are not branch instructions.

ここで、分岐命令について簡単に説明した上で、直接分岐命令と間接分岐命令との違いについて簡単に説明する。 Here, after a brief description of the branch instruction, briefly explains the differences between the direct branch instruction and indirect branch instruction. 分岐命令とは、次に実行される命令を切り替える命令である。 The branch instruction is an instruction for switching to the next instruction to be executed. なお、一連の命令は、分岐命令でない場合には、逐次順番に実行される。 The series of instructions, if not a branch instruction is executed sequentially in the order. 分岐命令には、例えば、jump命令やcall命令などがある。 The branch instruction, for example, there is such jump instruction or call instruction. jump命令やcall命令は、次に実行する命令を変更する。 jump instruction or a call instruction, then to change the instruction to be executed. 言い換えると、jump命令やcall命令の次に実行される命令は、jump命令やcall命令の次に記載された命令ではなく、jump命令やcall命令のオペランドとして指定された命令となる。 In other words, the instruction to be executed next jump instruction or call instruction, rather than the instructions that are described in the following jump instruction or call instruction, the instruction specified as an operand of the jump instruction or call instruction. 例えば、jump命令やcall命令は、オペランドとしてメモリアドレスを指定しており、オペランドとして指定されたメモリアドレスに格納されている値が分岐先アドレスとなる。 For example, jump instruction or call instruction is to specify the memory address as an operand, the value stored in the memory address specified as an operand is a branch address. つまり、jump命令やcall命令の次に、オペランドとして指定されたメモリアドレスに格納されている値が取得されたり処理されたりする。 In other words, the next jump instruction or call instruction, the value stored in the designated memory address is or is processed or is obtained as an operand.

直接分岐命令と間接分岐命令との違いについて簡単に説明する。 It will be briefly described the difference between the direct branch instruction and the indirect branch instruction. 直接分岐命令には、例えば、直接call命令と直接jump命令とがある。 The direct branch instruction, for example, there is a direct call instruction directly jump instruction. また、間接分岐命令には、例えば、間接call命令と間接jump命令とがある。 In addition, the indirect branch instruction, for example, there is an indirect call instructions and indirect jump instruction. 直接分岐命令では、命令内に分岐先となる分岐先アドレスが明示されており、命令解読時に分岐先が決定される。 The direct branch instruction, the branch destination address to which the branch destination to the instruction have been specified, the branch destination is determined at the instruction decoding. 間接分岐命令では、命令内に分岐先アドレスが明示されておらず、実際に間接分岐命令を実行する際に初めて分岐先アドレスが決定される。 In an indirect branch instruction, the branch destination address has not been specified in the instruction, the first branch destination address is determined when the actual execution of the indirect branch instruction. 例えば、間接分岐命令では、命令内には分岐先アドレスが明示されておらず、分岐先アドレス格納場所から分岐先アドレスを読み出すことで、分岐先アドレスが決定される。 For example, the indirect branch instruction, is not explicitly branch destination address in the instruction, by reading the branch target address from the branch target address storage location, the branch target address is determined. 例えば、間接分岐命令は、実行時にロードされたDLLが分岐先となり、DLLがロードされるメモリアドレスが動的に決定される場合に利用される。 For example, indirect branch instruction, DLL that is loaded at run time is the branch destination, a memory address DLL is loaded is used when it is determined dynamically.

また、分岐先アドレス格納場所と、間接分岐箇所と、直接分岐箇所との関係について簡単に説明する。 Also, a branch destination address storage location, and indirect branch points will be briefly described the relationship between the direct branch point. 分岐先アドレス格納場所を参照する分岐命令は、間接分岐箇所のみとなる。 Branch instruction that references the branch destination address storage location is only the indirect branch point. また、間接分岐箇所を分岐先とする分岐命令は、直接分岐箇所のみとなる。 The branch instruction to the indirect branch point and the branch destination is only the direct branch point. 間接分岐箇所を分岐先とする直接分岐箇所は、ない場合もある。 Direct branch point to an indirect branch point and the branch destination, it may not. 直接分岐箇所を分岐先とする分岐命令は、直接分岐箇所のみとなる。 Branch instruction directly bifurcation to the branch destination is only the direct branch point. 直接分岐箇所を分岐先とする直接分岐箇所は、ない場合もある。 Direct branch point directly bifurcation and branch destination, it may not.

分岐命令解析部121の説明に戻る。 Returning to the branch instruction decoder 121. 分岐命令解析部121は、公知の手法を用いて、オリジナルコード10から分岐命令と解釈可能な箇所を抽出する。 Branch instruction analyzing part 121, using techniques known to extract interpretable places a branch instruction from the original code 10. 例えば、分岐命令解析部121は、機械語にて記載された命令である機械語命令として解釈可能なバイト列を識別することで、直接分岐箇所や間接分岐箇所を抽出する。 For example, the branch instruction analyzer 121, to identify the sequence of bytes that can be interpreted as a machine language instruction is an instruction described in machine language, extracting the direct branch location and indirect branch point. 詳細な一例をあげて説明すると、IA−32命令セットの場合、分岐命令解析部121は、1バイト目が「0xEB」であれば、直接jump命令であると解釈可能な部分として抽出する。 To describe by way of detailed example, when the IA-32 instruction set, a branch instruction analyzer 121, the first byte is equal to "0xEB" is extracted as interpretable parts as a direct jump instruction.

また、分岐命令解析部121は、抽出した間接分岐箇所が分岐命令となる第1の確率を算出する。 The branch instruction analyzer 121, the extracted indirect branch portion calculates the first probability of the branch instruction. また、同様に、分岐命令解析部121は、抽出した間接分岐箇所が分岐命令となる第1の確率に加えて、抽出した直接分岐箇所が分岐命令となる第1の確率を算出する。 Similarly, branch instruction analyzing part 121, the extracted indirect bifurcation in addition to the first probability of a branch instruction, the extracted direct branch portion calculates the first probability of the branch instruction. なお、分岐命令解析部121による第1の確率を算出する算出手法の一例については、後述する。 Note that one example of a calculation method for calculating a first probability by the branch instruction analyzing unit 121 will be described later.

また、分岐命令解析部121は、抽出した間接分岐箇所と直接分岐箇所とについて、算出した第1の確率と対応付けて暫定分岐情報格納テーブル111に格納する。 The branch instruction analyzer 121 extracted for the indirect branch point directly bifurcation, and stores in association with the first probability calculated for interim branch information storage table 111. また、分岐命令解析部121は、抽出した直接分岐箇所について格納する際には、抽出した直接分岐箇所が実際に直接分岐命令である場合に分岐先と解釈される分岐先アドレスを「暫定分岐先アドレス」として併せて格納する。 The branch instruction analyzer 121, when storing the extracted direct branch point is "temporary branch destination branch address extracted directly bifurcation is actually interpreted as the branch destination when a direct branch instruction stored together as an address. " また、分岐命令解析部121は、抽出した間接分岐箇所を格納する際には、抽出した間接分岐箇所が実際に間接分岐命令である場合に分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所と解釈される位置を「暫定分岐先アドレス格納場所」として併せて格納する。 The branch instruction analyzer 121, when storing the extracted indirect branch point, the branch destination of the branch target address indicating a branch destination when the extracted indirect branch portions is in fact an indirect branch instruction is stored a position that is interpreted as a storage location for storing together as "temporary branch destination address storage location".

例えば、分岐命令解析部121は、先頭が「0x0005」から始まる箇所が直接call命令である第1の確率が「0.2」であると算出した場合を用いて説明する。 For example, branch instruction analyzing part 121, the top portion starting from "0x0005" is first probability is a direct call instruction will be described with reference to the case of calculating as "0.2". また、先頭が「0x0005」から始まる箇所が直接call命令であり、分岐先の先頭のアドレスが「0x000F」である場合を用いて説明する。 In addition, the top is a place directly call instructions starting from "0x0005", will be described with reference to the case the beginning of the address of the branch destination is "0x000F". この場合、分岐命令解析部121は、アドレス「0x0005」と、種別「直接call」と、命令確率「0.2」と、暫定分岐先アドレス「0x000F」とを含むレコードを暫定分岐情報格納テーブル111に格納する。 In this case, the branch instruction analyzer 121, the address "0x0005", type "direct call" instruction and the probability "0.2", the provisional records containing a tentative branch destination address "0x000F" branch information storage table 111 and stores it in.

分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を解析することで、間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所を識別する。 Branch relationship analysis unit 122, by analyzing the branching relationship between points extracted by the branch instruction analyzing unit 121 identifies the direct branch locations indirect branch portion is directly or indirectly branch destination. そして、分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を示すツリーである暫定分岐関係ツリーを生成する。 The branching relationship analysis unit 122 generates a tentative branch relationship tree is a tree showing the branching relationship between points extracted by the branch instruction analyzer 121. なお、分岐関係解析部122は、「識別部」とも称する。 Incidentally, the branch relationship analysis unit 122, also referred to as "identification section".

例えば、分岐関係解析部122は、分岐命令解析部121により生成された暫定分岐情報格納テーブル111内に記憶されたレコードのうち、種別が「直接call」又は「直接jump」となるレコードを識別する。 For example, branch relationship analysis unit 122, among the generated tentative branch information storage table 111 records stored in the branch instruction analyzing unit 121 identifies the record type is a "direct call" or "direct jump" . そして、分岐関係解析部122は、種別が「直接call」又は「直接jump」となるレコードの「先頭」から抽出された箇所が、他のレコードの「暫定分岐先アドレス」と一致するか否かを判定する。 The branching relationship analysis unit 122, classification is the place where it has been extracted from the "head" of the record is "direct call" or "direct jump", whether to match the "interim branch address" of other records the judges. すなわち、直接分岐命令として抽出された箇所の分岐元が、直接分岐命令として抽出された箇所と一致するか否かを判定する。 That is, branch origin points extracted as a direct branch instruction, determines whether or not to match the positions extracted as the direct branch instruction. なお、レコードの「先頭」から抽出された箇所とは、例えば、図3の「アドレス」に示す箇所が該当する。 Note that the portion extracted from the "head" of the record, for example, corresponds the position shown in the "address" in FIG. ここで、分岐関係解析部122は、一致すると判定した場合には、一致すると判定したレコードに対応する箇所各々が分岐元と分岐先とが関係あると判定する。 Here, the branch relationship analysis unit 122, when judging match with judges portions each corresponding to the matching with the determined record the branch destination and the branch source and is related. また、分岐関係解析部122は、種別が「直接call」又は「直接jump」となるレコードについての判定結果に加えて、種別が「間接call」又は「間接jump」となるレコードの「先頭」と「暫定分岐先アドレス格納場所」とを加えることで、暫定分岐関係ツリーを生成する。 The branch relationship analysis unit 122, in addition to the determination result for the record type is a "direct call" or "direct jump" type is a record that is "indirect call" or "indirect jump" and "top" by adding the "temporary branch destination address storage location", to generate a provisional branch relationship tree.

例えば、分岐関係解析部122は、図3に示す暫定分岐情報格納テーブル111に基づいて処理を実行する場合には、図4に示すような暫定分岐ツリーを生成し、暫定分岐ツリー情報テーブル112に格納する。 For example, branch relationship analysis unit 122, when performing processing based on the tentative branch information storage table 111 shown in FIG. 3 generates the provisional branch tree as shown in FIG. 4, the provisional branch tree information table 112 Store. 図4は、実施例1における分岐関係解析部により生成される暫定分岐関係ツリーの一例を示す。 Figure 4 shows an example of a provisional branch relationship tree generated by the branch relationship analysis unit in the first embodiment. 図4に示す例では、説明の便宜上、直接分岐箇所については4角形で表し、間接分岐箇所については3角形で表し、暫定分岐先アドレス格納場所については丸で表した。 In the example shown in FIG. 4, for convenience of explanation, it represents for the direct branch portions in square, for indirect branch points expressed by a triangle, for interim branch destination address storage location represented by circles. 例えば、分岐関係解析部122は、直接分岐箇所についての分岐関係の判定結果からツリーを生成する。 For example, branch relationship analysis unit 122 generates a tree from the judgment result of the branch relationship for direct branch point. その後、分岐関係解析部122は、直接分岐箇所の分岐先となる間接分岐箇所と、間接分岐箇所の暫定分岐先アドレス格納場所とを加えることで、暫定分岐ツリーを生成する。 Thereafter, the branch relationship analysis unit 122, by adding an indirect branch portion which becomes the branch destination directly bifurcation, and a provisional branch target address location for indirect branch point, to generate a provisional branching tree. なお、図4に示す例では、「0x0005」が分岐元となり「0x000F」が分岐先となり、「0x000F」が分岐元となり「0x1004」が分岐先となる。 In the example shown in FIG. 4, "0x0005" is a branch origin "0x000F" is the branch destination, "0x000F" is a branch origin "0x1004" is the branch destination.

インポートアドレス格納場所特定部123は、間接分岐箇所の先頭と、間接分岐箇所が分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する。 Import address storage location detection part 123, the head of the indirect branch point, of the head of direct branch locations indirect branch point is the branch destination, the at least one portion top second as the head of the machine language instructions to calculate the probability. なお、間接分岐箇所の「先頭」や直接分岐箇所の「先頭」とは、間接分岐箇所や直接分岐箇所としてレコードから抽出された箇所のうち、先頭部分にある箇所を示す。 Note that the "head" of the "head" or direct bifurcation of indirect branch points, among the points that have been extracted from the record as an indirect branch location and direct branch point, shows where the top portion. すなわち、図3に示す例では、「アドレス」に示された箇所が該当する。 That is, in the example shown in FIG. 3, portions shown in "address" corresponds.

また、インポートアドレス格納場所特定部123は、暫定分岐先アドレス格納場所が同一となる間接分岐箇所が複数抽出された場合に、暫定分岐先アドレス格納場所が同一となる間接分岐箇所各々の先頭と、暫定分岐先アドレス格納場所が同一となる間接分岐箇所各々のうちいずれかが分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する。 Moreover, import address storage location detection part 123, when the indirect branch locations interim branch address storage location are the same are more extracted, and the top of the indirect branch portions each interim branch target address location is the same, of any of the indirect branch portions each interim branch target address location is identical with the beginning of the direct branch portion which becomes the branch destination, a second probability that the head of at least one point is the top of the machine language instructions It is calculated. つまり、インポートアドレス格納場所特定部123は、抽出された間接分岐箇所の分岐先アドレスが格納されている暫定分岐先アドレス格納場所が実際に分岐先アドレス格納場所となる確率を算出する。 In other words, the import address storage location detection part 123 calculates the probability of the branch destination address of the extracted indirect branch point interim branch address storage location is stored actually becomes the branch destination address storage location.

ここで、計算の単純化を目的として、分岐命令解析部121により抽出された箇所各々が機械語命令として解釈される事象がお互いに独立であると仮定して説明する。 Here, for the purpose of simplification of calculation, points respectively extracted by the branch instruction analyzing unit 121 will be described assuming that is independent of each other events that are interpreted as machine instructions. また、暫定分岐先アドレス格納場所「X」が実際に分岐先アドレス格納場所となる第2の確率を「PX」として説明する。 Further, a description will be given of a second probability that interim branch address storage location "X" is the actual branch target address location as "PX". また、「X」と同一の暫定分岐ツリー内に存在する分岐命令「Yi(1≦i≦N,NはXと同一ツリー内に存在する分岐命令の数を示し、iはツリー内の分岐命令各々を表すインデックスを示す。)」として説明する。 Also, "X" branch instruction to be in the same tentative branch tree as "Yi (1 ≦ i ≦ N, N is the number of branch instructions existing in X in the same tree, i is the branch instruction in the tree the index representing each.) is described as a ". また、分岐命令「Yi」が実際に分岐命令となる第1の確率を「PYi」とした上で説明する。 Further, a description will be given of a first probability that the branch instruction "Yi" is actually a branch instruction after having the "PYi". この場合、「PX」は、下記の式(1)にて算出可能となる。 In this case, "PX" is made possible calculated by the following equation (1).

すなわち、式(1)に示すように、「X」と同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率は、「1」から、「X」と同一の暫定分岐ツリー内に存在する分岐命令のすべてが機械語命令の先頭とはならない確率を減算することで得られる。 That is, as shown in equation (1), of the branch instruction is present in the same tentative branch tree as "X", the second probability that the head of at least one portion is the head of the machine language instruction, " from 1 ", all of the branch instruction that exists in the same interim branch in the tree with the" X "is obtained by subtracting the probability not be the beginning of the machine language instruction. なお、式(1)の「Π」は、総積を示す。 It should be noted that, "Π" of the formula (1), shows the total product. 言い換えると、式(1)に示す例では、「Π(1−PYi)」は、「X」と同一の暫定分岐ツリー内に存在するすべての分岐命令「Yi」について「1−PYi」を乗算した結果を示す。 In other words, in the example shown in equation (1), "[pi (1-PYi)", all branch instructions existing in the same interim branch tree "X" for the "Yi" multiplies "1-PYi" shows the results.

すなわち、インポートアドレス格納場所特定部123は、抽出された箇所各々に該当する第1の確率を用いて、抽出された同一ツリー内にある箇所すべてが分岐命令とならない第3の確率を1から減算することで、第2の確率を算出する。 That is, the import address storage location detection part 123, using a first probability corresponding to the position of each extracted, all locations in the extracted within the same tree subtracted from 1 to third probability that do not branch instruction by, for calculating a second probability. ここで、第3の確率とは、例えば、式(1)における「Π(1−PYi)」を示す。 Here, the third probability, for example, shows a "[pi (1-PYi)" in the equation (1).

より詳細な一例をあげて説明すると、インポートアドレス格納場所特定部123は、処理対象となる箇所について算出された第1の確率を1から減算した値を処理対象となる箇所ごとに算出し、処理対象となる箇所ごとに算出された値各々を積算し、積算することで得られた値を1から減算することで、第2の確率を算出する。 To describe by way of more detailed example, import address storage location detection part 123 calculates a first probability calculated for the portion to be processed for each location to be processed the value obtained by subtracting from 1, the processing total values ​​each calculated for each point of interest, a value obtained by accumulating is subtracted from 1, to calculate a second probability. 処理対象となる箇所とは、同一の暫定分岐ツリー内に存在する分岐命令となり、例えば、間接分岐箇所の先頭一つであったり、間接分岐箇所の先頭、及び間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所の先頭であったり、分岐先アドレス格納場所が同一となる間接分岐箇所各々の先頭及び間接分岐箇所各々のうちいずれかが分岐先となる直接分岐箇所の先頭であったりする。 The portion to be processed, a branch instruction is present in the same interim branch tree, for example, or a top one of the indirect branch point, the head of the indirect branch point, and an indirect branch point is directly or indirectly or a head of the direct branch portion which becomes the branch destination, one of the leading and indirect branch portions each indirect branch portions each branch destination address storage location becomes identical there at the beginning of the direct branch portion which becomes the branch destination or.

例えば、図3における暫定分岐先アドレス格納場所「0x2004」がインポートアドレス格納場所20となる第2の確率は下記の式(2)にて算出される。 For example, the second probability tentative branch address storage location "0x2004" is shown in FIG. 3 to be imported address location 20 is calculated by the following equation (2).

同様に、図3における暫定分岐先アドレス格納場所「0x20AA」がインポートアドレス格納場所20である第2の確率は下記の式(3)にて算出される。 Similarly, the second probability tentative branch address storage location "0x20AA" is imported address storage location 20 in FIG. 3 is calculated by the following equation (3).

また、インポートアドレス格納場所特定部123は、算出された第2の確率が閾値以上である場合に、間接分岐箇所が間接分岐命令であるとした場合における間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。 Moreover, import address storage location detection part 123, when the second probability which is calculated is equal to or greater than the threshold, the branch destination indirect branch point indicates the branch destination from an indirect branch point in the case where as the indirect branch instruction specifying the branch destination address storage location address is stored. 例えば、閾値として「0.5」を用いる場合には、インポートアドレス格納場所特定部123は、アドレス「0x2004」をインポートアドレス格納場所20として特定し、アドレス「0x20AA」をインポートアドレス格納場所20として特定しない。 For example, when using the "0.5" as the threshold value, the import address storage location specification unit 123 specifies the address "0x2004" as the import address storage location 20, identify the address "0x20AA" as the import address storage location 20 do not do.

なお、インポートアドレス格納場所特定部123は、間接分岐箇所について算出された第1の確率が閾値以上となる場合に分岐先アドレス格納場所を特定しても良い。 Note that import address storage location specification section 123 may specify the branch target address location if the first probability calculated for an indirect branch portions is equal to or greater than the threshold value. 言い換えると、同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を用いることなく、間接分岐箇所について算出された第1の確率のみを用いても良い。 In other words, among the branch instructions existing in the same interim branch tree, at least one portion top without using a second probability of the head of the machine language instructions, a first calculated for indirect branch point probability only may be used.

ここで、同一の暫定分岐ツリー内に存在する分岐命令のうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率が閾値以上となる場合に、分岐先アドレス格納場所を特定する点について補足する。 Here, among the branch instructions existing in the same interim branch tree, in the case where the head of at least one portion is a second probability of the beginning of the machine instructions than the threshold value, specifying the branch destination address storage location to supplement the points to. 暫定分岐ツリー内に分岐命令が存在する場合、その分岐先も機械語命令と考えられることを踏まえ、インポートアドレス格納場所特定部123は、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出して用いても良い。 If there is a branch instruction in the interim branch tree, given that considered the branch destination even machine instructions, import address storage location detection part 123, the head of at least one point is the top of the machine language instructions it may be used to calculate the 2 of probability.

ここで、インポートアドレス格納場所特定部123により分岐先アドレス格納場所として特定されるのは、間接分岐箇所として抽出された箇所のうち、算出された第2の確率が閾値以上となった間接分岐箇所についての暫定分岐先アドレス格納場所となる。 Here, what is specified as the branch destination address storage location by import address storage location detection part 123, of the place where it has been extracted as an indirect branch point, indirect branch portion where the second probability calculated is equal to or larger than the threshold value the interim branch destination address storage location for. 言い換えると、インポートアドレス格納場所特定部123により分岐先アドレス格納場所として特定されるのは、直接分岐箇所の暫定分岐先アドレスではない。 In other words, what is specified as the branch destination address storage location by import address storage location detection part 123 is not a provisional branch address directly bifurcation. この点について補足する。 To supplement this regard. 上述したように、例えば、ランタイムパッカーによりパッキングされたプログラムは、通常はローダが行う動的ライブラリのリンク処理等を実施した後に、オリジナルコードのエントリポイントへ処理が渡される。 As described above, for example, is packed programmed by runtime packers, normally after performing the linking process of dynamic libraries such as the loader carried out, the process is passed to the entry point of the original code. ここで、Win32 APIやDLLに含まれる外部関数は、通常、実行時にメモリ上に一度ロードされた上で、実行時に決定されたメモリアドレスが参照されて実行される。 Here, the external functions in the Win32 API or DLL, typically, after being once loaded into memory at run time, are executed are reference memory address determined at runtime. このことを踏まえ、インポートアドレス格納場所特定部123は、直接分岐箇所の分岐先アドレスではなく、間接分岐箇所の分岐先アドレス格納場所を特定する。 Based on this fact, import address storage location detection part 123 is not a branch destination address of the direct branch point, to identify the branch target address location for indirect branch points.

ここで、機械語命令として解釈可能な部分が実際に機械語命令である第1の確率を算出する分岐命令解析部121による処理の一例について説明する。 Here, an example of a process by the branch instruction analyzing part 121 for calculating a first probability interpretable moiety is actually machine instructions as a machine language instruction. 以下では,隠れマルコフモデルに基づき箇所各々について命令確率を算出する場合を用いて説明するが,これに限定されるものではない。 Although the following description with reference to the case of calculating the instruction probabilities for the portion each based on a hidden Markov model, but is not limited thereto.

分岐命令解析部121は、例えば、隠れマルコフモデルによりオリジナルコード10をモデル化し、Forward/Backwardアルゴリズムを用いることで、オリジナルコード10の各バイトが機械語命令の先頭である確率を算出する。 Branch instruction analyzing part 121, for example, to model the original code 10 by hidden Markov model, the use of Forward / Backward algorithm, each byte of the original code 10 calculates the probability that the top of the machine instruction. なお、以下に説明する処理は一例であり、これに限定されるものではない。 The process described below is an example, but is not limited thereto.

隠れマルコフモデルによりオリジナルコード10をモデル化する点について簡単に説明する。 Briefly described points to model the original code 10 by Hidden Markov Models. なお、以下では、オリジナルコード10に対して逆アセンブルが行われることで、オリジナルコード10を構成する複数のバイナリ値が複数の単語に分割され、分割された複数の単語それぞれに「命令部」又は「データ部」のいずれかの状態であることを示す「タグ」が割り当てられ、「命令部」としての「タグ」が割り当てられた単語の命令長に基づいて、ニーモニック(アセンブルコード)を当てはめられた場合を用いて説明する。 In the following, by disassembled to the original code 10 is performed, a plurality of binary values ​​constituting original code 10 is divided into a plurality of words, "instruction unit" each divided plurality of words or "tag" is assigned indicating that the one of the states of the "data section", based on the instruction length of the word "tag" is assigned as an "instruction unit", fitted the mnemonic (assembly code) will be described with reference to the case was. すなわち、オリジナルコード10を構成する複数のバイナリ値が複数の単語に分割されており、複数の単語それぞれにタグが付されている場合を用いて説明する。 That is, a plurality of binary values ​​constituting original code 10 is divided into a plurality of words will be described with reference to the case where the tag is attached to each of a plurality of words.

また、以下では、「入力バイナリ列:X」とは、「逆アセンブル」の対象となる「オリジナルコード10」のバイナリ列を示し、「N」個のバイナリ値であるとする。 In the following, "input binary sequence: X" and indicates a binary string of the target of the "disassembled" "Original Code 10", and a "N" number of binary values. 式(4)に示すように、「逆アセンブル」の対象となる「オリジナルコード」を構成するN個のバイナリ値は、「x1〜xN」として表される。 As shown in equation (4), N pieces of binary values ​​subject to constitute the "original code" of the "disassembly" is represented as "x1~xN".

また、「単語列:w」とは、「入力バイナリ列:X」を1命令の「命令部」もしくは1データの「データ部」としての単語として分割したものである。 In addition, "the word string: w" and, "input binary string: X" is obtained by dividing the as word as a "data portion" of the "commander" or 1 data of one instruction. 式(5)に示すように、「入力バイナリ列:X」を分割したM個の単語それぞれは、「w1〜wM」として表される。 As shown in Equation (5), "Input binary sequence: X" is the M words each obtained by dividing a represented as "w1~wM". 「wi」は1命令もしくは1データを表す。 "Wi" represents one instruction or 1 data. なお、「命令部」は、複数のバイナリ値から構成される場合もあるため、「単語数:M」≦「入力バイナリ数:N」となる。 Incidentally, the "instruction unit", since a plurality of binary values ​​some cases also configured, "word count: M": a ≦ "N input binary number".

また、「タグ列:T」とは、単語「w1〜wM」それぞれに対して、「命令部」か「データ部」であるかの「タグ」が割り当てられたものである。 Further, "tag Column: T" is, for each word "w1~wM", in which if it were a "commander" or "data unit", "tag" is assigned. 式(6)に示すように、単語「w1〜wM」に対応付けてタグ「t1〜tM」として表される。 As shown in equation (6), in association with the word "w1~wM" expressed as a tag "t1~tM".

また、「命令タグ集合:I」は、「命令部」としての状態を表す「タグ」の集合であり、「データタグ集合:D」は、「データ部」としての状態を表す「タグ」の集合である。 Also, "instruction tag set: I" is a set of "tags" representing the state of a "commander", "data tag set: D" represents the state of the "data portion" of the "tag" it is a set. ここで、タグ「ti(1≦i≦M)」は、命令部かデータ部かのいずれかとなる。 Here, the tag "ti (1 ≦ i ≦ M)" is a either instruction unit or data unit. この結果、式(7)に示すように、「ti」は、「命令タグ集合:I」あるいは「データタグ集合:D」のいずれかに属する。 As a result, as shown in Equation (7), "ti" is "instruction tag set: I" or "data tag set: D" belongs to one of the.

図5及び図6は、隠れマルコフモデルの一例を示す図である。 5 and 6 are diagrams showing an example of a hidden Markov model. すなわち、図5に示すように、「命令タグ集合:I」に属するタグを「継続命令状態:S」及び「データ直前命令状態:T」の2種類に更に分割し、「データタグ集合:D」に属する「データ状態:U」と合わせて3種類の状態から構成される隠れマルコフモデルを前提とする。 That is, as shown in FIG. 5, "instruction tag set: I" belonging to the tag "continuation instruction Condition: S", and "data immediately before instruction Condition: T" further divided into two types, "data tag set: D belonging to the "" data state: assuming the hidden Markov model consists of three types of state in conjunction with the U ".

「継続命令状態:S」は、1命令を出力したのち、引き続き「継続命令状態:S」に留まる場合と、「データ直前命令状態:T」に遷移する場合とがある。 "Continued Instruction Condition: S" is, after outputting one instruction continues "continuation instruction Condition: S" and if remains in the "data immediately before instruction Condition: T" and a case where a transition to.

「データ直前命令状態:T」は、「継続命令状態:S」と同様に、1命令を出力するが、その遷移先は、「データ状態:U」のみとなる。 "Data just prior instruction Condition: T" is "continue instruction Condition: S" in the same manner as, but outputs one instruction, the transition destination "data state: U" becomes only. 一般的に、後方にデータが続く命令は、無条件分岐であることが多い。 Generally, backward data following instruction is often an unconditional branch. この結果、命令状態を、継続命令状態と、データ直前命令状態に分割することで、逆アセンブルの精度を向上することが期待できる。 As a result, the instruction state, a continuation command state, by dividing the data immediately before the instruction state, can be expected to improve the accuracy of disassembly.

ここで、「継続命令状態:S」、「データ直前命令状態:T」、又は、「データ状態:U」のいずれかの「状態i」から始まる確率(初期確率)を「πi」とし、「状態i」から「状態j」へ遷移する確率(遷移確率)を「aij」とし、「状態i」におけるシンボルとしての「単語w」が出力される確率(シンボル出力確率)を「bi(w)」とする。 Here, "continued the instruction state: S", "data just before the instruction state: T", or, "data state: U," the probability that starts from the "state i" of any of the (initial probability) the "πi", " the probability of transition from state i "to the" state j "(the transition probability) is" aij "," the probability that "word w" as a symbol in the state i "is output (symbol output probability) of" bi (w) and ".

このような隠れマルコフモデルの一例において、「データ状態:U」で出力されるシンボルをデータ1バイトとすると、これにより、「データ状態:U」におけるシンボル出力確率「bU(w)」において、「w」は、「0以上255以下の範囲にある整数」とすることができる。 In one example of such a hidden Markov model, "data state: U" When the data 1 byte symbols output, thereby, "data state: U" in the symbol at the output probability "bU (w)", " w "can be an integer" in the range of "0 to 255.

これに対して、「命令タグ集合:I」に属する「状態i」において出力されるシンボルの長さ(シンボル長)は、1命令の長さとなる。 In contrast, "instruction tag set: I" belonging to the symbols output in the "state i" length (symbol length) is the length of one instruction. ここで、複合命令セットコンピュータ(CISC:Complex Instruction Set Computer)アーキテクチャの代表的な例であるIntel社の「x86命令」の場合、1命令の長さは最大で16バイトにも及ぶため、そのままで統計的に信頼できるシンボル出力確率「bi(w)」を学習することは容易ではない。 Here, a complex instruction set computer (CISC: Complex Instruction Set Computer) When is a typical example of the architecture Intel Corporation of "x86" instruction, since as many as up to 16 bytes in length in one instruction, as it is statistically reliable symbol output probability "bi (w)" it is not easy to learn. こうした状況に対応するため、図6を用いて近似的にシンボル出力確率「bi(w)」(iはIに属する)を算出する方法について述べる。 To accommodate this situation, approximately symbol output probability with reference to FIG. 6, "bi (w)" (i belongs to I) will be described a method of calculating the. 「x86命令」は、「PREFIX(命令長:0〜4バイト)」、「OPCODE(命令長:1〜2バイト)」、「ModRM(命令長:0〜1バイト)」、「SIB(命令長:0〜1バイト)」、「DISPLACEMENT(命令長:0〜4バイト)」、「IMMEDIATE(命令長:0〜4バイト)」といった命令部から構成される。 "X86 instruction" is, "PREFIX (Instruction length: 0-4 bytes)", "OPCODE (Instruction length: 1 to 2 bytes)", "ModRM (Instruction length: 0-1 bytes)", "SIB (instruction length : 0 to 1 byte) "," DISPLACEMENT (instruction length: 0-4 bytes) "," IMMEDIATE (instruction length: composed from the instruction unit, such as 0 to 4 bytes) ". また、これらの命令部間の遷移パターンは、図6に示すパターンとなる。 Also, the transition pattern between these instruction portion is a pattern shown in FIG.

ここで、図6に示す遷移パターンによって遷移する各命令部を「状態」とし、「命令開始状態」と「命令終了状態」とを除いた各状態(PREFIX,OPCODE,ModRM,SIB,DISPLACEMENT,IMMEDIATE)では、1バイトの命令部を出力するとする。 Here, each instruction unit for transition by the transition pattern shown in FIG. 6 as "state", "instruction start state" and the state other than the "instruction end state" (PREFIX, OPCODE, ModRM, SIB, DISPLACEMENT, IMMEDIATE in), and outputs a 1-byte instruction unit.

また、「単語w」を1バイトごとに分解した結果を、式(8)によって表し(「xa〜xb」)、対応する命令部の種別を、式(9)によって表すとする。 Further, the result of decomposition "word w" to each byte represents by the formula (8) ( "xa~xb"), the type of the corresponding instruction unit, and represented by the formula (9).

このとき、「命令部1バイトを出力する確率は、その時点での命令部の状態によってのみ決まる」と仮定し、更に、「命令部の状態へ遷移する確率は、一つ前の命令部の状態によって決まる」と仮定すると、「命令タグ集合:I」に属する「状態i」におけるシンボルとしての「単語w」のシンボル出力確率「bi(w)」は、式(10)に示すように、近似することができる。 In this case, "the probability of outputting the instruction unit 1 byte, only determined by the state of the instruction unit at that time," Suppose, further, the probability of transition to a state of "instruction portion, the previous instruction of assuming determined by state ", the" instruction tag aggregation: the symbol output probability "bi of" word w "as a symbol in belonging to I" "state i '(w)", as shown in equation (10), it can be approximated. なお、ここで示す「命令部の状態」とは、図6のOPCODEやModRMなどを示す。 Here, shown as "state of the instruction unit" refers to such OPCODE and ModRM in FIG.

これにより、隠れマルコフモデルにおける最尤状態系列算出の問題として、オリジナルコード10から命令部とデータ部とを識別するために用いるモデルパラメータは、命令部間の状態遷移確率と、命令部ごとの1バイトの出現確率のみとすることができる。 Thus, a problem of the maximum likelihood state sequence calculated in the hidden Markov model, the model parameters used to identify an instruction portion and a data portion from the original code 10, and the state transition probability between the instruction unit, for each instruction unit 1 it can be only a byte probability of occurrence of. この命令部に関するモデルパラメータは、「継続命令状態:S」と「データ直前命令状態:T」とで個別に持たせる。 Model parameters for this instruction unit, "continue instruction Condition: S" and "data immediately preceding instruction Condition: T" and de impart individually.

次に、分岐命令解析部121によるモデルパラメータの学習について説明する。 Next, a description will be given learning of the model parameters by the branch instruction analyzer 121. 分岐命令解析部121は、『命令部間の遷移確率「P(vi|vi−1)」及び各命令部における1バイト値のシンボル出力確率「P(xi|vi)」』を、各状態(タグ)間での遷移回数及び各状態(タグ)におけるシンボル出現回数をカウントすることで算出する。 Branch instruction analyzing part 121, "transition probabilities between the instruction unit" P (vi | vi-1) "and the symbol output probability" P 1-byte value in each instruction portion (xi | vi) "" a, each state ( calculated by counting the symbol number of occurrences in the tag) the number of transitions and each state between (tag). ここで、『命令部間の遷移確率「P(vi|vi−1)」及び各命令部における1バイト値のシンボル出力確率「P(xi|vi)」』は、式(11)〜式(14)を算出するためのモデルパラメータである。 Here, "transition probability" P between instruction section (vi | vi-1) "and the symbol output probability" P 1-byte value in each instruction portion (xi | vi) "" refers to a radical of the formula (11) to ( 14) is a model parameter for calculating the.

ここで、式(11)は、「命令タグ集合:I」又は「データタグ集合:D」のいずれかに属する「状態i」の初期確率「πi」を示す。 Here, equation (11), "instruction tag set: I" or "data tag set: D" belongs to one of the showing the initial probability "πi" in "state i". 式(12)は、「命令タグ集合:I」又は「データタグ集合:D」のいずれかに属する「状態i」から「命令タグ集合:I」又は「データタグ集合:D」のいずれかに属する「状態j」への遷移確率「aij」を示す。 Equation (12), "instruction tag set: I" or "data tag set: D" "instruction tag set: I 'either belonging to the" state i "or" data tag set: D "to any of the It belongs to indicate the probability of transition to a "state j", "aij". 式(13)は、「状態i」が「データタグ集合:D」に属する場合のシンボル出力確率「bi(w)」を示す。 Equation (13), "state i" is "data tag set: D" shows the symbol output probability of a case belonging to the "bi (w)". 式(14)は、「状態i」が「命令タグ集合:I」に属する場合のシンボル出力確率「bi(w)」を示す。 Equation (14), "state i" is "instruction tag set: I" indicates the symbol output probability of a case belonging to the "bi (w)".

例えば、分岐命令解析部121は、「初期状態」、「継続命令状態:S」、「データ直前命令状態:T」及び「データ状態:U」の間での遷移確率を、図7に示すように、算出する。 For example, branch instruction analyzing part 121, "initial state", "continue instruction Condition: S", "data immediately before instruction Condition: T" and "data state: U 'transition probabilities between, as shown in FIG. 7 to, is calculated. なお、図7は、実施例1における分岐命令解析部による処理の一例について示す図である。 Note that FIG. 7 is a diagram illustrating an example of a process by the branch instruction analyzing unit in the first embodiment.

なお、逆アセンブルされていないタグなしのオリジナルコード10について処理を実行する場合の一例について簡単に説明する。 Incidentally, briefly explaining an example in the case of executing the processing for original code 10 of untagged not disassembled. 分岐命令解析部121は、タグ付きのオリジナルコード10に基づいて決定されたモデルパラメータと、タグなしのオリジナルコード10とを用いて、バウム・ウェルチアルゴリズムによって新たなモデルパラメータを決定して用いる。 Branch instruction analyzing part 121, using the model parameters determined on the basis of the original code 10 tagged, the original code 10 of untagged, used to determine a new model parameter by Baum-Welch algorithm.

次に、Forward/Backwardアルゴリズムについて簡単に説明する。 Next, it will be described briefly Forward / Backward algorithm. 分岐命令解析部121は、Forwardアルゴリズムに基づき、モデルパラメータθが与えられたときのオリジナルコード10候補Xの出力確率P(X|θ)を算出する。 Branch instruction analyzing part 121, based on the Forward algorithm, the output probability P of the original code 10 candidates X when the model parameter theta given | calculates the (X theta). 図8−1及び図8−2、図9は、実施例1における分岐命令解析部による処理の一例について示す図である。 Figure 8-1 and Figure 8-2, Figure 9 is a diagram illustrating an example of a process by the branch instruction analyzing unit in the first embodiment.

図8−1に示すような16進数表記の「入力バイナリ列」がオリジナルコード10として特定装置100に入力された場合を用いて説明する。 It will be described with reference to the case where the "input binary sequence" in hexadecimal notation as shown in Figure 8-1 is input to a particular device 100 as an original code 10. また、「入力バイナリ列」を先頭から1バイトずつずらしながら、命令として解釈した場合の命令長を取得することで、図8−2に示すデータが得られた場合を用いて説明する。 Also, while shifting one byte from the head of the "input binary sequence", by acquiring the instruction length when interpreted as an instruction, it will be described with reference to the case where the data shown in Figure 8-2 was obtained. 例えば、図8−2に示すように、「入力バイナリ列」が「55」である場合に、「命令長:1」が取得され、これに対応するニーモニックが「PUSH EBP」となる場合を用いて説明する。 For example, as shown in Figure 8-2, when the "input binary string" is "55", "instruction length: 1" is acquired, using the case of mnemonics corresponding thereto is "PUSH EBP" It described Te.

図9に示す行列は、横軸に「入力バイナリ列」が配置され、縦軸に「継続命令状態:S」、「データ直前命令状態:T」及び「データ状態:U」が配置される。 Matrix shown in FIG. 9, "input binary sequence" is arranged on the horizontal axis, vertical axis "continuation instruction Condition: S", "data immediately before instruction Condition: T" and "data state: U" is arranged. j行目i列目の要素には、「x1,...,xi−1」を出力し且つ「状態j」で「xi(状態jが命令状態の場合は、xiを命令の先頭としたときの命令全体)」を出力する「累積最大確率値」が格納される。 The j-th row i-th column of elements, "x1, ..., xi-1", "xi (state j at the output to and the" state j "is the case of the instruction state, was the beginning of the instruction xi "maximum accumulated probability value" is stored to output a command all) "when. また、各要素には、「累積最大確率値」以外にも、「遷移元要素リスト」と「累積最大確率値算出の元になった遷移元要素」が格納される。 In addition, each element, "the maximum accumulated probability value" Besides, "transition source element was the source of the cumulative maximum probability value calculation" "transition source element list" and is stored.

ここで、各要素における「遷移元要素リスト」は、図8−2に示す命令長と、式(11)〜式(14)に示される遷移状態相関関係とを利用することで算出可能である。 Here, "transition source element list" in each element can be calculated by utilizing the transition state correlation shown in the instruction length as shown in Figure 8-2, formula (11) to (14) . 具体的には、図9に示す行列における1行目1列目(継続命令状態:S)の場合、「55」は、1バイト命令であり、遷移先は、1行目2列目(継続命令状態:S)と、2行目2列目(データ直前命令状態:T)となる。 Specifically, the first row first column in the matrix shown in FIG. 9 (continued Instruction Condition: S) For "55" is a 1-byte instruction, the transition destination, first row second column (continued instructions state: and S), 2 column 2 line (data just before the instruction state: T) to become. つまり、1行目2列目と、2行目2列目の「遷移元要素リスト」へ、1行目1列目を追加する。 In other words, the first line of the second column, in the second row second column to the "transition source element list", to add the first column first row. 分岐命令解析部121は、全要素について同様の処理を繰り返すことで、各要素における「遷移元要素リスト」が算出する。 Branch instruction analyzing part 121, by repeating the same processing for all the elements, calculated by the "transition source element list" in each element.

なお、分岐命令解析部121は、すべての入力バイナリ列を出力し終える場合には、図9に示す行列における終了状態(出力確率は「1」)の列に遷移するとする。 Incidentally, the branch instruction analyzing part 121, when the finished prints all input binary string, the end state in the matrix shown in FIG. 9 (output probability "1") and the transition to a column of. なお、例外として、1列目の要素の遷移元は、図9に示す行列における初期状態(累積最大確率値は「1」)としておく。 As an exception, the transition source of the first column of elements, the initial state in the matrix shown in FIG. 9 (maximum accumulated probability value is "1") keep the.

なお、累積最大確率値の算出手法についても簡単に補足する。 It should be noted, also easy to supplement the method of calculating the cumulative maximum probability value. 例えば、分岐命令解析部121は、j行目i列目の遷移元要素が、n行目m列目であり、n行目m列目の累積最大確率値を「Pnm」、「遷移元状態:n」から「現状態:j」に遷移する確率(図7のモデルパラメータを参照)を「anj」とすると、「最大確率値算出の元となった遷移元要素」は、式(15)に示すように、「Pnm×anj」が最大となる「m」及び「n」を探すことで算出される。 For example, branch instruction analyzing part 121, j-th row i th column of the transition source element is a n-th row m-th column, the cumulative maximum probability value in the n-th row m-th column "Pnm", "transition source state : from n "" current state: when the probability of transition to the j "(see the model parameters in FIG. 7) and" anj "," original and became transition source elements of the maximum probability value calculation "refers to a radical of the formula (15) as shown in "Pnm × anj" is calculated by looking for the "m" and "n" is maximum. そして、「Pnm×anj」の最大値に、「xi」(現状態が命令状態の場合は、xiを命令の先頭としたときの命令全体)のシンボル出力確率を乗算した値を、j行目i列目の累積最大確率値として算出し、対応する要素に格納する。 Then, the maximum value of "Pnm × anj", "xi" (in the case of the current state of the instruction state, the instruction whole at the time of the beginning of the instruction xi) the value obtained by multiplying the symbol output probability of a, j-th row i is calculated as th column of the cumulative maximum probability value, stored in the corresponding element.

図9に示すように、分岐命令解析部121は、図9に示す行列の要素間の遷移において、すべてのタグ系列の総和を計算する。 As shown in FIG. 9, the branch instruction analyzer 121, in the transition between the elements of the matrix shown in FIG. 9, to calculate the sum of all tags sequence. 例えば、分岐命令解析部121は、n行目m列目の要素からj行目i列目の要素への遷移(m<iとする。)に対して、式(16)に示すように、n行目m列目の確率値Pnmに、状態「n」から状態「j」に遷移する確率「anj」(例えば、図7のモデルパラメータを参照)を乗算し、遷移元となるすべてのm,nについて和をとる。 For example, branch instruction analyzing part 121, the transition from the n-th row m-th column element of the j-th row i th column element relative (m and <i.), As shown in equation (16), in the n-th row m-th column of the probability values ​​Pnm, the probability of transition from state "n" to the state "j", "anj" (see, for example, the model parameters in FIG. 7) multiplies the all m as the transition source , it takes the sum for n. そして、式(16)の値に「xi」のシンボル出力確率を乗算した値をj行目i列目の確率値として算出し、このような計算を初期状態から終了状態まで算出して確率P(X|θ)を得る。 The probability is calculated by calculating a value obtained by multiplying the symbol output probability of "xi" to the value of formula (16) as a probability value of the j-th row i th column, such calculated from the initial state to the end state P obtain | (θ X).

分岐命令解析部121は、上述したようなモデルを利用し、Forward/Backwardアルゴリズムを用いることで、各バイトが機械語命令である第1の確率を算出する。 Branch instruction analyzer 121 utilizes the model described above, by using the Forward / Backward algorithm, each byte to calculate the first probability is a machine language instruction.

なお、特定装置100は、既知のパーソナルコンピュータ、ワークステーション、携帯電話、PHS(Personal Handyphone System)端末、移動体通信端末又はPDA(Personal Digital Assistant)などの情報処理装置を利用して実現しても良い。 Incidentally, the specific device 100, known personal computer, a workstation, a cellular phone, PHS (Personal Handyphone System) terminal, be realized by using an information processing apparatus such as a mobile communication terminal or PDA (Personal Digital Assistant) good. 例えば、PDAなどの情報処理装置に、図1に示した記憶部110や制御部120の各機能を搭載することによって実現しても良い。 For example, the information processing apparatus such as a PDA, may be realized by mounting the functions of the storage unit 110 and the control unit 120 shown in FIG.

[特定装置による処理] Process according to certain device]
図10は、実施例1における特定装置による処理の流れの一例を示すフローチャートである。 Figure 10 is a flowchart illustrating an example of a process flow according to a particular device in the first embodiment.

図10に示すように、特定装置100では、オリジナルコード10の入力があると(ステップS101肯定)、分岐命令解析部121が、分岐命令と解釈可能な箇所を抽出する(ステップS102)。 10, in the particular device 100, when there is an input original code 10 (step S101: Yes), the branch instruction analyzing part 121 extracts an interpretable places a branch instruction (step S102). 例えば、分岐命令解析部121は、直接分岐命令又は間接分岐命令と解釈可能な箇所を抽出する。 For example, branch instruction analyzing part 121 extracts an interpretable places a direct branch instruction or an indirect branch instruction. また、分岐命令解析部121は、抽出した箇所の先頭が機械語命令の先頭となる確率を算出する(ステップS103)。 The branch instruction analyzer 121, the beginning of the extracted portions to calculate the probability of the top of the machine language instruction (step S103).

そして、分岐関係解析部122は、分岐命令解析部121により抽出された箇所間の分岐関係を解析することで、間接分岐箇所が直接的又は間接的に分岐先となる直接分岐箇所を識別し(ステップS104)、分岐命令解析部121により抽出された箇所間の分岐関係を示すツリーである暫定分岐関係ツリーを生成する(ステップS105)。 The branching relationship analysis unit 122, by analyzing the branching relationship between points extracted by the branch instruction analyzing unit 121 identifies the direct branch locations indirect branch portion is directly or indirectly branch target ( step S104), and generates a tentative branch relationship tree is a tree showing the branching relationship between points extracted by the branch instruction analyzing part 121 (step S105).

そして、インポートアドレス格納場所特定部123は、間接分岐箇所の先頭と、間接分岐箇所が分岐先となる直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる確率を算出する(ステップS106)。 Then, the import address storage location detection part 123, the head of the indirect branch point, indirect branch point is one of the leading direct branch portion which becomes the branch destination, the probability that the head of at least one point is the top of the machine language instructions is calculated (step S106). 図4における暫定分岐先アドレス格納場所「0x2004」を例に説明すると、インポートアドレス格納場所特定部123は、「1−(1−0.2)×(1−0.4) ×(1−0.1)×(1−0.6)×(1−0.8)=0.96544」であると算出する。 When the "0x2004" interim branch destination address storage location in Fig. 4 will be described as an example, the import address storage location detection part 123, "1- (1-0.2) × (1-0.4) × (1-0 .1) is calculated to be × (1-0.6) × (1-0.8) = 0.96544 ".

そして、インポートアドレス格納場所特定部123は、閾値以上の確率が算出されると(ステップS107肯定)、間接分岐箇所が間接分岐命令である場合に間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する(ステップS108)。 Then, the import address storage location detection part 123, the more the probability threshold value is calculated (step S107: Yes), indirect branch point is the branch destination address indicating a branch destination from indirect branch point in the case of indirect branch instruction specifying the branch destination address storage location to be stored (step S108). 例えば、所定の閾値として「0.5」を用いる場合には、インポートアドレス格納場所特定部123は、アドレス「0x2004」をインポートアドレス格納場所20として特定する。 For example, when using the "0.5" as the predetermined threshold value, the import address storage location specification unit 123 specifies the address "0x2004" as the import address storage location 20. 一方、インポートアドレス格納場所特定部123は、閾値以上の確率が算出されないと(ステップS107否定)、そのまま処理を終了する。 On the other hand, the import address storage location detection part 123, a probability more than a threshold value has not been calculated (step S107 negative), the process ends.

なお、上記の処理手順は、上記の順番に限定されるものではなく、処理内容を矛盾させない範囲で適宜変更しても良い。 The above-described processing procedure is not limited to the above order may be changed as appropriate within a range that does not contradict the processing contents. 例えば、上記のステップS103をS105の後に実行しても良い。 For example, it may be performed above steps S103 to after S105.

[実施例1の効果] Effects of First Embodiment
上述したように、実施例1によれば、パックされたプログラムコードをアンパックすることで得られるオリジナルコード10から、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所を抽出し、抽出された箇所が分岐命令となる第1の確率を算出し、算出した第1の確率に基づいて、抽出された該箇所の先頭が機械語命令の先頭となる第2の確率を算出する。 As described above, according to Example 1, was extracted from the original code 10 obtained by unpacking a packed program code, the indirect branch point is an address indicating an interpretable places with at least indirect branch instruction, extracted portion calculates a first probability of the branch instruction, based on the calculated first probability, the head of the extracted relevant section calculates the second probability of the top of the machine language instructions. そして、閾値以上の第2の確率が算出されると、間接分岐箇所が間接分岐命令である場合に間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する。 When the second probability greater than the threshold value is calculated, indirect branch point identifies a branch destination address storage location the branch target address is stored indicating a branch destination from indirect branch point in the case of indirect branch instruction . この結果、適切な分岐先アドレス格納場所を特定可能となる。 As a result, it is possible to identify the appropriate branch destination address storage location. すなわち、逆アセンブル結果が不正確であったとしても、機械語命令の先頭となる第1の確率に基づいて処理を実行することで、誤ったインポートアドレス格納場所20を特定することを減らすことが可能となる。 That is, even disassemble result is inaccurate, by executing the processing based on the first probability of the beginning of the machine instructions, be reduced to identifying the erroneous import address storage location 20 It can become.

すなわち、実施例1によれば、プログラムコードにおいて、外部関数を呼び出すときに使用される分岐先アドレス格納場所を適切に特定可能となる。 That is, according to the first embodiment, in the program code, the branch destination address storage location used becomes properly can identify when calling an external function. 従来の手法では、プログラムコードから間接call命令を探し出し、探し出した間接call命令が示すメモリ領域を分岐先アドレス格納場所として特定していた。 In the conventional technique, find an indirect call instruction from the program code, have a memory area indicated indirect call instruction is the found specified as the branch destination address storage location. この従来の手法では、オリジナルコード10がマルウェアである場合など、逆アセンブルが困難で正確な逆アセンブル結果が得られない場合には、誤ったインポートアドレス格納場所20を特定することになる。 In this conventional technique, such as when the original code 10 is malware, when the disassembly is not obtained difficult and accurate disassembly result is to identify an erroneous import address storage location 20. これに対して、実施例1によれば、プログラムコード内の間接分岐命令と解釈できるすべての箇所について、機械語命令と解釈できる第1の確率に基づき、分岐先アドレス格納場所である確率が高い箇所を特定可能となる。 In contrast, according to the first embodiment, for all the points that can be interpreted as an indirect branch instruction in the program code, based on the first probability to be interpreted as machine language instructions, a high probability of a branch destination address storage location the part made possible specific. この結果、従来の手法よりも高精度に分岐先アドレス格納場所を特定可能となる。 As a result, it is possible to identify a branch address storage location more accurately than conventional techniques. また、分岐先アドレス格納場所を特定できれば、例えばマルウェアが利用しようとしている外部APIを特定でき、マルウェアがどんな機能を持つか等の脅威把握や、脅威に基づくマルウェアの分類作業が可能となる。 Also, if you can identify the branch destination address storage location, for example, malware is able to identify the external API that you are trying to use, threat grasp and the like or malware has any function, it is possible to classify the work of malware based on the threat.

さて、これまで本発明の実施例について説明したが、本発明は上述した実施例以外にも、その他の実施例にて実施されても良い。 So far it has been described for the embodiment of the present invention, other than the embodiments the present invention described above may also be implemented in other embodiments. そこで、以下では、その他の実施例を示す。 Therefore, in the following, other examples.

[システム構成] [System configuration]
また、本実施例において説明した各処理のうち、自動的に行われるものとして説明した処理の全部又は一部を手動的に行うこともでき、あるいは、手動的に行われるものとして説明した処理の全部又は一部を公知の方法で自動的に行うこともできる。 Among the processes explained in the embodiments, all or part of the processes explained as being automatically performed can be manually performed. Alternatively, the processes explained as being manually performed It can be automatically performed in whole or in part the known methods. この他、上述文書中や図面中で示した処理手順、制御手順、具体的名称、各種のデータやパラメータを含む情報(図1〜図10)については、特記する場合を除いて任意に変更することができる。 In addition, processing procedures described above, control procedures, specific names, specific names, information including various data and parameters (FIGS. 1-10) is changed arbitrarily unless otherwise specified be able to.

また、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。 The components of each device illustrated in the drawings are functionally conceptual and are not necessarily physically configured as depicted. すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部又は一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的又は物理的に分散・統合して構成することができる。 In other words, the specific mode of dispersion and integration of each apparatus is not limited to those illustrated in the drawings, depending on various loads or use conditions, dispersed or functionally or physically in arbitrary units It may be configured by integration. 例えば、図1に示す例では、記憶部110を特定装置100の外部装置としてネットワーク経由で接続するようにしても良い。 For example, in the example shown in FIG. 1, it may be connected via a network to the storage unit 110 as an external device of a specific device 100.

[プログラム] [program]
図11は、特定装置による一連の処理を実行するための特定プログラムによる情報処理がコンピュータを用いて具体的に実現されることを示す図である。 Figure 11 is a diagram showing that a processing by a specific program for executing the series of processing by a particular device is concretely realized using a computer. 図11に例示するように、コンピュータ3000は、例えば、メモリ3010と、CPU(Central Processing Unit)3020と、ネットワークインタフェース3070とを有する。 As illustrated in FIG. 11, the computer 3000, for example, has a memory 3010, a CPU (Central Processing Unit) 3020, a network interface 3070. コンピュータ3000の各部はバス3100によって接続される。 Each part of the computer 3000 is connected by a bus 3100.

メモリ3010は、図11に例示するように、ROM3011及びRAM3012を含む。 Memory 3010, as illustrated in FIG. 11, including ROM3011 and RAM3012. ROM3011は、例えば、BIOS(Basic Input Output System)等のブートプログラムを記憶する。 ROM3011 stores, for example, a boot program, such as BIOS (Basic Input Output System).

ここで、図11に例示するように、ハードディスクドライブ3080は、例えば、OS3081、アプリケーションプログラム3082、プログラムモジュール3083、プログラムデータ3084を記憶する。 Here, as illustrated in FIG. 11, the hard disk drive 3080, for example, OS3081, application programs 3082, program modules 3083 and program data 3084. すなわち、開示の技術に係る特定プログラムは、コンピュータによって実行される指令が記述されたプログラムモジュール3083として、例えばハードディスクドライブ3080に記憶される。 That is, the specific program in accordance with the disclosed technology is as a program module 3083 to command to be executed is described by a computer, for example, are stored in the hard disk drive 3080. 具体的には、上記実施例で説明した記憶部110と同様の情報処理を実行する手順各々が記述されたプログラムモジュールが、ハードディスクドライブ3080に記憶される。 Specifically, program modules procedure each written to perform the same processing as the storage unit 110 described in the above embodiment is stored in the hard disk drive 3080.

また、上記実施例で説明した記憶部110に記憶されるデータのように、特定プログラムによる情報処理に用いられるデータは、プログラムデータ3084として、例えばハードディスクドライブ3080に記憶される。 Moreover, as the data stored in the storage unit 110 described in the above embodiments, data used for information processing by a particular program, as program data 3084, for example, are stored in the hard disk drive 3080. そして、CPU3020が、ハードディスクドライブ3080に記憶されたプログラムモジュール3083やプログラムデータ3084を必要に応じてRAM3012に読み出し、各種の手順を実行する。 Then, CPU3020 reads the RAM3012 optionally program modules 3083 and program data 3084 stored in the hard disk drive 3080, and executes various steps.

なお、特定プログラムに係るプログラムモジュール3083やプログラムデータ3084は、ハードディスクドライブ3080に記憶される場合に限られない。 The program modules 3083 and program data 3084 according to a specific program is not limited to the case of being stored in the hard disk drive 3080. 例えば、プログラムモジュール3083やプログラムデータ3084は、着脱可能な記憶媒体に記憶されても良い。 For example, program modules 3083 and program data 3084 may be stored on a removable storage medium. この場合、CPU3020は、ディスクドライブなどの着脱可能な記憶媒体を介してデータを読み出す。 In this case, CPU3020 reads data via a removable storage medium such as a disk drive. また、同様に、更新プログラムに係るプログラムモジュール3083やプログラムデータ3084は、ネットワーク(LAN(Local Area Network)、WAN(Wide Area Network)等)を介して接続された他のコンピュータに記憶されても良い。 Similarly, program modules 3083 and program data 3084 according to the update, the network (LAN (Local Area Network), WAN (Wide Area Network), etc.) may be stored in the other connected computers over a . この場合、CPU3020は、ネットワークインタフェースを介して他のコンピュータにアクセスすることで各種データを読み出す。 In this case, CPU3020 reads various data by via a network interface to access other computers.

[その他] [More]
なお、本実施例で説明した特定プログラムは、インターネットなどのネットワークを介して配布することができる。 Incidentally, the specific program described in this embodiment may be distributed via a network such as the Internet. また、特定プログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。 Also, certain program, a hard disk, a flexible disk (FD), CD-ROM, MO, is recorded on a computer-readable recording medium of DVD, etc. can be executed by being read from the recording medium by the computer.

100 特定装置110 記憶部111 暫定分岐情報格納テーブル112 暫定分岐ツリー情報テーブル120 制御部121 分岐命令解析部122 分岐関係解析部123 インポートアドレス格納場所特定部 100 identifying device 110 storage unit 111 provisionally branch information storage table 112 interim branch tree information table 120 the control unit 121 the branch instruction analyzing part 122 branch relationship analysis unit 123 imports address storage location detection part

Claims (5)

  1. パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所と、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出する抽出部と、 Extracted from the original code obtained by unpacking a packed program code, and the indirect branch point is an address indicating an interpretable places with at least indirect branch instruction, the direct branch point is interpretable places a direct branch instruction an extraction unit that,
    前記抽出部により抽出された箇所間の分岐関係を解析することで、前記間接分岐箇所が直接的又は間接的に分岐先となる前記直接分岐箇所を識別する識別部と、 By analyzing the branching relationship between points extracted by the extraction unit, an identification unit for identifying the direct branch locations the indirect branch portion is directly or indirectly branch destination,
    前記抽出部により抽出された箇所各々について分岐命令となる第1の確率を算出し、 該箇所各々について算出した第1の確率に基づいて、 前記間接分岐箇所の先頭と、該間接分岐箇所が分岐先となる前記識別部により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する算出部と、 Calculating a first probability of the branch instruction for the portion of each extracted by the extraction section, based on the first probability calculated for each relevant section, and the top of the indirect branch point, the indirect branch point is of the head of the direct branch point identified by the identifying unit as a branch destination, a calculation unit head of at least one portion calculates the second probability of the beginning of the machine instructions,
    前記算出部により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する特定部と を備えたことを特徴とする特定装置。 If the second probability calculated by the calculation section is equal to or greater than the threshold, and a specification unit for specifying a branch destination address storage location which the branch destination address indicating a branch destination from the indirect branch point is stored specific and wherein the.
  2. 前記分岐先アドレス格納場所が同一となる前記間接分岐箇所が複数抽出された場合に、前記算出部は、前記抽出部により抽出された箇所各々について前記第1の確率を算出し、該箇所各々について算出した該分岐命令となる該第1の確率に基づいて、前記分岐先アドレス格納場所が同一となる前記間接分岐箇所各々の先頭と、該間接分岐箇所各々のうちいずれかが分岐先となる前記識別部により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる前記第2の確率を算出することを特徴とする請求項に記載の特定装置。 When the indirect branch portion where the branch target address location is the same is more extraction, the calculating unit, the for the portion of each extracted by the extraction unit calculates the first probability, for each relevant section calculated based on the probability of the first to be the branch instruction, said the head of the indirect branch portions each branch target address location is the same, either one of the indirect branch portions each of which are to be branch destinations the of the head of the direct branch point identified by the identifying unit, certain of claim 1, wherein the calculating the second probability head of at least one point is the top of the machine language instructions apparatus.
  3. 前記算出部は、 各箇所について、前記抽出部により抽出された前記箇所各々に該当する前記第1の確率を用いて、 該当箇所を含む、他の命令との分岐元又は分岐先の分岐関係を示す分岐ツリー内に存在するすべての箇所が分岐命令とならない第3の確率を1から減算することで、前記第2の確率をそれぞれ算出することを特徴とする請求項1 または2に記載の特定装置。 The calculating unit, for each point, using the first probability corresponding to the locations respectively extracted by the extraction unit, including those portions, the branch source or branch destination of the branch relationships with other instructions that all locations in the branch tree shown is subtracted from 1 to third probability that do not branch instructions, certain of claim 1 or 2, characterized in that calculating the second probability, respectively apparatus.
  4. 特定装置で実行される特定方法であって、 A specific method to be executed by a particular device,
    前記特定装置の抽出部が、パックされたプログラムコードをアンパックすることで得られるオリジナルコードから、少なくとも間接分岐命令と解釈可能な箇所を示すアドレスである間接分岐箇所と、直接分岐命令と解釈可能な箇所である直接分岐箇所を抽出して記憶部に格納する抽出工程と、 The extraction of the specific device, from the original code obtained by unpacking a packed program code, interpretable and indirect branch point is an address indicating an interpretable places with at least indirect branch instruction, a direct branch instruction an extraction step of storing in the storage unit to extract the direct branch point is point,
    前記特定装置の識別部が、前記記憶部に記憶された箇所であって、前記抽出工程により抽出された箇所間の分岐関係を解析することで、前記間接分岐箇所が直接的又は間接的に分岐先となる前記直接分岐箇所を識別する識別工程と、 The identification of the particular device, a location stored in the storage unit, by analyzing the branching relationship between points extracted by the extraction step, the indirect branch point is directly or indirectly branched an identification step of identifying the direct branch portion which becomes earlier,
    前記特定装置の算出部が、前記記憶部に記憶された箇所であって、前記抽出工程により抽出された箇所各々について分岐命令となる第1の確率を算出し、 該箇所各々について算出した第1の確率に基づいて、 前記間接分岐箇所の先頭と、該間接分岐箇所が分岐先となる前記識別工程により識別された前記直接分岐箇所の先頭とのうち、少なくとも一つの箇所の先頭が機械語命令の先頭となる第2の確率を算出する算出工程と、 Calculator of the particular device, a location stored in the storage unit, calculates a first probability of the branch instruction for the portion of each extracted by the extraction step, the first calculated for each relevant section based on the first probability, and the top of the indirect branch point, the indirect branch point is out of the head of the direct branch point identified by the identifying step of the branch destination, the head of at least one portion is machine language a calculation step of calculating a second probability of first instruction,
    前記特定装置の特定部が、前記算出工程により算出された第2の確率が閾値以上である場合に、前記間接分岐箇所からの分岐先を示す分岐先アドレスが格納される分岐先アドレス格納場所を特定する特定工程と を含んだことを特徴とする特定方法。 Certain portion of said certain device, if the second probability calculated by the calculating step is equal to or greater than the threshold, the branch destination address storage location which the branch destination address indicating a branch destination from the indirect branch point is stored specific method characterized by including a specifying step of specifying.
  5. コンピュータを請求項1〜3のいずれか一つに記載の特定装置として機能させるための特定プログラム。 Specific program for functioning as a specific device according to the computer in any one of claims 1 to 3.
JP2011120293A 2011-05-30 2011-05-30 Specific device, the specific method and a specific program Active JP5571035B2 (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2011120293A JP5571035B2 (en) 2011-05-30 2011-05-30 Specific device, the specific method and a specific program

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2011120293A JP5571035B2 (en) 2011-05-30 2011-05-30 Specific device, the specific method and a specific program

Publications (2)

Publication Number Publication Date
JP2012248058A true JP2012248058A (en) 2012-12-13
JP5571035B2 true JP5571035B2 (en) 2014-08-13

Family

ID=47468437

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2011120293A Active JP5571035B2 (en) 2011-05-30 2011-05-30 Specific device, the specific method and a specific program

Country Status (1)

Country Link
JP (1) JP5571035B2 (en)

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5009186B2 (en) * 2008-02-12 2012-08-22 日本電信電話株式会社 Disassemble method and disassemble device
JP5133192B2 (en) * 2008-10-06 2013-01-30 日本電信電話株式会社 Extractor original code, extraction method, and extraction program
US8621626B2 (en) * 2009-05-01 2013-12-31 Mcafee, Inc. Detection of code execution exploits

Also Published As

Publication number Publication date Type
JP2012248058A (en) 2012-12-13 application

Similar Documents

Publication Publication Date Title
US20100153920A1 (en) Method for building and packaging sofware
US7530107B1 (en) Systems, methods and computer program products for string analysis with security labels for vulnerability detection
US20080263039A1 (en) Pattern-matching system
Bao et al. Byteweight: Learning to recognize functions in binary code
US20090307664A1 (en) Generating a transition system for use with model checking
US20080271147A1 (en) Pattern matching for spyware detection
US20110258210A1 (en) Dual dfa decomposition for large scale regular expression matching
US20110078674A1 (en) API Backward Compatibility Checking
US20110138369A1 (en) Feedback-Directed Call Graph Expansion
US8176559B2 (en) Obfuscated malware detection
Wendehals et al. Recognizing behavioral patterns atruntime using finite automata
CN102054149A (en) Method for extracting malicious code behavior characteristic
US20060130008A1 (en) Model-to-model transformation by kind
CN101266550A (en) Malicious code detection method
US20120131668A1 (en) Policy-Driven Detection And Verification Of Methods Such As Sanitizers And Validators
US20160357519A1 (en) Natural Language Engine for Coding and Debugging
US20110145785A1 (en) Automatic Optimization of String Allocations in a Computer Program
CN1983295A (en) Method and device for recognizing virus
US20110314454A1 (en) Incremental compositional dynamic test generation
US20080256518A1 (en) Source Code Checker, Source Code Checking Method, Program for Causing Execution of the Method, and Storage Medium for Storing the Program
US20080059875A1 (en) Method for optimizing character string output processing
US20090089753A1 (en) Software product line analyzer
Baumgartner Detecting causal chains in small-n data
US7971193B2 (en) Methods for performining cross module context-sensitive security analysis
Hegedus et al. Back-annotation of simulation traces with change-driven model transformations

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20130717

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20140326

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20140408

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20140603

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20140624

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20140625

R150 Certificate of patent (=grant) or registration of utility model

Ref document number: 5571035

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150