JP6586143B2 - ファイルの実行をエミュレートするシステム及び方法 - Google Patents

ファイルの実行をエミュレートするシステム及び方法 Download PDF

Info

Publication number
JP6586143B2
JP6586143B2 JP2017201842A JP2017201842A JP6586143B2 JP 6586143 B2 JP6586143 B2 JP 6586143B2 JP 2017201842 A JP2017201842 A JP 2017201842A JP 2017201842 A JP2017201842 A JP 2017201842A JP 6586143 B2 JP6586143 B2 JP 6586143B2
Authority
JP
Japan
Prior art keywords
file
execution
instruction set
instructions
emulation
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
JP2017201842A
Other languages
English (en)
Other versions
JP2019036278A (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.)
Kaspersky Lab AO
Original Assignee
Kaspersky Lab AO
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 Kaspersky Lab AO filed Critical Kaspersky Lab AO
Publication of JP2019036278A publication Critical patent/JP2019036278A/ja
Application granted granted Critical
Publication of JP6586143B2 publication Critical patent/JP6586143B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45508Runtime interpretation or emulation, e g. emulator loops, bytecode interpretation
    • G06F9/45512Command shells
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/362Software debugging
    • G06F11/3636Software debugging by tracing the execution of the program
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/566Dynamic detection, i.e. detection performed at run-time, e.g. emulation, suspicious activities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/445Program loading or initiating
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Quality & Reliability (AREA)
  • Debugging And Monitoring (AREA)

Description

