JP5009186B2 - 逆アセンブル方法および逆アセンブル装置 - Google Patents

逆アセンブル方法および逆アセンブル装置 Download PDF

Info

Publication number
JP5009186B2
JP5009186B2 JP2008030892A JP2008030892A JP5009186B2 JP 5009186 B2 JP5009186 B2 JP 5009186B2 JP 2008030892 A JP2008030892 A JP 2008030892A JP 2008030892 A JP2008030892 A JP 2008030892A JP 5009186 B2 JP5009186 B2 JP 5009186B2
Authority
JP
Japan
Prior art keywords
state
instruction
model parameter
data
unit
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
JP2008030892A
Other languages
English (en)
Other versions
JP2009193161A (ja
Inventor
誠 岩村
光恭 伊藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Nippon Telegraph and Telephone Corp
Original Assignee
Nippon Telegraph and Telephone Corp
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
Application filed by Nippon Telegraph and Telephone Corp filed Critical Nippon Telegraph and Telephone Corp
Priority to JP2008030892A priority Critical patent/JP5009186B2/ja
Publication of JP2009193161A publication Critical patent/JP2009193161A/ja
Application granted granted Critical
Publication of JP5009186B2 publication Critical patent/JP5009186B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)
  • Stored Programmes (AREA)

Description