本願は、一般にはファイル実行のエミュレーションの分野に関し、具体的には、ファイルの実行をエミュレートするシステム及び方法に関する。
現在、実行可能ファイルの開発には様々な手段がある。ソフトウェアの開発中、特に実行可能ファイルの作成時にはしばしば、中間コード形式の命令(共通中間言語(CIL)命令等)やスクリプト形式の命令など、機械語命令とは異なる命令がそのファイルに置かれることがある。
ファイル(移植可能な実行可能ファイル(Portable Executable files:PEファイル)等)の実行をエミュレートする場合、関数呼び出しのログを可能な限り完全に作成することが重要である。このようなログの完全性は、実行をエミュレートする際の悪質なファイルの検出品質(検出率等)に特に影響する。実行可能ファイルが動的ライブラリのデータ型又は関数型を使用する場合、エミュレータはオペレーティングシステム(OS)ローダのいくつかのステップを実行する。例えば、Windows OS用の実行可能ファイルの場合、エミュレータは、IAT(インポートアドレステーブル:Import Address Table)における実行可能ファイルのイメージのセクションの変更を行う。ここで、セクションは、ファイルの実行中に呼び出す必要のある(、したがって実行のエミュレーション中にも呼び出す必要のある)関数のアドレスの固定に関するものである。エミュレータは、IATに入力された情報を、関数のアドレスとその名前との対応関係として保存する。したがって、ファイルのエミュレーション中に特定の関数が呼び出されると、エミュレータは特定のライブラリ関数が呼び出されたと判断し、関数呼び出しログを適切に変更する。
しかし、機械語命令とは異なる命令を含むファイルの実行をエミュレートしている間は、機械語命令とは異なる方法で形式化された関数に関する情報がIATに全く保存されない。したがって、機械語命令とは異なる方法で形式された機能も含め、命令の記録(ログにおける機能呼び出しの記録)に問題が生じる。
したがって、ファイルの実行をエミュレートするためのシステム及び方法が開示され、より詳細には、機械語命令とは異なる命令を含むファイルの実行をエミュレートするためのシステム及び方法が開示される。
1つの例示的な態様において、ファイルの実行をエミュレートするシステム及び方法が提供される。方法は、前記ファイルから読み取られた命令からなるファイルのイメージを生成するステップと、前記ファイルから読み取られた部分の少なくとも1つの既知の命令セットを検出するステップとを備える。方法はまた、前記生成されたファイルのイメージの、前記少なくとも1つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入するステップを備える。方法は、前記生成されたファイルのイメージの命令の実行をエミュレートすることで前記ファイルの実行をエミュレートするとともに、前記少なくとも1つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加するステップを備える。
他の態様によれば、ファイルのイメージは、方法は、前記ファイルに含まれるプログラムコードの命令と、前記プログラムコードのエントリーポイントに関するサービス情報とを含む。
他の態様によれば、前記ファイルの実行をエミュレートするステップは、前記挿入されたブレークポイントに到達したことに応じて、前記既知の命令セットの実行のエミュレーションを示すレコードを前記エミュレーションログに追加するステップと、前記挿入されたブレークポイントに到達したことに応じて、前記少なくとも1つの既知の命令セットの実行をエミュレートすることは控え、記少なくとも1つの既知の命令セットに対応する代替の命令セットの実行をエミュレートするステップとを備える。
他の態様によれば、前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む。
他の態様によれば、前記少なくとも1つの既知の命令セットは、前記ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含み、前記アンチエミュレーション命令に対応する前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記ファイルの実行のエミュレーションを妨げないよう構成される。
他の態様によれば、前記少なくとも1つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む。
他の態様によれば、前記少なくとも1つの既知の命令セットは、既知の命令セットのデータベースの1つ以上のシグネチャを使用して検出される。
他の態様によれば、方法は、前記ファイルの命令のインタプリタのライブラリファイルのイメージを生成するステップを備える。
他の例示的な態様によれば、本願に開示される方法の何れかを実行するためのコンピュータ実行可能命令を含む非一時的コンピュータ可読媒体が提供される。
上述した実施形態の簡単な概要は、本発明の基本的な理解を提供するのに役立つ。この説明は、全ての考えられる態様の詳細な概要ではなく、全ての態様の鍵となるものや重要な要素を特定することを意図していないし、本発明の全ての態様を描写することも意図していない。その唯一の目的は、前置きとして、1つ又は複数の態様を表し、その後、本発明のより詳細な説明を導くものである。これを達成するため、本発明の1つ又は複数の態様が説明され、特許請求の範囲において主張される。
添付の図面は、本明細書に組み込まれ、本明細書の一部を構成し、本開示の1つ以上の例示的な態様を示し、詳細な説明とともに、それらの原理および実施形態を説明する役割を果たす。
図1は、例示的な態様に係る、ファイルの実行をエミュレートするシステムを示すブロック図である。
図2Aは、例示的な態様に係る、ファイルの実行をエミュレートする方法を示すフローチャートである。
図2Bは、他の例示的な態様に係る、ファイルの実行をエミュレートする他の方法を示すフローチャートである。
図3は、例示的な態様に係る、本願のシステム及び方法によって実装される汎用コンピュータシステムのブロック図である。
本明細書では、ファイルの実行をエミュレートするシステム、方法及びコンピュータプログラム製品の例示的な態様が説明される。当業者であれば、以下の説明は例示的なものにすぎず、いかなる限定をも意図するものではないことを理解するであろう。本開示の恩恵を受ける当業者であれば、異なる態様が容易に示唆されるであろう。添付の図面に例示される例示的な態様の実装の詳細が以下に参照される。図面全体及び以下の記載に亘って、同じ参照符号が可能な限り使用され、同一の符号は同一又は類似の対象を参照する。
本願では、様々な態様の説明のため、いくつかの用語が導入される。
エミュレーションは、あるデバイスの機能を、他のデバイス又は他のコンピュータのデバイスによって模倣するものである。模擬する側のデバイスは、同一のデータを受け取り、同一のプログラムを実行し、模擬される側のデバイスと同一の結果を達成する。
ファイルの実行をエミュレートするとは、他のデバイス又は他のコンピュータのデバイスによって、あるデバイス上のファイルの実行を模倣することである。
命令の実行をエミュレートするとは、あるデバイス上の命令の実行を、別のデバイス又は他のコンピュータのデバイスによって模倣することである。命令とは、実行可能なコードの命令を意味し、特に、実行可能なファイルに含まれるものであっても良く、実行可能なファイルの形式のものであっても良い。
ファイルのイメージは、その実行をエミュレートする過程でのファイルの表現(representation)、具体的には、少なくともその実行(及びその実行のエミュレート)に必要な完全性を備えた、ファイルを記述するデータのセットである。ファイルの実行をエミュレートする場合、エミュレータ(ハードウェア又はソフトウェア)は、当該ファイルのイメージの実行をエミュレートする。ファイル命令は、機械語命令形式及び中間コード形式(例えば、MSIL(Microsoft Intermediate Language)やPコード(portable code))の両方、又はスクリプトにより形式化される。それらの命令はそれぞれ、機械語命令、中間コード命令及びスクリプト命令である。
本願において、ファイルの実行をエミュレートするシステムの手段とは、実デバイス、システム、コンポーネント、ハードウェアにより実現されるコンポーネントのグループ(例えば、統合マイクロ回路(特定用途向け集積回路、ASIC)又はプログラマブルゲートアレイ(フィールドプログラマブルゲートアレイ、FPGA))を意味する。また、本願のファイルの実行をエミュレートするシステムの手段とは、例えば、マイクロプロセッサシステム及びソフトウェア命令セットのようなソフトウェアとハードウェアを組み合わせた形態や、ニューロモルフィックチップ(ニューロシナプティックチップ)等をも意味する。システムのこのような手段の機能は、ハードウェアのみによっても実現され得るが、組み合わせの形態でも実現することができる。つまり、システムの手段のいくつかの機能をソフトウェアにより実現し、他のいくつかの機能をハードウェアにより実現しても良い。いくつかの様態では、手段の一部又は全部を(図3に記載されているような)汎用コンピュータのプロセッサ上で実施することができる。システムの構成要素は、単一のコンピューティングデバイスだけで実現しても良く、いくつかの相互接続されたコンピューティングデバイスに分散されていても良い。
図1は、例示的な態様によるファイルの実行をエミュレートするシステム100を示すブロック図である。システム100は、エミュレーションモジュール120と、解析モジュール121と、エミュレーションログ130と、既知の命令セット及び/又は既知の機能を格納するよう構成されたデータベース125と、を備える。エミュレーションモジュール120は、解析モジュール121及びエミュレーションログ130に通信可能に接続される。解析モジュール121は、既知の命令セットのデータベース125に通信可能に接続される。一態様では、解析モジュール121はエミュレーションモジュール120の一部である。
エミュレーションモジュール120は、ファイル110の実行をエミュレートするよう構成される。一般的なケースでは、ファイル110は、命令を含むファイルである。一態様では、このファイルはPE(portable executable)フォーマットの実行可能ファイルであり、ファイルに含まれる命令は機械語命令である。ここで、この命令は、x86ファミリのプロセッサ、x86-64ファミリのプロセッサ又はこれらのファミリのプロセッサ用の命令を実行可能な他の任意のプロセッサにより実行可能なものである。さらに別の態様では、ファイル110は、他のタイプの命令及び異なるタイプの命令(例えば、機械語命令及び中間コード命令又はスクリプト、時にシナリオとも呼ばれる)を含む。ファイル110の実行のエミュレーションの間、エミュレーションモジュール120は1つ又は複数のエミュレーションログ130を作成する。エミュレーションログ130は、実行中に既知の命令セット(例えば、任意のWinAPI関数の命令)がエミュレートされたことを記述したレコードを含む。これらのレコードは、対応する命令セットの実行のエミュレーションの開始前又は実行のエミュレーション後のいずれかに、エミュレーションログ130に格納される。
ファイル110は、データ記憶装置に保存された任意のファイルであっても良い。一態様では、このファイル110は、コンピューティングデバイス(コンピュータ等)のデータ記憶装置に保存される。データ記憶装置には、ファイルの実行をエミュレートするシステムのコンポーネントも存在する。一態様では、このファイル110は、ヒューリスティックルールを用いたアンチウィルススキャンが実行されたファイルとされる。ここで、ヒューリスティックルールは、ファイル110の実行のエミュレーションの結果、特にエミュレーションログ130に適用される。このようなアンチウィルススキャンの結果、ファイル110に悪意があると分かると、当該ファイル110はデータ記憶装置から除去されるか、又は隔離された状態にされる。したがって、データ記憶装置上にファイル110が保持されたコンピューティングデバイスのセキュリティの実施という、他の技術的結果を達成することができる。
ファイル110の実行のエミュレーション(上述したように、これは1つのデバイス上のファイル110の実行を別のデバイス、つまりエミュレーションモジュール120により模倣することである)を行うため、エミュレーションモジュール120はファイル110のイメージを作成する。ファイルのイメージは、ファイル110の実行のエミュレート中にエミュレーションモジュール120によって使用されるファイルの表現である。
一態様では、ファイル110のイメージは、その実行のエミュレートに使用される情報を含む、データのセット(1つ又は複数のデータ構造の形式で表現できるもの)である。ファイル110の実行のエミュレートに使用される情報は、サービス情報と、ファイル110の命令(ファイル110に含まれるプログラムコードの命令)とを含む。サービス情報の例には、ファイル110のヘッダのエントリーポイント(相対仮想アドレス、RVAなど)や他のデータの情報、IAT(インポートアドレステーブル)の内容、ファイル110のセクションの位置情報等が含まれる。一態様では、サービス情報は、エントリーポイントから開始される命令(例えば、100などの命令の数によって、又は、ファイル110の部分のサイズと等しいバイト(byte)等の累積的な量によって範囲が規定される命令)のセットでもある。一態様では、エミュレーションモジュール120は、ファイル110のイメージを作成するため、オペレーションシステム(OS)でプロセスを生成する際に、OSのローダの機能を模倣する。この場合、ファイル110の表現として生成されるファイル110のイメージは、OSによってこのファイル110から作成されるプロセスのアドレス空間における表現と同様のファイル110の表現である。
エミュレーションモジュール120は、ファイル110のイメージを作成するため、ファイル110からサービス情報を読み取る。ファイル110のイメージの作成には、ファイル110から読み取り、ファイル110のイメージにファイル110の命令を加えるステップも含まれる。一態様では、エミュレーションモジュール120は、ファイル110から命令を読み取り、これをファイル110のイメージの、一定サイズの部分105に追加する。
一態様では、部分105のサイズには、一度にファイル110の全ての命令を読み取れるサイズが選択される。他の態様では、ファイル110の命令は必要に応じて複数の部分105のために複数回読み取られる。
一態様では、ファイル110の次の部分105を読み取る必要性は、(ファイル110のイメージ又は別のファイルのイメージの)命令の実行のエミュレーションの際、エミュレーションモジュール120がそのファイル110のイメージに存在しない命令又はデータ(すなわち、ファイル110からまだ読み取られていない命令)にアクセスする場合、例えば、条件付き分岐命令を実行した結果としてアクセスする場合に生じる。一態様では、そのような部分105のサイズは4KBである。さらに別の態様では、そのような部分105のサイズは、ファイル110が保持されるデータ記憶装置上のクラスタのサイズに等しいとみなされる。なお、読み取られていない命令のファイル110のイメージ(ファイル110のまだ読み取られていない部分に存在する命令)が存在しない場合でも、ファイル110のイメージの命令(すでにイメージに存在する命令)の実行をエミュレートすることができる。一態様では、ファイル110の命令を含み、ファイル110から読み取られるファイル110の最初の(場合によっては唯一の)部分は、ファイルエントリーポイントによって示される命令を含むファイルの部分である。
エミュレーションモジュール120によってファイル110の部分を読み取った後、解析モジュール121は、ファイル110の読み採った部分にある既知の命令セットを検出する。既知の命令セットの探索において、解析モジュール121は、既知の機能のデータベース125に保持されている(少なくとも1つの)シグネチャを利用する。したがって、一態様では、各既知の命令セットは、少なくとも1つのシグネチャに対応する。一態様では、データベース125は、解析モジュール121の一部である。シグネチャは、特定の既知の命令セットの先頭を示す。一態様では、シグネチャは、一連のバイト、ハッシュサムや、ビット/バイト又は他の任意のマスクの形式を有する。さらに別の態様では、シグネチャはヒューリスティックルールを含み、ヒューリスティックルールをファイル110の命令セット(又は命令のうちのいくつか)へ適用することにより、既知の命令セットを検出することが可能になる。解析モジュール121は、既知の機能セットのデータベース125のシグネチャを使用し、その助けを借りて既知の命令セットの先頭を検出する。
既知の命令セットの一例には、静的ライブラリのサブプログラムが含まれる。一態様では、静的ライブラリは、例えばDelphi言語などのファイルの開発環境のライブラリ(開発環境を構成するライブラリ)である。既知の命令セットの別の例は、インタプリタファイル(例えば、インタプリタのライブラリ)の命令セットを含み、これは、スクリプトの命令又は中間コード命令を処理(解釈)するよう構成される。いくつかの態様では、インタプリタファイルはライブラリであって、当該ライブラリの命令(例えば、サブプログラム)は、機械語命令と異なるファイル110の命令の実行(解釈)のために用いられる(例えば、ファイル110がスクリプト又は中間コード命令を含む場合)。さらに別の例では、解析モジュール121は、ファイルの実行のエミュレートを妨げる既知の命令セット(すなわち、アンチエミュレーション命令セット)を検出する。例えば、このアンチエミュレーション命令は、エミュレーションモジュール120による特定のWinAPI機能の実現を検証する命令を含んでおり、そのような機能が実現されていない場合には、ファイル110の実行のエミュレーションを終了させるか又はファイル110の実行のエミュレート時間を増加させる命令を含んでいる。
既知の命令セットのシグネチャは、シンボリック名(例えば、「string_comparison」)又はチェックサムを含んでいても良い。これらは、エミュレーションモジュール120によるエミュレーション中に作成される既知の命令セットの実行のエミュレーションについてのレコードに追加され、その後、エミュレーションログ130に送信される。
解析モジュール121によるファイル110の読み取った部分の既知の命令セットの検出後、解析モジュール121は、当該ファイル110に対応するイメージの既知の命令セットの先頭に、ブレークポイントを設定する。ブレークポイントは、ファイル110のイメージの位置、すなわち、ファイル110の上述した部分を読み取ることによって配置される上述したイメージの位置に設定される。ブレークポイントは、エミュレーションモジュール120によって使用され、既知の命令セットの実行のエミュレーションに関するレコードを作成する時間と、このレコードのエミュレーションログ130への配置を決定する。
エミュレーションモジュール120は、ファイル110のイメージの命令の実行のエミュレートを実行する。上述したように、エミュレーションの過程においては命令の実行が模倣される。特に、実際のプロセッサ(物理プロセッサ)上の命令の実行が模倣される。エミュレーションの過程において、エミュレーションモジュール120はエミュレーションログ130を生成する。
一態様では、エミュレーションモジュール120はエミュレーションログ130に、動的ライブラリ(例えば、実際のコンピューティングデバイス上でファイル110を実行するときにファイル110から起動されるプロセスのアドレス空間にロードされるもの)に含まれるサブプログラムと命令(すなわち、実行可能なコード)の呼び出しのレコードを追加する。一態様では、サブプログラム呼び出し命令(例えば、これはアセンブラ言語での呼び出し命令である)の実行をエミュレートするとき、そのようなレコードがエミュレーションログ130に追加される。ここで、サブプログラムの命令が配置されることになっているアドレスは、IATレコードの1つのアドレスである。したがって、エミュレーションログ130にはIATからのレコードによって参照される既知の命令セット(サブプログラム)のエミュレーションのレコードが追加される。一態様では、このレコードは、fwrite、GetProcAddress等のシンボリック名など、既知の命令セットの識別子をさらに含む。
本開示のさらに別の態様では、ファイル110のイメージの命令の実行をエミュレートするプロセスにおいてエミュレーションモジュール120がブレークポイントに達した場合に、エミュレーションモジュール120はエミュレーションログ130に既知の命令セットの実行のエミュレートに関するレコードを追加する。エミュレーションモジュール120は、特定の命令からブレークポイントが設定された命令へのコントロールの転送を模倣する。先に述べたように、解析モジュール121がデータベース125のシグネチャの助けを借りてこの既知の命令セットを検出すると、ファイル110のイメージ内の既知の命令セットの先頭にブレークポイントが設定される。
エミュレーションモジュール120によるエミュレーションの過程において、ファイル110の次の部分105を読み取る必要が生じた場合、ファイル110からこの部分105の読み取りが行われ、上述したステップ(例えば、既知の命令セットの検出及びブレークポイントの設定)が繰り返され、エミュレーションモジュール120がそれをファイル110の部分105に追加することによって、ファイル110のイメージが更新される。その後、ファイル110の命令の実行をエミュレートするプロセスは、上述したシナリオに続く。
一態様では、エミュレーションモジュール120が既知の命令セットの先頭に設定されたあるブレークポイントに達すると、エミュレーションモジュール120は対応するレコードをエミュレーションログ130に追加するが、この既知の命令の実行のエミュレーションは行われない(すなわち、エミュレーションモジュールは実行をエミュレートすることを控える)。代わりに、エミュレーションモジュール120は、他の代替の命令セットの実行をエミュレートする。一態様では、データベース125はあらゆる既知の命令セットの代替の命令セットを含む。
一態様では、特定の既知の命令セットに対応する代替の命令セットは、最適化された命令セットである。つまり、その命令セットの実行をエミュレートした結果(例えば、模倣されているデバイスの状態:RAM、ROMやプロセッサのレジスタの値)は既知の命令セットの実行をエミュレートするときと同じであるが、その代替の命令セットの実行をエミュレートすることで、要求がより少なくなる(例えば、要する時間が少なくなったり、RAMやプロセッサレジスタの容量が少なく済むなど)。既知の命令セットの代わりにそのような命令セットの実行をエミュレートすることにより、ファイル110の実行をエミュレートするプロセスを高速化することができ、ファイル110の実行のエミュレートのための時間を短縮することができる。
さらに別の態様では、特定の既知のアンチエミュレーションの命令セットに対応する代替の命令セットは、(既知のセットと違って)ファイルの実行のエミュレートを妨げない命令セットである。つまり、この命令セットの実行をエミュレートした結果(例えば、模倣されているデバイスの状態:RAM、ROMやプロセッサのレジスタの値)は既知の命令セットの実行をエミュレートするときと同じであるが、(ファイル110の実行のエミュレートを妨げる可能性のある)アンチエミュレーションの命令セットはエミュレートしない。既知の命令セット(所定の場合、ファイル110の実行のエミュレートを妨げるもの)に代わってこの命令セットの実行をエミュレートすることは、特定の場合(既知の命令セットがエミュレーションを妨げる命令を含む場合)、ファイル110の実行をエミュレートするプロセスの高速化及びファイル110の実行をエミュレートする時間の短縮を可能にする。いくつかの例では、このアプローチは、情報の完全性に関して信頼できるエミュレーションログ130の作成を可能にする。このように作成されたログ130は、既知の命令セットの実行のエミュレートについてのより多くのレコードを含む。これは、ファイル110の命令の実行のエミュレートが、エミュレーションを妨げる既知の命令セットによって妨げられないためである。
一態様では、データベース125に保持されたデータは、専門家、特にコンピュータ技術の専門家によってデータベース125に格納されたものである。一態様では、そのようなデータは、インターネットなどのネットワークを介してサーバ(例えば、第三者サーバ)から解析モジュール121に送信される。解析モジュール121は、受信したデータをデータベース125に保存する。
一態様では、エミュレーションモジュール120は、(ファイル110に対するステップと同様のステップを実行することで)他のファイルのイメージを追加で生成することができる。いくつかの態様では、そのようなファイルは、ファイル110の命令の実行をエミュレートするために必要なファイルである。例えば、ファイル110の命令の実行(つまり実行のエミュレート)中に使用可能な動的ライブラリファイルである。動的ライブラリファイルは、ファイル110の命令のインタプリタのライブラリファイルを含む。ファイル110が機械語命令だけでなく他の種類の命令(スクリプト形式の命令等:機械語命令とは異なる命令を含むファイルと呼ばれる)を含む場合、動的ライブラリファイルは、ファイル110の命令のインタプリタのライブラリファイルを含み得る。インタプリタのライブラリ(したがって、別々の命令セット)は、機械語命令とは異なる命令を解釈するために使用される。
エミュレーションモジュール120は、もしファイル110のイメージの命令から他のファイルのイメージの命令に制御の転送(制御の転送のエミュレーション)が生じた場合、他のファイルのイメージの命令を実行する。例えば、その命令が他のファイルのイメージに存在するサブプログラムの、(例えば呼び出しの実行又はjmp命令のエミュレートによる)呼び出しにより、制御の転送が生じる。一態様では、ファイル110のイメージの命令の実行のエミュレーションのプロセスは、他のファイルのイメージの命令の実行のエミュレーションを含む。したがって、他のファイルのイメージの命令の実行のエミュレートの際、他のファイルのイメージに含まれる既知の命令セットのエミュレーションに関するレコードも、エミュレーションログ130に追加される。
なお、ファイルのイメージの追加的な生成は、必要な場合、例えば、ファイル110の実行のエミュレート中に、他のファイルからデータを読み取るか、又は他のファイルのイメージの命令の実行をエミュレートする必要がある場合にのみ行われる。例えば、他のファイルのイメージの命令に制御を転送するサブプログラム、分岐命令(無条件のジャンプ等)あるいは他の状況を呼び出すための(ファイル110のイメージ内に存在する)命令の実行をエミュレートする場合である。このようなファイルのイメージ生成プロセスは、上述したものと同様である。したがって、本願のコンテキストにおける方法のすべてのステップは、ファイル110だけでなく、ファイル110のエミュレーションに必要な他のファイルにも適用することができる。
一態様では、ファイル110の命令の実行のエミュレーションに必要なファイルは、ファイル110の命令のインタプリタのライブラリファイルである。このようなライブラリファイルの例としては、Microsoft Visual Basicの仮想マシンのモジュールであるmsvbvm60.dllファイルがある。一例としては、中間Pコードサブプログラムの実現(言い換えると、機械語命令以外の命令の処理(すなわち解釈)を意図する)のための命令の、このmsvbvm60.dllファイルの以下の既知の(アセンブリ言語のコードと特定のメモリアドレスの名前によって補完される)命令セットを挙げることができる。
LitStr:
E8 6C 9F F2 FF (call _vbaStrVarCopy(x))
50 push eax
33 C0 xor eax, eax
8A 06 mov al, [esi]
46 inc esi
FF 24 85 58 FA 4D 73 jmp ds:VM_Table[eax*4]
さらに、この既知の命令セットに対して、データベース125は、その識別子を「プッシュ<定数列>(push <constant string>)」のままにする。これは、それが実行される(したがって実行がエミュレートされる)際、文字列(string)に対するポインタがスタックに配置されることを意味する。この命令セットの実行をエミュレートする際、エミュレーションモジュール120は、既知の命令セットの識別子を示す対応するレコードをエミュレーションログ130に追加する。特定の既知の命令セットの実行をエミュレートする際、エミュレーションモジュール120は、エミュレーションの経過に関してエミュレーションログに置かれたレコードに他の情報、すなわち、模倣されているレジスタの内容、呼び出されたサブプログラムの引数などを追加することもできる。上記の方法の助けを借りることで、技術的問題が解決される。すなわち、機械語命令以外の形式(言い換えると、機械語命令とは異なった形式)の命令、例えばスクリプト形式又は中間コード形式の命令を含むファイルのエミュレーションログを作成することができる。インタプリタライブラリファイルの実行をエミュレートすることによって、このようなエミュレーション方法により、機械語命令の形式とは異なる形式の命令を含むファイルの実行のエミュレーションという形で、技術的結果を達成することができる。
一態様では、インタプリタライブラリファイルのイメージのブレークポイントの設定は(そのようなファイルの命令セットは一般的に変更されないので)1回実行され、設定されたブレークポイントに関する情報は解析モジュール121に保持され、既知の命令セットのシグネチャを使用することなく当該既知の命令セットを検出するために使用される。
エミュレーションモジュール120を、ファイル110の実行のエミュレーションのプロセスを停止させるよう構成してもよい。一態様では、エミュレーションモジュールは、確立されたエミュレーション時間、例えば10秒が経過したときにエミュレーションのプロセスを停止することができる。さらに別の態様では、エミュレーションモジュールは、割り込み呼び出し又は実行完了機能のための命令の実行をエミュレートすることに応じて、エミュレーションのプロセスを停止することができる。
図2Aは、例示的な態様に係るファイルの実行をエミュレートする方法200Aを示すフローチャートである。ステップ201において、エミュレーションモジュールはファイル110のイメージを作成する。このステップには、ファイル110の部分105の読み取りも含まれる。このように、エミュレーションモジュールは、ファイルから読み取られた命令からなるファイルのイメージを生成する。いくつかの態様では、ファイルのイメージは、ファイルに含まれるプログラムコードの命令と、プログラムコードのエントリーポイントに関するサービス情報とを含む。いくつかの態様では、エミュレーションモジュール120は、ファイルの命令のインタプリタのライブラリファイルのイメージを生成する。
次に、ステップ202において、解析モジュール121は、エミュレーションモジュール120によって読み取られたファイル110の部分105内の少なくとも1つの既知の命令セットを検出する。検出は、既知の命令セットのデータベース125のシグネチャを用いて行うことができる。一態様では、検出された少なくとも1つの既知の命令セットは、対応する最適化された命令を有する命令である。別の態様では、検出された少なくとも1つの既知の命令セットは、ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含む。いくつかの態様では、検出された少なくとも1つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む。ステップ203において、解析モジュール121は、ファイル110の読み取った部分105で検出された全ての既知の命令の先頭に対応する、作成されたファイル110のイメージの場所(位置)に、ブレークポイントを設定する。
その後、ステップ204において、エミュレーションモジュール120は、ファイル110のイメージの命令の実行のエミュレーションを実行し、エミュレーションログ130に既知の命令セットの実行のエミュレーションに関する対応するレコードを追加する。いくつかの態様では、ファイルのイメージにある命令の実行をエミュレートするプロセスにおいて、エミュレーションモジュール120は、挿入されたブレークポイントに到達したことに応じて、エミュレーションログに既知の命令セットの実行のエミュレーションを示すレコードを追加し、検出された少なくとも1つの既知の命令セットに対応する代替の命令セットの実行をエミュレートする(すなわち、検出された少なくとも1つの既知の命令セットの実行をエミュレートすることを控える)。いくつかの態様では、代替の命令セットは、実行をエミュレートするのと同じ結果を有し既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む。いくつかの態様では、アンチエミュレーション命令に対応する代替の命令セットは、実行をエミュレートするのと同じ結果を有し、ファイルの実行のエミュレーションを妨げないように構成される。
ファイル110のイメージから命令の実行をエミュレートするステップ204において、ファイル110の次の部分105を読み取る必要が生じた場合、エミュレーションモジュール120は、ステップ205において、ファイル110の次の部分105を読み取る。そしてその後、ステップ202〜205(205は必要な場合のみ)が繰り返される。エミュレーションモジュールは、例えば規定のエミュレーション時間が経過すると、ステップ206において、ファイル110の実行をエミュレートするプロセスを停止(終了)する(ステップ202〜205のいずれかを実行する際に停止することもあるが、その遷移は破線で示される)。
図2Bは、別の例示的な態様に係るファイルの実行をエミュレートする方法200Bを示すフローチャートである。ステップ221において、エミュレーションモジュール120は、ファイル110のイメージを作成する。このステップはまた、ファイル110の部分105の読み取りを含む。次に、ステップ222において、解析モジュール121は、エミュレーションモジュール120によって読み取られたファイル110の部分105の少なくとも1つの既知の命令セットを検出する。検出は、既知の命令セットのデータベース125のシグネチャを用いて行うことができる。ステップ223において、解析モジュール121は、作成されたファイル110のイメージの、当該ファイル110の読み取り部分105にある検出された全ての既知の命令の先頭に対応する場所に、ブレークポイントを設定する。
その後、ステップ224において、エミュレーションモジュール120は、ファイル110のイメージの命令の実行のエミュレーションを実行し、エミュレーションログ130に、既知の命令セットの実行のエミュレーションに関する対応するレコードを追加する。
ファイル110のイメージの命令の実行をエミュレートするステップ224において、ファイル110の次の部分105を読み取る必要が生じた場合、エミュレーションモジュール120は、ステップ225において、ファイル110の次の部分105を読み取る。そしてその後、ステップ222〜225(225は必要な場合のみ)が繰り返される。
ファイル110のイメージの命令の実行をエミュレートする過程で、別のファイルのイメージの命令の実行のエミュレーションを実行する必要が生じた場合、エミュレーションモジュール120はステップ228において、当該他のファイルのイメージを形成する。ステップ228における他のファイルのイメージの形成はステップ221と同様である。この後、ステップ222〜225は、当該他のファイルに関して実行される。他のファイルのイメージの命令の実行をエミュレートする間、同様に、さらに別のファイルのイメージの命令の実行をエミュレートする必要が生じる可能性がある。この場合、ステップ228,222〜225は、上述のシナリオと同様に繰り返される。エミュレーションモジュールは、例えば規定のエミュレーション時間が経過すると、ステップ226において、ファイル110の実行をエミュレートするプロセスを停止(終了)することができる(ステップ202〜205のいずれかを実行する際に停止することもあるが、その遷移は破線で示される)。
一態様では、ファイル110及び当該ファイル110のイメージが機械語命令とは異なる命令を含む場合、別のファイルの命令、特に他のファイルのイメージの命令の実行をエミュレートする必要性、したがって、他のファイルのイメージを作成する必要性が生じる。そのため、インタプリタ(ライブラリ)ファイルである他のファイルのイメージの命令の実行をエミュレートする必要性が生じる。また、ファイル110のイメージの機械語命令とは異なる命令の解釈には、ファイルのイメージの命令の実行のエミュレートが必要となる。例えば、ファイル110のイメージはCILコードを含み、エミュレーションモジュール120は、ファイル110のイメージの命令の実行のエミュレート中に_coreexemain関数の呼び出しのエミュレーションを実行する必要がある場合、他のファイルのイメージ、特にファイルのイメージMSCoreEE.dllの命令の実行をエミュレートする必要が生じ、その結果、コントロールは、ファイル110のイメージから.NET実行環境(.NET Execution Environment、MSCoreEE.dllファイルのイメージ)に転送される。このような必要性が生じると、エミュレーションモジュール120は、インタプリタファイル、特にMSCoreEE.dllファイルのイメージを作成し、当該ファイルのイメージの命令の実行のエミュレーションを開始する。そして、MSCoreEE.dllファイルのイメージの_coreexemain関数の命令の実行のエミュレート中に、ファイル110のイメージのCILコードの解釈(処理)のために設計された命令のエミュレーションが実行される。他の態様では、既知の命令セットは、インタプリタ(ライブラリ)ファイル(MSCoreEE.dll)の命令セットであり、したがって、このファイルのイメージの命令でもある。これは、ファイル110のイメージに含まれる機械語命令とは異なる命令(CILコード)の処理(解釈)のために設計される。
一態様では、ファイル110に関するステップ222及び223はスキップされる。したがって、ファイル110の実行のエミュレーション中に既知の命令セットの実行のエミュレートに関するレコードがエミュレーションログ130に追加されることはなく、他のファイルのイメージ、特にステップ228において作成されたイメージの、既知の命令セットの実行のエミュレーションのレコードのみが追加される。
図3は、ファイルの実行をエミュレートするシステム及び方法の態様が例示的な態様に従って実施され得る汎用コンピュータシステム20を示すブロック図である。コンピュータシステム20は、例えば、先に説明したシステム100に対応する。
図示のように、コンピュータシステム20(パーソナルコンピュータ又はサーバ)は、CPU21と、システムメモリ22と、CPU21に関連付けられたメモリを含む様々なシステムコンポーネントを接続するシステムバス23とを含む。当業者に理解されるように、システムバス23は、バスメモリ又はバスメモリコントローラ、周辺バス、及び他のバスアーキテクチャと相互作用するローカルバスを含むことができる。システムメモリは、永久メモリ(ROM)24及びランダムアクセスメモリ(RAM)を含む。基本入出力システム(BIOS)26は、ROM24を使用してオペレーションシステムをロードする際のように、コンピュータシステム20の要素間で情報を転送するための基本的な手順を記憶する。
ハードディスク27、磁気ディスクドライブ28、及び光学式のドライブ30は、ハードディスクインターフェース32、磁気ディスクインターフェース33、及び光学式のドライブインターフェース34それぞれを介してシステムバス23と接続される。ドライブ及び対応するコンピュータ情報メディアは、コンピュータ命令、データ構造体、プログラムモジュール、及びコンピュータシステム20の他のデータを蓄積するための電源依存のモジュールである。
当業者であれば、コンピュータによって読み取り可能な形式でデータを記憶することのできる任意のタイプのメディア56(ソリッド・ステート・ドライブ、フラッシュメモリカード、デジタルディスク、ランダムアクセスメモリ(RAM)等)を使用できることが理解されよう。
コンピュータシステム20は、オペレーティングシステム35が格納されるファイルシステム36と、追加のプログラムアプリケーション37と、他のプログラムモジュール38と、プログラムデータ39とを有する。コンピュータシステム20のユーザは、キーボード40、マウス42、又は当業者に知られた任意の他の入力デバイス(非限定的な例:マイクロフォン、ジョイスティック、ゲームコントローラ、スキャナ等)を用いて命令を入力する。このような入力デバイスは、典型的には、シリアルポート46を介してコンピュータシステム20に接続され、シリアルポートはシステムバスに接続される。ただし、当業者であれば、入力デバイスを、パラレルポート、ゲームポート、又はユニバーサル・シリアル・バス(USB)など(これらに限定されない)を介して接続することができることを理解するであろう。モニタ47又は他のタイプの表示装置もまた、ビデオアダプタ48などのインタフェースを介してシステムバス23に接続することができる。パーソナルコンピュータは、モニタ47に加えて、ラウドスピーカやプリンタなどの他の周辺出力装置(図示せず)を備えていても良い。
コンピュータシステム20は、1つ又は複数のリモートコンピュータ49へのネットワーク接続により、ネットワーク環境で動作することができる。リモートコンピュータ(又は複数のコンピュータ)49は、コンピュータシステム20の性質を説明する上で前述した要素のほとんど又は全てを含むローカルコンピュータワークステーション又はサーバであっても良い。ルータ、ネットワークステーション、ピアデバイス、又は他のネットワークノードなどの他のデバイスも、コンピュータネットワークに存在することができるが、これに限定されるものではない。
ネットワーク接続は、ローカルエリアコンピュータネットワーク(LAN)50及びワイドエリアコンピュータネットワーク(WAN)を形成することができる。このようなネットワークは、企業のコンピュータネットワーク及び社内ネットワークで使用され、一般にインターネットにアクセスする。LAN又はWANネットワーク内では、パーソナルコンピュータ20は、ネットワークアダプタ又はネットワークインタフェース51を介してローカルエリアネットワーク50に接続される。ネットワークが使用される場合、コンピュータ20は、モデム54又はインターネットなどのワイドエリアコンピュータネットワークとの通信を可能にする当業者に周知の他のモジュールを使用することができる。モデム54は、内部又は外部のデバイスとすることができ、シリアルポート46によってシステムバス23に接続される。上記のネットワークシステムが、通信モジュールを使用して1つのコンピュータが他のコンピュータへの接続を確立するための多くの周知の方法のうちの非限定的な例であることは、当業者には理解されるだろう。
様々な実施形態において、ハードウェア、ソフトウェア、ファームウェア、又はこれらのあらゆる組み合わせにより、ここで説明されたシステム及び方法を実施し得る。ソフトウェアにおいて実装される場合は、方法は非一時的コンピュータ可読媒体の1つ又は複数の命令又はコードとして保存され得る。コンピュータ可読媒体は、データストレージを含む。あくまでも例であり限定するものではないが、そのようなコンピュータ可読媒体は、RAM、ROM、EEPROM、CD-ROM、フラッシュメモリ、若しくは他のタイプの電気、磁気、光学式の記憶媒体、又はその他のメディアであってもよい。すなわち、これらによって命令又はデータ構造体という形で、要求されたプログラムコードを運ぶか又は保存することができ、汎用コンピュータのプロセッサによってアクセスすることができる。
様々な実施形態で、本願のシステム及びメソッドはモジュールとして実装され得る。ここで用語「モジュール」は、実世界の機器、コンポーネント、又はハードウェアを用いて実装されたコンポーネント配置であり、例えばASIC(Application Specific Integrated Circuit)、FPGA(Field-Programmable Gate Array)等の、又は例えばモジュールの機能を実行するマイクロプロセッサシステムや命令セットによる等、ハードウェアとソフトウェアの組み合わせとして実装され得る。これらは、実行中にマイクロプロセッサシステムを特定の機器に変換する。モジュールは、ハードウェア単体により促進される一定の機能とハードウェア及びソフトウェアの組み合わせによって促進される他の機能という2つの組み合わせとして実施されてもよい。モジュールの少なくとも一部又は全部は、汎用コンピュータのプロセッサにおいて実行できる(図3を用いて上記において詳述したもの等)。したがって、各モジュールは様々な適当な構成で実現することができて、ここに例示した特定の実装に限られるものではない。
なお、実施形態の通常の機能のうちの全てをここで開示しているわけではない。本発明のいずれの実施形態を開発する場合においても、開発者の具体的な目標を達成するためには実装に係る多くの決定が必要であり、これらの具体的な目標は実施形態及び開発者ごとに異なることに留意されたい。このような開発努力は、複雑で時間を要するものであるが、本発明の利益を享受し得る当業者にとっては当然のエンジニアリングであると理解されたい。
さらに、本明細書で使用される用語又は表現は、あくまでも説明のためであり、限定するものではない。つまり、本明細書の用語又は表現は、関連する技術分野の当業者の知識と組み合わせて、ここに示される教示及び指針に照らして当業者によって解釈されるべきであると留意されたい。明示的な記載がない限り、明細書又は特許請求の範囲内における任意の用語に対して、一般的でない又は特別な意味を持たせることは意図されていない。
本明細書で開示された様々な態様は、例示のために本明細書に言及した既知のモジュールの、現在及び将来の既知の均等物を包含する。さらに、複数の態様及び用途を示し、説明してきたが、本明細書に開示された発明の概念から逸脱することなく、上述したよりも多くの改変が可能であることが、この開示の利益を有する当業者には明らかであろう。

Claims (17)

  1. ファイルの実行をエミュレートする方法であって、
    前記ファイルから読み取られた命令からなるファイルのイメージを生成するステップと、
    前記ファイルから読み取られた部分の少なくとも1つの既知の命令セットを検出するステップと、
    前記生成されたファイルのイメージの、前記少なくとも1つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入するステップと、
    前記生成されたファイルのイメージの命令の実行をエミュレートすることで前記ファイルの実行をエミュレートするステップと、
    特定の命令から前記ブレークポイントが設定された命令へのコントロールの転送を模倣するとともに、前記少なくとも1つの既知の命令セットのエミュレートされた実行に関する対応するレコードをエミュレーションログに追加するステップとを備える、方法。
  2. 請求項1に記載の方法であって、
    前記ファイルのイメージは、前記ファイルに含まれるプログラムコードの命令と、前記プログラムコードのエントリーポイントに関するサービス情報とを含む、方法。
  3. 請求項1に記載の方法であって、
    前記ファイルの実行をエミュレートするステップは、
    前記挿入されたブレークポイントに到達したことに応じて、前記既知の命令セットの実行のエミュレーションを示すレコードを前記エミュレーションログに追加することと、
    前記挿入されたブレークポイントに到達したことに応じて、前記少なくとも1つの既知の命令セットの実行をエミュレートすることは控え、記少なくとも1つの既知の命令セットに対応する代替の命令セットの実行をエミュレートすることとをさらに備える、方法。
  4. 請求項3に記載の方法であって、
    前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む、方法。
  5. 請求項3に記載の方法であって、
    前記少なくとも1つの既知の命令セットは、前記ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含み、前記アンチエミュレーション命令に対応する前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記ファイルの実行のエミュレーションを妨げないよう構成される、方法。
  6. 請求項1に記載の方法であって、
    前記少なくとも1つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む、方法。
  7. 請求項1に記載の方法であって、
    前記少なくとも1つの既知の命令セットは、既知の命令セットのデータベースの1つ以上のシグネチャを使用して検出される、方法。
  8. 請求項1に記載の方法であって、
    前記ファイルの命令のインタプリタのライブラリファイルのイメージを生成するステップを備える、方法。
  9. ファイルの実行をエミュレートするシステムであって、
    ファイル、ファイルのイメージ及びエミュレーションログを記憶する記憶装置と、ハードウェアプロセッサとを備え、
    前記ハードウェアプロセッサは、
    前記ファイルから読み取られた命令からなるファイルのイメージを生成し、
    前記ファイルから読み取られた部分の少なくとも1つの既知の命令セットを検出し、
    前記生成されたファイルのイメージの、前記少なくとも1つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入し、
    前記生成されたファイルのイメージの命令の実行をエミュレートすることで前記ファイルの実行をエミュレートし、
    特定の命令から前記ブレークポイントが設定された命令へのコントロールの転送を模倣するするとともに、前記少なくとも1つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加する、システム。
  10. 請求項9に記載のシステムであって、前記ファイルのイメージは、前記ファイルに含まれるプログラムコードの命令と、前記プログラムコードのエントリーポイントに関するサービス情報とを含む、システム。
  11. 請求項9に記載のシステムであって、
    前記プロセッサはさらに、
    前記挿入されたブレークポイントに到達したことに応じて、
    前記既知の命令セットの実行のエミュレーションを示すレコードを前記エミュレーションログに追加し、
    前記少なくとも1つの既知の命令セットの実行をエミュレートすることは控え、記少なくとも1つの既知の命令セットに対応する代替の命令セットの実行をエミュレートするよう構成される、システム。
  12. 請求項11に記載のシステムであって、
    前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記既知の命令セットよりも少ないリソースを消費するよう構成された最適化された命令セットを含む、システム。
  13. 請求項11に記載のシステムであって、
    前記少なくとも1つの既知の命令セットは、前記ファイルの実行のエミュレーションを妨げるよう構成されたアンチエミュレーション命令を含み、前記アンチエミュレーション命令に対応する前記代替の命令セットは、実行をエミュレートするのと同じ結果を有し且つ前記ファイルの実行のエミュレーションを妨げないよう構成される、システム。
  14. 請求項9に記載のシステムであって、
    前記少なくとも1つの既知の命令セットは、機械語命令とは異なるファイルの命令を処理するよう構成されたインタプリタライブラリの命令セットを含む、システム。
  15. 請求項9に記載のシステムであって、
    前記少なくとも1つの既知の命令セットは、既知の命令セットのデータベースの1つ以上のシグネチャを使用して検出される、システム。
  16. 請求項9に記載のシステムであって、
    前記プロセッサはさらに、前記ファイルの命令のインタプリタのライブラリファイルのイメージを生成するよう構成される、システム。
  17. ファイルの実行のエミュレートするためのコンピュータ実行可能命令を含む非一時的コンピュータ可読媒体であって、
    前記ファイルから読み取られた命令からなるファイルのイメージを生成させる命令と、
    前記ファイルから読み取られた部分の少なくとも1つの既知の命令セットを検出させる命令と、
    前記生成されたファイルのイメージの、前記少なくとも1つの既知の命令セットの先頭に対応する位置にブレークポイントを挿入させる命令と、
    前記生成されたファイルのイメージの命令の実行をエミュレートさせることで前記ファイルの実行をエミュレートさせる命令と、
    特定の命令から前記ブレークポイントが設定された命令へのコントロールの転送を模倣するとともに、前記少なくとも1つの既知の命令セットのエミュレートされた実行に関連する対応するレコードをエミュレーションログに追加させる命令とを備える、非一時的コンピュータ可読媒体。