この発明は、逆アセンブル方法および逆アセンブル装置に関する。
従来より、プログラム言語により記述されたプログラム(ソースコード)は、計算機において、当該プログラムからコンパイラなどによりプログラムモジュールが生成され、生成されたプログラムモジュールが、OS(Operating System)に備わるローダによって、メモリ上に配置されることにより、実行される。
ここで、プログラムのミス(バグ)を修正するなど、プログラムの保守管理においては、ソースコードを入手することが必要となるが、ソースコードの入手が困難な場合、計算機のメモリ上に配置されたプログラムモジュールからアセンブルコード(ニーモニック)、すなわちソースコードを取得して、ソースコードの内容を解析することが必要となる。なお、「プログラムからプログラムモジュールを生成する」ことは、「アセンブルする」と言われ、また、「プログラムモジュールからソースコードを取得する」ことは、「逆アセンブルする」と言われる。
特に、近年、社会的な問題となっているコンピュータウィルスについては、ソースコードの入手は困難であり、コンピュータウィルスの対策においては、プログラムモジュールから逆アセンブルによって迅速にソースコードを取得し、その内容を解析することが必要となる。
一方、プログラムモジュールには、命令部とデータ部とが混在しているため、逆アセンブルにおいては、従来、解析者が、自身の経験に基づいて、バイナリ値から命令部かデータ部かを判断したうえで、ソースコードを取得する必要があったが、近年、解析者の負担を軽減して、迅速にソースコードを取得するために、プログラムモジュールから命令部とデータ部とを自動的に識別する方法が開発されている。以下、プログラムモジュールから命令部とデータ部とを自動的に識別する代表的な3つの方法について説明する。
第一の方法は、非特許文献1において開示されているリニア・スイープ法である(非特許文献1参照)。リニア・スイープ法においては、与えられたプログラムモジュールを先頭から逆アセンブルしていき、命令部として解釈できない部分がデータ部として解釈される。そして、データとして解釈されたバイナリ値の次にあるバイナリ値から、再び、逆アセンブルが行なわれ、この処理が、終端まで繰り返され、命令部とデータ部とが識別される。
第二の方法は、リニア・スイープ法とともに非特許文献1において開示されているリカーシブ・トラバース法である。リカーシブ・トラバース法においては、プログラムモジュールのエントリポイントや、「よく見られる命令列」と一致する箇所が、命令列の先頭として解釈され、命令として解釈できない部分に到達するまで、逆アセンブルが進められる。ここで、逆アセンブルの最中に出現した分岐命令の分岐先が静的に決定できる場合は、当該分岐先が、新たな命令列の先頭として登録され、登録された新たな命令列の先頭から逆アセンブルが行なわれ、この処理が、命令列の先頭として認識される箇所がなくなるまで繰り返され、命令部とデータ部とが識別される。
第三の方法は、特許文献1において開示されているシミュレートによる命令列抽出方法である。シミュレートによる命令列抽出方法においては、プログラムモジュールのエントリポイントや、アドレス定数が指すアドレスから命令の実行内容のシミュレートが開始され、無条件分岐命令、もしくは無効定数が現れた時点で、シミュレートが停止される。シミュレート停止の要因が、無条件分岐命令が現れたことによる場合は、シミュレートの開始位置から停止位置までのバイナリ列が命令列(命令部)として判断され、シミュレート停止の要因が、無効命令が現れたことによる場合は、無効命令が現れた列がデータ部として判断される。また、シミュレート時に、条件付分岐命令が現れた場合は、分岐先が新たなシミュレート対象とされる。この処理が、シミュレート対象が無くなるまで繰り返され、命令部とデータ部とが識別される。
なお、上記した第一〜第三の方法によって、プログラムモジュールから命令部とデータ部とが自動的に識別されたのちは、プログラムモジュールから命令部とデータ部とが解析者の判断により識別された場合と同様に、識別された命令部に対してニーモニックが割り当てられて、ソースコートが取得される。
B. Schwarz, S. Debray and G. Andrews, ‘’Disassembly of executable code revisited. ", In Proc. IEEE 2002 Working Conference on Reverse Engineering (WCRE), pages 45-54, October 2002 特開平8−6814号公報
ところで、上記した従来の技術は、プログラムモジュールから命令部とデータ部とを必ずしも確実に識別することができないという問題点があった。
すなわち、リニア・スイープ法においては、データ部も命令として解釈可能であれば、命令部として逆アセンブルされてしまう。また、命令長が可変である場合には、ひとたび命令部の先頭を見誤ると、連鎖的に、別命令として逆アセンブルされてしまい、真の命令列が、異なる命令列として多数出力されてしまう。このようなことから、リニア・スイープ法においては、プログラムモジュールから命令部とデータ部とを必ずしも確実に識別することができないという問題点があった。
また、リカーシブ・トラバース法においては、最初の段階で、命令列の先頭を発見するために、「よく見られる命令列」をパターンとして持つ必要があるが、命令列の先頭における「あらゆるパターン」を作成することは困難である。これを補完するために、分岐命令の分岐先を新たに命令列の先頭として、再帰的に逆アセンブルを進めていくが、分岐命令の分岐先が動的に決まる場合は、その分岐先が命令列として解釈されなくなってしまう。このように、分岐命令の分岐先が動的に決まる場合は、C言語において関数ポインタを利用する場合をはじめとして、C++言語などでも、多く見られる。このようなことから、リカーシブ・トラバース法においても、プログラムモジュールから命令部とデータ部とを必ずしも確実に識別することができないという問題点があった。
また、シミュレートによる命令列抽出方法においては、プログラムモジュールのエントリポイントやアドレス定数から順にシミュレートしていくが、例えば、他のプログラムモジュールへ登録したコールバック関数や、UNIX(登録商標)におけるシグナルハンドラや、Microsoft Windows(登録商標)におけるウィンドウプロシージャなどが利用されている場合は、命令の実行内容が当該プログラムモジュールで完結しないため、シミュレートにより停止位置までたどり着くことは困難であり、シミュレートが開始されたバイナリ列は、命令列として解釈されない。このようなことから、シミュレートによる命令列抽出方法においても、プログラムモジュールから命令部とデータ部とを必ずしも確実に識別することができないという問題点があった。
そこで、この発明は、上述した従来技術の課題を解決するためになされたものであり、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる逆アセンブル方法および逆アセンブル装置を提供することを目的とする。
上述した課題を解決し、目的を達成するため、請求項1に係る発明は、プログラムモジュールを構成する複数のバイナリ値に対して命令部またはデータ部を割り当ててソースプログラムを取得する逆アセンブル方法であって、前記複数のバイナリ値を複数の単語として分割し、分割された複数の単語それぞれに前記命令部または前記データ部としてのいずれかの状態を割り当てる処理を、前記単語に、前記命令部または前記データ部いずれかの状態が割り当てられる確率は、当該単語の1つ前にある単語に割り当てられた状態によって決定され、かつ、前記単語が出現する出現確率は、当該単語に割り当てられた状態によって決定されると仮定した隠れマルコフモデルにおける最尤の状態系列を求める処理として、モデルパラメータを用いたビタービアルゴリズムにより実行する状態割り当て工程を含んだことを特徴とする。
また、請求項2に係る発明は、上記の発明において、複数のバイナリ値から分割された複数の単語それぞれに命令部とデータ部とが既に割り当てられたプログラムモジュールに対して、各単語間において、前記命令部または前記データ部から前記命令部または前記データ部への状態遷移それぞれの遷移回数から算出される状態遷移確率と、各状態における単語の出現回数から算出される出現確率とから、前記モデルパラメータを決定するモデルパラメータ決定工程をさらに含み、前記状態割り当て工程は、前記モデルパラメータ決定工程によって決定して学習された前記モデルパラメータを用いることを特徴とする。
また、請求項3に係る発明は、上記の発明において、前記モデルパラメータ決定工程は、逆アセンブルされていないプログラムモジュールと所定のモデルパラメータとを用いて、当該所定のモデルパラメータを更新したモデルパラメータを決定し、前記状態割り当て工程は、前記モデルパラメータ決定工程によって更新して決定された前記モデルパラメータを用いることを特徴とする。
また、請求項4に係る発明は、上記の発明において、前記命令部から前記データ部に遷移する場合は、当該命令部をデータ直前命令部とし、前記命令部から前記命令部に遷移する場合は、当該命令部を継続命令部とし、前記モデルパラメータ決定工程は、各単語間において、前記データ直前命令部、前記継続命令部または前記データ部から前記データ直前命令部、前記継続命令部または前記データ部への状態遷移それぞれの遷移回数から算出される状態遷移確率と、各状態における単語の出現回数から算出される出現確率とから、前記モデルパラメータを決定し、前記状態割り当て工程は、前記モデルパラメータ決定工程によって決定された前記モデルパラメータを用いて、複数のバイナリ値から分割された複数の単語それぞれに、前記データ直前命令部、前記継続命令部および前記データ部としてのいずれかの状態を割り当てることを特徴とする。
また、請求項5に係る発明は、プログラムモジュールを構成する複数のバイナリ値に対して命令部またはデータ部を割り当ててソースプログラムを取得する逆アセンブル装置であって、前記複数のバイナリ値を複数の単語として分割し、分割された複数の単語それぞれに前記命令部または前記データ部としてのいずれかの状態を割り当てる処理を、前記単語に、前記命令部または前記データ部いずれかの状態が割り当てられる確率は、当該単語の1つ前にある単語に割り当てられた状態によって決定され、かつ、前記単語が出現する出現確率は、当該単語に割り当てられた状態によって決定されると仮定した隠れマルコフモデルにおける最尤の状態系列を求める処理として、モデルパラメータを用いたビタービアルゴリズムにより実行する状態割り当て手段を備えたことを特徴とする。
請求項1または5の発明によれば、逆アセンブル処理を、隠れマルコフモデルにおける最尤の状態系列を求める処理として、モデルパラメータを用いたビタービアルゴリズムにより行なうので、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる。
また、請求項2の発明によれば、逆アセンブル済みのプログラムモジュールを学習用のデータとすることで、ビタービアルゴリズムに用いるモデルパラメータを決定することができ、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる。
また、請求項3の発明によれば、逆アセンブルされていないプログラムモジュールと適当なモデルパラメータとを学習用のデータとすることで、バウム・ウェルチアルゴリズムにより適切なモデルパラメータを決定して、ビタービアルゴリズムに用いることができ、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる。
また、請求項4の発明によれば、後方にデータが続く命令は、一般的に、無条件分岐であることが多いことに対応して逆アセンブルの精度を向上することができ、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる。
以下に添付図面を参照して、この発明に係る逆アセンブル方法および逆アセンブル装置の実施例を詳細に説明する。なお、以下では、この発明に係る逆アセンブル方法を適用して実行する逆アセンブル装置を実施例として説明する。
[用語の説明]
まず最初に、以下の実施例で用いる主要な用語を説明する。以下の実施例で用いる「ソースプログラム」とは、プログラム言語により記述されたプログラムのことであり、「プログラムモジュール」とは、「ソースプログラム」を計算機上で実行するために、当該「ソースプログラム」からコンパイラなどにより「アセンブル」されて生成されるものであり、複数のバイナリ値の列として表現されるものであり、「プログラムモジュール」には、実行される命令を規定する「命令部」と、「命令部」によって命令が実行される際に参照されるデータの場所を規定する「データ部」とが混在して存在する。
また、「逆アセンブル」とは、「プログラムモジュール」を構成する複数のバイナリ値を、複数の単語に分割し、分割された複数の単語それぞれに、「命令部」か「データ部」であるかのいずれかの状態であるかを示す「タグ」を割り振って、「命令部」としての「タグ」が割り当てられた単語の命令長に基づいて、ニーモニックを当てはめることにより、「プログラムモジュール」から「ソースプログラム」を取得することである。
また、以下で用いる記号について、図1を用いて説明する。図1は、本実施例で使用する記号を説明するための図である。
「入力バイナリ列:X」とは、「逆アセンブル」の対象となる「プログラムモジュール」において表現される複数のバイナリ値の列(バイナリ列)のことであり、本実施例では、図1の(A)に示すように、「逆アセンブル」の対象となる「プログラムモジュール」を構成するN個のバイナリ値それぞれは、「x1〜xN」として表される。
また、「単語列:W」とは、「入力バイナリ列:X」を1命令の「命令部」もしくは1データの「データ部」としての単語として分割したものであり、本実施例では、図1の(B)に示すように、「入力バイナリ列:X」を分割したM個の単語それぞれは、「w1〜wM」として表される。なお、「命令部」は、複数のバイナリ値から構成される場合もあるため、『「単語数:M」≦「入力バイナリ数:N」』となる。
また、「タグ列:T」とは、単語「w1〜wM」それぞれに対して、「命令部」か「データ部」であるかの「タグ」が割り当てられたものであり、本実施例では、図1の(C)に示すように、単語「w1〜wM」に対応付けてタグ「t1〜tM」として表される。
また、「命令タグ集合:I」は、「命令部」としての状態を表す「タグ」の集合であり、「データタグ集合:D」は、「データ部」としての状態を表す「タグ」の集合である。ここで、タグ「ti (1≦i≦M)」は、命令かデータのいずれかを表すため、図1の(D)に示すように、「ti」は、「命令タグ集合:I」あるいは「データタグ集合:D」のいずれかに属する。
[本実施例における逆アセンブル装置が実行する逆アセンブル方法]
続いて、図2を用いて、本実施例における逆アセンブル装置が実行する逆アセンブル方法の概念について説明する。図2は、本実施例における逆アセンブル装置が実行する逆アセンブル方法の概念について説明するための図である。
本実施例における逆アセンブル装置は、「逆アセンブル」の対象となる「プログラムモジュール」として与えられた「入力バイナリ列:X」を逆アセンブルすることを概要とし、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となることに主たる特徴がある。
ここで、「プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別する」ということは、「入力バイナリ列:X(バイナリ数:N)」を、「単語列:W(単語数:M)」として分割し、「タグ列:T(タグ数:M)」を割り当てた場合に、 図2の(A)に示すように、確率P(W,T|X)が最大となる「単語列:W」および「タグ列:T」を求めることと同義である。
また、「入力バイナリ列:X」を分割したものが、「単語列:W」であることから、図2の(B)に示すように、確率P(X|W)は、「1」となる。
さらに、ベイズの定理により、確率P(W,T|X)は、「P(X|W,T)P(W,T)/P(X)」と表されるが、P(X|W)が「1」であることから、P(X|W,T)も「1」となり、結果として、確率P(W,T|X)は、「P(W,T)/P(X)」となる(図2の(C)参照)。
また、確率P(X)、すなわち、「入力バイナリ列:X」が与えられる確率は、「単語列:W」および「タグ列:T」の決定とは関係のない独立した事象であるために、『確率P(W,T|X)が最大となる「単語列:W」および「タグ列:T」を求めること』は、『確率P(W,T)が最大となる「単語列:W」および「タグ列:T」を求めること』となり、従って、『確率「P(T)P(W|T)」が最大となる「単語列:W」および「タグ列:T」を求めること』となる(図2の(D)参照)。
ここで、「i番目」の単語「wi」にタグ「ti」が割り当てられる確率は、「(i−1)番目」の単語「wi-1」に割り振られているタグ「ti-1」によって決定されると仮定すると、確率P(T)は、条件付確率「P(ti|ti-1)」の累積として近似することができる(図2の(E)参照)。
また、「i番目」に単語「wi」が出現する確率(出現確率)は、単語「wi」に割り振られているタグ「ti」によって決定されると仮定すると、条件付確率P(W|T)は、条件付確率「P(wi|ti)」の累積として近似することができる(図2の(F)参照)。
図2の(A)〜(F)を用いて説明したことにより、『確率P(W,T|X)が最大となる「単語列:W」および「タグ列:T」を求めること』は、『「P(ti|ti-1)」と「P(wi|ti)」の積を、「i=1〜M」について累積し、その値が、が最大となる「単語列:W」および「タグ列:T」を求めること』となる。すなわち、「プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別する」ということは、図2の(G)の右辺に示す式として近似して表現することができる。
ここで、「プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別する」ということは、図2の(G)の右辺に示す式において、単語「wi」がとる値を「シンボル」、タグ「ti」がとる値を「状態」としてみなすと、「シンボル」は観測でき、「状態」は観測できない隠れマルコフモデルにおける最尤状態系列算出の問題とみなすことができる。
[本実施例における逆アセンブル装置の構成]
次に、図3〜9を用いて、本実施例における逆アセンブル装置、すなわち、隠れマルコフモデルにおける最尤状態系列算出の問題とみなして、プログラムモジュールから命令部とデータ部とを識別する逆アセンブル装置の構成を説明する。図3は、本実施例における逆アセンブル装置の構成を示すブロック図であり、図4〜6は、モデルパラメータ学習部および逆アセンブル部で前提となる隠れマルコフモデルの一例を説明するための図であり、図7は、モデルパラメータ学習部を説明するための図であり、図8および図9は、逆アセンブル部を説明するための図である。
図3に示すように、本実施例における逆アセンブル装置10は、プログラムモジュール入力部11と、逆アセンブル結果出力部12と、入出力制御I/F部13と、記憶部14と、処理部15とから構成される。
プログラムモジュール入力部11は、プログラムの解析者から、後述する「タグ付の学習用プログラムモジュール」、後述する「タグ無しの学習用プログラムモジュール」および後述する「逆アセンブル対象プログラムモジュール」を受け付け、キーボードやマウスなどで構成される。また、プログラムモジュール入力部11は、プログラムの解析者から、後述する「初期モデルパラメータ」も受け付ける。
逆アセンブル結果出力部12は、処理部15による処理結果、具体的には、「逆アセンブル結果」を出力し、モニタやスピーカーなどで構成される。
入出力制御I/F部13は、プログラムモジュール入力部11および逆アセンブル結果出力部12と、記憶部14および処理部15との間におけるデータ転送を制御する。
記憶部14は、処理部15による処理に用いるデータと、処理部15による処理結果を記憶し、特に本発明に密接に関連するものとしては、図3に示すように、モデルパラメータ記憶部14aを備える。
モデルパラメータ記憶部14aは、プログラムモジュール入力部11を介してプログラムの解析者から受け付けた「初期モデルパラメータ」(後述)や、後述するモデルパラメータ学習部15aが決定したモデルパラメータを記憶する。なお、これについては、後に詳述する。
処理部15は、入出力制御I/F部13から転送されたデータに基づき各種処理を実行し、特に本発明に密接に関連するものとしては、図3に示すように、モデルパラメータ学習部15aと、逆アセンブル部15bとを備える。ここで、モデルパラメータ学習部15aは、特許請求の範囲に記載の「モデルパラメータ決定工程」に対応し、逆アセンブル部15bは、同じく「状態割り当て工程」に対応する。
ここで、本実施例におけるモデルパラメータ学習部15aおよび逆アセンブル部15bは、図4に示す隠れマルコフモデルを前提とする。
すなわち、図4に示すように、本実施例においては、「命令タグ集合: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」が出力される確率(シンボル出力確率)を「bi(w)」とする。
このような隠れマルコフモデルの一例において、「データ状態:U」で出力されるシンボルをデータ1バイトとすると、これにより、「データ状態:U」におけるシンボル出力確率「bU(w)」において、「w」は、「0以上255以下の範囲にある整数」とすることができる。
これに対して、「命令タグ集合:I」に属する「状態i」において出力されるシンボルの長さ(シンボル長)は、1命令の長さとなる。ここで、複合命令セットコンピュータ(CISC:Complex Instruction Set Computer)の代表的なIntel社の「x86命令」は、「PREFIX(命令長:0〜4バイト)」、「OPCODE(命令長:1〜2バイト)」、「ModRM(命令長:0〜1バイト)」、「SIB(命令長:0〜1バイト)」、「DISPLACEMENT(命令長:0〜4バイト)」、「IMMEDIATE(命令長:0〜4バイト)」といった命令部から構成される。また、これらの命令部間の遷移パターンは、図5に示すパターンとなる。
ここで、図5に示す遷移パターンによって遷移する各命令部を「状態」とし、「命令開始状態」と「命令終了状態」とを除いた各状態(PREFIX,OPCODE,ModRM,SIB,DISPLACEMENT,IMMEDIATE)は、1バイトの命令部を出力するとする。
また、各命令部を構成する「単語w」を1バイトごとに分解した結果を、図6の(A)に示す記号によって表し、対応する命令部の種別を、図6の(B)に示す記号によって表すとする。
このとき、「命令部1バイトを出力する確率は、その時点での命令部の状態によってのみ決まる」と仮定し、さらに、「命令部の状態(データ直前命令もしくは継続命令状態)へ遷移する確率は、ひとつ前の命令部の状態によって決まる」と仮定すると、「命令タグ集合:I」に属する「状態i」におけるシンボルとしての「単語w」のシンボル出力確率「bi(w)」は、図6の(C)に示すように、近似することができる。
これにより、後述する逆アセンブル部15bが、隠れマルコフモデルにおける最尤状態系列算出の問題として、プログラムモジュールから命令部とデータ部とを識別するために用いるモデルパラメータは、命令部間の状態遷移確率と、命令部ごとの1バイトの出現確率のみとすることができる。この命令部に関するモデルパラメータは、「継続命令状態:S」と「データ直前命令状態:T」とで個別に持たせる。
図3に戻って、モデルパラメータ学習部15aは、後述する逆アセンブル部15bが、プログラムモジュールから命令部とデータ部とを識別するために用いるモデルパラメータを決定する。
ここで、モデルパラメータ学習部15aは、「入力バイナリ列」が分割された「単語列」に「タグ列」がすでに割り当てた逆アセンブル済みのバイナリデータとしての「タグ付の学習用プログラムモジュール」が、プログラムモジュール入力部11を介して、プログラムの解析者から入力された場合は、各状態(タグ)間での遷移回数および各状態(タグ)におけるシンボル出現回数を数え上げて確率値を算出することで、モデルパラメータを決定する。
具体的には、モデルパラメータ学習部15aは、「タグ付の学習用プログラムモジュール」から上述したように、「命令タグ集合:I」または「データタグ集合:D」のいずれかに属する「状態i」の初期確率「πi」(図6の(D)の(1)参照)と、「命令タグ集合:I」または「データタグ集合:D」のいずれかに属する「状態i」から「命令タグ集合:I」または「データタグ集合:D」のいずれかに属する「状態j」への遷移確率「aij」(図6の(D)の(2)参照)と、「状態i」が「データタグ集合:D」に属する場合のシンボル出力確率「bi(w)」(図6の(D)の(3)参照)と、「状態i」が「命令タグ集合:I」に属する場合のシンボル出力確率「bi(w)」(図6の(D)の(4)参照)とを算出するためのモデルパラメータである『命令部間の遷移確率「P(vi|vi-1)」および各命令部における1バイト値のシンボル出力確率「P(xi|vi)」』を、各状態(タグ)間での遷移回数および各状態(タグ)におけるシンボル出現回数を数え上げて算出する。
例えば、モデルパラメータ学習部15aは、「初期状態」、「継続命令状態:S」、「データ直前命令状態:T」および「データ状態:U」の間での遷移確率を、図7に示すように、算出する。なお、モデルパラメータ学習部15aは、「タグ付の学習用プログラムモジュール」を用いて決定したモデルパラメータを、モデルパラメータ記憶部14aに格納する。
また、モデルパラメータ学習部15aは、逆アセンブルされていない「タグ無しの学習用プログラムモジュール」が、プログラムモジュール入力部11を介して、プログラムの解析者から入力された場合は、「タグ無しの学習用プログラムモジュール」と、「タグ付の学習用プログラムモジュール」から決定され、既にモデルパラメータ記憶部14aにおいて格納されているモデルパラメータ、もしくは、プログラムの解析者がプログラムモジュール入力部11を介して入力し、既にモデルパラメータ記憶部14aにおいて格納されている「初期モデルパラメータ」とを用いて、バウム・ウェルチアルゴリズムによって新たなモデルパラメータを更新して決定する。なお、モデルパラメータ学習部15aは、「タグ無しの学習用プログラムモジュール」を用いて更新されたモデルパラメータも、モデルパラメータ記憶部14aに更新して格納する。
逆アセンブル部15bは、「逆アセンブル対象プログラムモジュール」が、プログラムモジュール入力部11を介して、プログラムの解析者から入力された場合、モデルパラメータ学習部15aによって決定され、モデルパラメータ記憶部14aに格納されたモデルパラメータを用いて、ビタービアルゴリズムにより、確率的に最も尤もらしいタグ配列(最尤タグ配列)を算出する。
例えば、「逆アセンブル対象プログラムモジュール」として、図8の(A)に示す16進数表記の「入力バイナリ列」が入力された場合、逆アセンブル部15bは、まず、「入力バイナリ列」を先頭から1バイトずつずらしながら、命令として解釈した場合の命令長を取得する。例えば、図8の(B)に示すように、「入力バイナリ列」が「55」である場合は、「命令長:1」を取得する。なお、これに対応するニーモニックとしては、「PUSH EBP」がある。
ここで、図9を用いて、逆アセンブル部15bが行なうビタービアルゴリズムを説明する。まず、図9の(A)に示す行列は、横軸に「入力バイナリ列」が配置され、縦軸に「継続命令状態:S」、「データ直前命令状態:T」および「データ状態:U」が配置された行列となっており、i行目j列目の要素には、「x1,...,xi-1」を出力し、「状態j」で「xi(状態jが命令状態の場合は、xiを命令の先頭としたときの命令全体)を出力する「累積最大確率値」が格納される。また、各要素には、「累積最大確率値」以外にも、「遷移元要素リスト」と「累積最大確率値算出の元になった遷移元要素」が格納される。
各要素における「遷移元要素リスト」は、図8の(B)に示す命令長と、図2もしくは図7に示す遷移状態相関関係を利用することで求めることができる。具体的には、図9の(A)に示す行列における1行目1列目(継続命令状態:S)の場合、「55」は、1バイト命令であり、遷移先は、2行目1列目(継続命令状態:S)と、2行目2列目(データ直前命令状態:T)となる。つまり、2行目1列目と、2行目2列目の「遷移元要素リスト」へ、1行目1列目を追加する。これを全要素について繰り返すことで、各要素における「遷移元要素リスト」を求めることができる。
また、すべての入力バイナリ列を出力し終えるときは、図9の(A)に示す行列における終了状態(出力確率は「1」)の列に遷移するとする。なお、例外として、1行目の要素の遷移元は、図9の(A)に示す行列における初期状態(累積最大確率値は「1」)としておく。
ここで、逆アセンブル部15bは、最尤タグ系列を取得するために用いる累積最大確率を以下に示す処理により算出する。例えば、i行目j列目の遷移元要素が、m行目n列目であり、m行目n列目の累積最大確率値を「Pmn」、「遷移元状態:n」から「現状態:j」に遷移する確率を「anj」とすると、「最大確率値算出の元となった遷移元要素」は、「Pmn×anj」が最大となる「m」および「n」を探すことで求められる(図9の(B)参照)。そして、「Pmn×anj」の最大値に、「xi」(現状態が命令状態の場合は、xiを命令の先頭としたときの命令全体)のシンボル出力確率を乗算した値を、i行目j列目の累積最大確率値として算出して、対応する要素に格納する。
また、逆アセンブル部15bは、「データ状態:U」における「xi」のシンボル出力確率を、図7に示すモデルパラメータから取得し、「継続命令状態:S」または「データ直前命令状態:T」におけるシンボル出力確率は、xiを命令の先頭とした場合の命令全体を、命令部に分割することで算出する。ただし、命令として解釈できない場合は、当該命令のシンボル出力確率は「0」とする。
例えば、命令全体のバイナリ列が、「B8,10,00,00,00」である場合、各バイト値に対応する命令部は、[OPCODE,IMMEDIATE,IMMEDIATE,IMMEDIATE,IMMEDIATE]となる。ここで、「命令開始状態」から「OPCODE」への遷移確率が「0.99」、「OPCODE」のシンボル「B8」のシンボル出力確率が「0.02」、「OPCODE」から「IMMEDIATE」への遷移確率が「0.40」、「IMMEDIATE」のシンボル「10」のシンボル出力確率が「0.01」、「IMMEDIATE」から「IMMEDIATE」への遷移確率が「0.30」、「IMMEDIATE」のシンボル「00」のシンボル出力確率が「0.10」、「IMMEDIATE」から「命令終了状態」への遷移確率が「0.70」であると、モデルパラメータ記憶部14aにおいて記憶されているとする。
その場合、逆アセンブル部15bは、「B8,10,00,00,00」としての命令全体のシンボル出力確率を、「(0.99×0.02)×(0.40×0.01)×(0.30×0.10)×(0.30×0.10)×(0.30×0.10)×0.70」として算出する。なお、逆アセンブル部15bは、入力バイナリ系列が長くなると、計算機上では、こうした確率計算が、アンダーフローを引き起こすため、実際には、確率値の対数の和によって累積最大確率の対数を算出する。
そして、逆アセンブル部15bは、上記した累積最大確率の算出過程を、1行目から最終状態まで繰り返していき、最終状態から「最大確率値算出の元となった遷移先要素」を辿っていき、各要素の列情報(つまり状態)を出力していくことで、最尤タグ系列を取得する。このようにして、逆アセンブル部15bによって取得された最尤タグ系列は、各バイナリ値が、命令部かデータ部かのどちらかを示している。
そして、逆アセンブル部15bは、取得した最尤タグ系列に対して、例えば、図8の(B)に示すニーモニックを参照して、タグそれぞれにニーモニックを割り当てて、ソースプログラムとして出力する。あるいは、逆アセンブル部15bは、この最尤タグ系列を、タグ付の逆アセンブル結果として、逆アセンブル結果出力部12が備えるモニタにおいて出力し、タグ付の逆アセンブル結果としての最尤タグ系列を参照したプログラムの解析者が、タグそれぞれにニーモニックを割り当てて、ソースプログラムを取得する場合であってもよい。
[本実施例におけるモデルパラメータ学習部によるモデルパラメータ決定処理の手順]
次に、図10を用いて、本実施例におけるモデルパラメータ学習部15aによるモデルパラメータ決定処理を説明する。図10は、モデルパラメータ学習部によるモデルパラメータ決定処理を説明するための図である。
図10に示すように、まず、本実施例における逆アセンブル装置10を構成するモデルパラメータ学習部15aは、プログラムの解析者から「タグ付の学習用プログラムモジュール」を、プログラムモジュール入力部11を介して受け付けると(ステップS1001肯定)、各命令の出力頻度、各データの出力頻度およびタグ間の状態遷移頻度に基づいて、出力確率(シンボル出力確率)および状態の遷移確率を算出する(ステップS1002)。
そして、モデルパラメータ学習部15aは、算出した出力確率(シンボル出力確率)および状態の遷移確率を、モデルパラメータとして、モデルパラメータ記憶部14aに格納し(ステップS1003)、処理を終了する。
[本実施例におけるモデルパラメータ学習部によるモデルパラメータ更新処理の手順]
次に、図11を用いて、本実施例におけるモデルパラメータ学習部15aによるモデルパラメータ更新処理を説明する。図11は、モデルパラメータ学習部によるモデルパラメータ更新処理を説明するための図である。
図11に示すように、まず、本実施例における逆アセンブル装置10を構成するモデルパラメータ学習部15aは、プログラムの解析者から「タグ無しの学習用プログラムモジュール」を、プログラムモジュール入力部11を介して受け付けると(ステップS1101肯定)、「タグ付の学習用プログラムモジュール」から決定された「初期モデルパラメータ」、もしくは、プログラムの解析者が入力した「初期モデルパラメータ」とを用いて、バウム・ウェルチアルゴリズムによって「初期モデルパラメータ」を更新する(ステップS1102)。
そして、モデルパラメータ学習部15aは、更新したモデルパラメータをモデルパラメータ記憶部14aに格納し(ステップS1103)、処理を終了する。
[本実施例における逆アセンブル部による処理の手順]
次に、図12を用いて、本実施例における逆アセンブル部15bによる処理を説明する。図12は、逆アセンブル部による処理を説明するための図である。
図12に示すように、まず、本実施例における逆アセンブル装置10を構成する逆アセンブル部15bは、プログラムの解析者から「逆アセンブル対象プログラムモジュール」を、プログラムモジュール入力部11を介して受け付けると(ステップS1201肯定)、モデルパラメータ記憶部14aが記憶するモデルパラメータを用いて、ビタービアルゴリズムにより最尤タグ配列を算出する(ステップS1202)。
そして、逆アセンブル部15bは、算出した最尤タグ配列をニーモニックに変換して、変換結果を逆アセンブル結果出力部12が備えるモニタにて出力し(ステップS1203)、処理を終了する。
[本実施例の効果]
上記したように、本実施例によれば、学習用データとして、「タグ付の学習用プログラムモジュール」や、「初期モデルパラメータ」および「タグ無しの学習用プログラムモジュール」から決定された適切なモデルパラメータを用いたビタービアルゴリズムにより、プログラムモジュールから最尤タグ配列を取得するので、上記した主たる特徴の通り、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる。
また、本実施例によれば、命令部(命令状態)を「データ直前命令状態」と「継続命令状態」とに分割したので、後方にデータが続く命令は、一般的に、無条件分岐であることが多いことに対応して逆アセンブルの精度を向上することができ、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することが可能となる。
なお、図示した各装置の各構成要素は機能概念的なものであり、必ずしも物理的に図示の如く構成されていることを要しない。すなわち、各装置の分散・統合の具体的形態は図示のものに限られず、その全部または一部を、各種の負荷や使用状況などに応じて、任意の単位で機能的または物理的に分散・統合して構成することができる。さらに、各装置にて行なわれる各処理機能は、その全部または任意の一部が、CPUおよび当該CPUにて解析実行されるプログラムにて実現され、あるいは、ワイヤードロジックによるハードウェアとして実現され得る。
なお、本実施例で説明した逆アセンブル方法は、あらかじめ用意されたプログラムをパーソナルコンピュータやワークステーションなどのコンピュータで実行することによって実現することができる。このプログラムは、インターネットなどのネットワークを介して配布することができる。また、このプログラムは、ハードディスク、フレキシブルディスク(FD)、CD−ROM、MO、DVDなどのコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行することもできる。
以上のように、本発明に係る逆アセンブル方法および逆アセンブル装置は、プログラムモジュールを構成する複数のバイナリ値に対して命令部またはデータ部を割り当ててソースプログラムを取得する場合に有用であり、特に、プログラムモジュールから命令部とデータ部とを確率的に最も高い精度で識別することに適する。
本実施例で使用する記号を説明するための図である。 本実施例における逆アセンブル装置が実行する逆アセンブル方法の概念について説明するための図である。 本実施例における逆アセンブル装置の構成を示すブロック図である。 モデルパラメータ学習部および逆アセンブル部で前提となる隠れマルコフモデルの一例を説明するための図である。 モデルパラメータ学習部および逆アセンブル部で前提となる隠れマルコフモデルの一例を説明するための図である。 モデルパラメータ学習部および逆アセンブル部で前提となる隠れマルコフモデルの一例を説明するための図である。 モデルパラメータ学習部を説明するための図である。 逆アセンブル部を説明するための図である。 逆アセンブル部を説明するための図である。 モデルパラメータ学習部によるモデルパラメータ決定処理を説明するための図である。 モデルパラメータ学習部によるモデルパラメータ更新処理を説明するための図である。 逆アセンブル部による処理を説明するための図である。
符号の説明
10 逆アセンブル装置
11 プログラムモジュール入力部
12 逆アセンブル結果出力部
13 入出力制御I/F部
14 記憶部
14a モデルパラメータ記憶部
15 処理部
15a モデルパラメータ学習部
15b 逆アセンブル部

Claims (5)

  1. プログラムモジュールを構成する複数のバイナリ値に対して命令部またはデータ部を割り当ててソースプログラムを取得する逆アセンブル方法であって、
    前記複数のバイナリ値を複数の単語として分割し、分割された複数の単語それぞれに前記命令部または前記データ部としてのいずれかの状態を割り当てる処理を、前記単語に、前記命令部または前記データ部いずれかの状態が割り当てられる確率は、当該単語の1つ前にある単語に割り当てられた状態によって決定され、かつ、前記単語が出現する出現確率は、当該単語に割り当てられた状態によって決定されると仮定した隠れマルコフモデルにおける最尤の状態系列を求める処理として、モデルパラメータを用いたビタービアルゴリズムにより実行する状態割り当て工程を
    含んだことを特徴とする逆アセンブル方法。
  2. 複数のバイナリ値から分割された複数の単語それぞれに命令部とデータ部とが既に割り当てられたプログラムモジュールに対して、各単語間において、前記命令部または前記データ部から前記命令部または前記データ部への状態遷移それぞれの遷移回数から算出される状態遷移確率と、各状態における単語の出現回数から算出される出現確率とから、前記モデルパラメータを決定するモデルパラメータ決定工程をさらに含み、
    前記状態割り当て工程は、前記モデルパラメータ決定工程によって決定して学習された前記モデルパラメータを用いることを特徴とする請求項1に記載の逆アセンブル方法。
  3. 前記モデルパラメータ決定工程は、逆アセンブルされていないプログラムモジュールと所定のモデルパラメータとを用いて、当該所定のモデルパラメータを更新したモデルパラメータを決定し、
    前記状態割り当て工程は、前記モデルパラメータ決定工程によって更新して決定された前記モデルパラメータを用いることを特徴とする請求項2に記載の逆アセンブル方法。
  4. 前記命令部から前記データ部に遷移する場合は、当該命令部をデータ直前命令部とし、前記命令部から前記命令部に遷移する場合は、当該命令部を継続命令部とし、
    前記モデルパラメータ決定工程は、各単語間において、前記データ直前命令部、前記継続命令部または前記データ部から前記データ直前命令部、前記継続命令部または前記データ部への状態遷移それぞれの遷移回数から算出される状態遷移確率と、各状態における単語の出現回数から算出される出現確率とから、前記モデルパラメータを決定し、
    前記状態割り当て工程は、前記モデルパラメータ決定工程によって決定された前記モデルパラメータを用いて、複数のバイナリ値から分割された複数の単語それぞれに、前記データ直前命令部、前記継続命令部および前記データ部としてのいずれかの状態を割り当てることを特徴とする請求項3に記載の逆アセンブル方法。
  5. プログラムモジュールを構成する複数のバイナリ値に対して命令部またはデータ部を割り当ててソースプログラムを取得する逆アセンブル装置であって、
    前記複数のバイナリ値を複数の単語として分割し、分割された複数の単語それぞれに前記命令部または前記データ部としてのいずれかの状態を割り当てる処理を、前記単語に、前記命令部または前記データ部いずれかの状態が割り当てられる確率は、当該単語の1つ前にある単語に割り当てられた状態によって決定され、かつ、前記単語が出現する出現確率は、当該単語に割り当てられた状態によって決定されると仮定した隠れマルコフモデルにおける最尤の状態系列を求める処理として、モデルパラメータを用いたビタービアルゴリズムにより実行する状態割り当て手段を
    備えたことを特徴とする逆アセンブル装置。