JP2017201842A 2017-08-17 2017-10-18 ファイルの実行をエミュレートするシステム及び方法 Active JP6586143B2 (ja)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
RU2017129267A RU2659742C1 (ru) 2017-08-17 2017-08-17 Способ эмуляции исполнения файлов, содержащих инструкции, отличные от машинных
RU2017129267 2017-08-17
US15/730,958 US10437618B2 (en) 2017-08-17 2017-10-12 System and method of emulating execution of files
US15/730,958 2017-10-12

Publications (2)

Publication Number Publication Date
JP2019036278A JP2019036278A (ja) 2019-03-07
JP6586143B2 true JP6586143B2 (ja) 2019-10-02

Family

ID=62815456

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2017201842A Active JP6586143B2 (ja) 2017-08-17 2017-10-18 ファイルの実行をエミュレートするシステム及び方法

Country Status (4)

Country Link
US (2) US10437618B2 (ja)
JP (1) JP6586143B2 (ja)
CN (1) CN109408194B (ja)
RU (1) RU2659742C1 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112949233B (zh) * 2021-03-08 2024-02-27 北京士昌鼎科技有限公司 Fpga芯片的自动化开发方法及装置、电子设备

Family Cites Families (34)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040250150A1 (en) * 1987-06-02 2004-12-09 Swoboda Gary L. Devices, systems and methods for mode driven stops notice
US5574927A (en) 1994-03-25 1996-11-12 International Meta Systems, Inc. RISC architecture computer configured for emulation of the instruction set of a target computer
US6145103A (en) * 1998-04-07 2000-11-07 Advanced Micro Devices, Inc. Emulator support mode for disabling and reconfiguring timeouts of a watchdog timer
US6564179B1 (en) * 1999-07-26 2003-05-13 Agere Systems Inc. DSP emulating a microcontroller
US7206733B1 (en) * 2000-10-26 2007-04-17 Cypress Semiconductor Corporation Host to FPGA interface in an in-circuit emulation system
US7178138B2 (en) * 2001-01-24 2007-02-13 Texas Instruments Incorporated Method and tool for verification of algorithms ported from one instruction set architecture to another
US20030033593A1 (en) 2001-08-08 2003-02-13 Evelyn Duesterwald Dynamic execution layer interface for explicitly or transparently executing application or system binaries
US7168067B2 (en) * 2002-02-08 2007-01-23 Agere Systems Inc. Multiprocessor system with cache-based software breakpoints
US20040040013A1 (en) * 2002-08-26 2004-02-26 Mohit Kalra Time-based breakpoints in debuggers
WO2004075060A1 (ja) 2003-02-21 2004-09-02 Tabei, Hikaru コンピュータウィルス検出装置
US7373642B2 (en) * 2003-07-29 2008-05-13 Stretch, Inc. Defining instruction extensions in a standard programming language
JP4756675B2 (ja) * 2004-07-08 2011-08-24 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ資源のキャパシティを予測するためのシステム、方法およびプログラム
JP4638505B2 (ja) 2004-11-24 2011-02-23 ノキア コーポレイション 電子デバイス内の安全なプログラム解釈方法
US8537730B2 (en) 2005-03-03 2013-09-17 Thomson Licensing Method and apparatus for sensing channel availability in wireless networks
US9507739B2 (en) * 2005-06-24 2016-11-29 Google Inc. Configurable memory circuit system and method
US7779472B1 (en) * 2005-10-11 2010-08-17 Trend Micro, Inc. Application behavior based malware detection
US8151352B1 (en) * 2006-07-14 2012-04-03 Bitdefender IPR Managament Ltd. Anti-malware emulation systems and methods
JP5161022B2 (ja) * 2008-10-06 2013-03-13 日本電信電話株式会社 解析装置、解析方法及び解析プログラム
US9038184B1 (en) 2010-02-17 2015-05-19 Symantec Corporation Detection of malicious script operations using statistical analysis
RU2430411C1 (ru) * 2010-03-02 2011-09-27 Закрытое акционерное общество "Лаборатория Касперского" Система и способ обнаружения вредоносного программного обеспечения
US20130132063A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Systems and methods for debugging just-in-time static translation in an emulated system
RU2472215C1 (ru) * 2011-12-28 2013-01-10 Закрытое акционерное общество "Лаборатория Касперского" Способ выявления неизвестных программ с использованием эмуляции процесса загрузки
US20130326489A1 (en) * 2012-05-30 2013-12-05 Vector Fabrics B.V. Method and system for translating non-native instructions
CN102902906B (zh) * 2012-09-26 2015-06-10 中国航天科技集团公司第九研究院第七七一研究所 微处理器指令集验证方法
US9141361B2 (en) * 2012-09-30 2015-09-22 Intel Corporation Method and apparatus for performance efficient ISA virtualization using dynamic partial binary translation
RU2553056C2 (ru) * 2013-10-24 2015-06-10 Закрытое акционерное общество "Лаборатория Касперского" Система и способ сохранения состояния эмулятора и его последующего восстановления
US9355246B1 (en) * 2013-12-05 2016-05-31 Trend Micro Inc. Tuning sandbox behavior based on static characteristics of malware
US9817745B2 (en) * 2014-01-13 2017-11-14 Purdue Research Foundation Binary program instrumentation and debugging
US9684743B2 (en) * 2015-06-19 2017-06-20 Synopsys, Inc. Isolated debugging in an FPGA based emulation environment
US9846774B2 (en) * 2015-06-27 2017-12-19 Mcafee, Llc Simulation of an application
RU2622627C2 (ru) * 2015-09-30 2017-06-16 Акционерное общество "Лаборатория Касперского" Способ обнаружения вредоносных исполняемых файлов, содержащих интерпретатор, посредством комбинирования эмуляторов
US9946624B1 (en) * 2015-12-04 2018-04-17 Cadence Design Systems, Inc. Systems and methods to capture data signals from a dynamic circuit
US10073932B2 (en) * 2016-03-04 2018-09-11 Synopsys, Inc. Capturing time-slice of emulation data for offline embedded software debug
CN106445524B (zh) * 2016-09-26 2019-12-17 杭州杉石科技有限公司 基于模型的SystemC代码生成方法