JP2008030892A 2008-02-12 2008-02-12 逆アセンブル方法および逆アセンブル装置 Active JP5009186B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008030892A JP5009186B2 (ja) 2008-02-12 2008-02-12 逆アセンブル方法および逆アセンブル装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008030892A JP5009186B2 (ja) 2008-02-12 2008-02-12 逆アセンブル方法および逆アセンブル装置

Publications (2)

Publication Number Publication Date
JP2009193161A JP2009193161A (ja) 2009-08-27
JP5009186B2 true JP5009186B2 (ja) 2012-08-22

Family

ID=41075143

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008030892A Active JP5009186B2 (ja) 2008-02-12 2008-02-12 逆アセンブル方法および逆アセンブル装置

Country Status (1)

Country Link
JP (1) JP5009186B2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11609998B2 (en) 2017-06-14 2023-03-21 Nippon Telegraph And Telephone Corporation Device, method, and computer program for supporting specification

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5571035B2 (ja) * 2011-05-30 2014-08-13 日本電信電話株式会社 特定装置、特定方法及び特定プログラム
EP3330879B1 (en) 2015-10-09 2019-12-18 Nippon Telegraph And Telephone Corporation Vulnerability discovering device, vulnerability discovering method, and vulnerability discovering program

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH086814A (ja) * 1994-06-17 1996-01-12 Fujitsu Ltd 命令列抽出処理装置
CA2585145A1 (en) * 2004-11-04 2007-01-04 Telcordia Technologies, Inc. Detecting exploit code in network flows

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11609998B2 (en) 2017-06-14 2023-03-21 Nippon Telegraph And Telephone Corporation Device, method, and computer program for supporting specification

Also Published As

Publication number Publication date
JP2009193161A (ja) 2009-08-27

Similar Documents

Publication Publication Date Title
US11567759B1 (en) Generating source code from binary files
US10171482B2 (en) Pre-processing before precise pattern matching
US9430197B2 (en) Compiler, compile method and compile apparatus
JP5133192B2 (ja) オリジナルコードの抽出装置、抽出方法、および抽出プログラム
US11210073B1 (en) Translating text encodings of machine learning models to executable code
KR20200031150A (ko) 데이터 처리장치의 데이터 항목들 내의 성분들의 계수
JP5009186B2 (ja) 逆アセンブル方法および逆アセンブル装置
JP2015169951A (ja) 情報処理装置、情報処理方法、およびプログラム
CN106055343A (zh) 一种基于程序演进模型的目标代码逆向工程系统
KR20200097218A (ko) Gcn 기반의 어셈블리 코드 학습 장치 및 방법과 이를 이용한 보안 약점 탐지 장치 및 방법
JP5301411B2 (ja) 類似性算出装置、類似性算出方法、類似性算出プログラム、及び類似性解析装置
US11803779B2 (en) Constructing an ensemble model from randomly selected base learners
JP6734479B2 (ja) 特定支援装置、特定支援方法及び特定支援プログラム
Verwimp et al. TF-LM: tensorflow-based language modeling toolkit
JPWO2020235024A1 (ja) 情報学習装置、情報処理装置、情報学習方法、情報処理方法及びプログラム
JP2012098905A (ja) 文字認識装置、文字認識方法及びプログラム
JP6588933B2 (ja) 言語モデル構築装置、その方法、及びプログラム
JP5932707B2 (ja) 計算機、プログラム及びデータ生成方法
JP6928346B2 (ja) 予測装置、予測方法および予測プログラム
RU2817560C1 (ru) Аппаратно-ускоренное генерирование k-мерного графа
JP5571035B2 (ja) 特定装置、特定方法及び特定プログラム
CN113821211B (zh) 命令解析方法、装置、存储介质和计算机设备
US20060047734A1 (en) Fast conversion of integer to float using table lookup
CN115129320B (zh) 一种基于循环不变式的间接跳转目标地址识别方法及装置
JP2006178013A (ja) データベース作成装置及び方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100108

RD02 Notification of acceptance of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7422

Effective date: 20110520

RD04 Notification of resignation of power of attorney

Free format text: JAPANESE INTERMEDIATE CODE: A7424

Effective date: 20110520

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20120515

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: 20120529

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20120530

R150 Certificate of patent or registration of utility model

Ref document number: 5009186

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

Free format text: JAPANESE INTERMEDIATE CODE: R150

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20150608

Year of fee payment: 3

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350