Also Published As

Publication number Publication date
RU2659742C1 (ru) 2018-07-03
US20190056963A1 (en) 2019-02-21
JP2019036278A (ja) 2019-03-07
US10437618B2 (en) 2019-10-08
US20190391830A1 (en) 2019-12-26
US10838748B2 (en) 2020-11-17
CN109408194A (zh) 2019-03-01
CN109408194B (zh) 2022-01-28

Similar Documents

Publication Publication Date Title
JP6856749B2 (ja) ブロックチェーン上のネイティブ契約を実施するためのシステムおよび方法
RU2514141C1 (ru) Способ эмуляции вызовов системных функций для обхода средств противодействия эмуляции
JP6842367B2 (ja) ファイル中の悪意のあるコードの検出システム及び方法
US8489925B1 (en) System and method for processing of system errors
JP2018041438A5 (ja)
RU2553056C2 (ru) Система и способ сохранения состояния эмулятора и его последующего восстановления
JP6568564B2 (ja) ファイルのウイルス対策スキャン実行のため仮想マシン上にログを生成するシステム及び方法
CN108229107B (zh) 一种Android平台应用程序的脱壳方法及容器
RU2514142C1 (ru) Способ повышения эффективности работы аппаратного ускорения эмуляции приложений
JP2004517390A (ja) 解析仮想マシン
RU2606559C1 (ru) Система и способ оптимизации антивирусной проверки файлов
WO2014132145A1 (en) Web service black box testing
JP6400794B2 (ja) インタプリタによるコード実行のシステム及び方法
CN111428233B (zh) 一种嵌入式设备固件的安全性分析方法
CN113391874A (zh) 一种虚拟机检测对抗方法、装置、电子设备及存储介质
US20190243976A1 (en) System and method for categorization of .net applications
CN113821297B (zh) 仿真器和仿真方法
JP6586143B2 (ja) ファイルの実行をエミュレートするシステム及び方法
US20190102279A1 (en) Generating an instrumented software package and executing an instance thereof
Tang et al. When virtualization encounter AFL
EP3444737B1 (en) System and method of emulating execution of files
RU2659734C1 (ru) Способ эмуляции исполнения файлов
RU2697951C2 (ru) Система и способ прекращения работы функционально ограниченного приложения, взаимосвязанного с веб-сайтом, запускаемого без установки
RU2757409C1 (ru) Эмулятор и способ эмуляции
JP7491372B2 (ja) 攻撃再現支援装置、攻撃再現支援方法、及びプログラム

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20180409

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20190115

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20190327

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20190906

R150 Certificate of patent or registration of utility model

Ref document number: 6586143

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250