JP6163678B2 - プログラムバイナリの汎用的なアンパッキング - Google Patents

プログラムバイナリの汎用的なアンパッキング Download PDF

Info

Publication number
JP6163678B2
JP6163678B2 JP2016533625A JP2016533625A JP6163678B2 JP 6163678 B2 JP6163678 B2 JP 6163678B2 JP 2016533625 A JP2016533625 A JP 2016533625A JP 2016533625 A JP2016533625 A JP 2016533625A JP 6163678 B2 JP6163678 B2 JP 6163678B2
Authority
JP
Japan
Prior art keywords
executed
return address
instructions
memory
unpacked
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
JP2016533625A
Other languages
English (en)
Other versions
JP2017504865A (ja
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
Application filed by マカフィー, インコーポレイテッド, マカフィー, インコーポレイテッド filed Critical マカフィー, インコーポレイテッド
Priority claimed from PCT/US2014/072158 external-priority patent/WO2015100327A1/en
Publication of JP2017504865A publication Critical patent/JP2017504865A/ja
Application granted granted Critical
Publication of JP6163678B2 publication Critical patent/JP6163678B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Debugging And Monitoring (AREA)

Description

本明細書で説明される複数の実施形態は、概してマルウェア検出に関し、具体的には、パック済みプログラムバイナリを作成するのに用いられるパッキング手法の知識を持たずに、パック済みプログラムバイナリをアンパッキングするための複数の手法に関する。
一般的には、アプリケーションコードの現代の配信は、パッキング処理によって、その圧縮を含む。パッキング処理を用いることによって、バイナリファイルのサイズは圧縮され得て、複数のファイルは1つのファイルに結合され得る。現代のパッキング処理は、「自己解凍式実行可能ファイル」を作成する。これは、パック済みコードのコンテンツをアンパックすべく実行され得る。即ち、パック済みコードは、それ自体に実行可能コードセクション又はスタブを伴い、これが実行された場合に、パック済みコードを展開又は解凍することになる。従って、自己解凍式実行可能ファイルを実行することで、パック済みコード実行可能ファイルがディスク、メモリ、又はその両方に展開されることになり得る。
ファイルをパッキングして自己解凍式実行可能ファイルを作成する場合、多くの異なる種類の圧縮アルゴリズム及びパッキング手法が利用され得る。これらの中には、よく知られた確認済みのものもあるが、そうでないものもある。同じファイルに異なる複数の手法を利用して自己解凍式実行可能ファイルを作成することは、異なる複数のファイルをもたらすことになる。つまり、パッキングコード及びパック済みコードの両方は、異なるパッカー、及び異なる圧縮アルゴリズムによる様々な結果のために異なり得る。更に、未知の、又は未確認の複数の手法が、ファイルを自己解凍式実行可能ファイルにパックするのに用いられる場合に、パッキングコードとパック済みコードとの違いを決定することさえ困難になり得る。
複数の自己解凍式実行可能ファイルのこれらの特性は、複数のアンチウイルスプログラム又はマルウェア検出プログラムからマルウェアを見えないようにすべく、複数のマルウェア開発者に利用されることが多い。マルウェアを検出するための1つの一般的な方法は、署名スキャンである。署名スキャンを用いて、複数のファイルは、マルウェアと関連していることが知られている、又は疑われる複数のビットパターン又は署名を探すためにスキャンされる。ファイル中のビットパターンが、既知のマルウェアの署名に一致する場合、次にそのファイルは、マルウェアである、又はマルウェアを含むと特定され得る。しかしながら、悪意のある実行可能ファイルの署名は、その実行可能ファイルを分かりにくくする目的で、容易に変更され得る。マルウェアがパックされると、アンパック済みマルウェアの既知の署名は、パック済みマルウェアファイルのいかなるビットパターンにも一致しないので、検出は回避され得る。
マルウェアを見えないようにするこれらの取り組みに打ち勝とうとすべく、複数のアンチウイルスプログラム及びマルウェア検出プログラムは、複数の手法を利用し得る。1つの手法は、メモリ中のパック済みコードを、実行することなく解凍し、次にマルウェア署名用の非圧縮バイナリをスキャンしてみることである。パック済みコードは、その実行をエミュレートすることによって解凍され得る、又はパッキングアルゴリズムが既知である場合には、アンチウイルスプログラムによる解凍を実行することによって、解凍され得る。パッキング手法がよく知られてなく、確認済みでもない場合、アンチウイルスプログラムの管理下でパック済みコードを解凍することは、可能ではない場合がある。また、多くのパッキングアルゴリズムは、アンパッキングがデバッガによって、又は実行エミュレーションを通じて実行されていることが検出された後に、アンパッキング処理を簡単に終了させるべく、アンチエミュレーション及びアンチデバッグ手法を用いる。コードフローのタイムスタンプ部は、コードがエミュレートされていることを決定するのに用いられ得る標準的な方法である。同様に、コードがデバッグされていることを特定することは、オペレーティングシステムに問い合わせることによって、容易に決定され得る。
自己解凍式実行可能ファイルが、実行又はエミュレートされることを許可されているとしても、アンチウイルスプログラムは、アンパッキングの実行部分がいつ完了するか、及び最初に圧縮されていた実行可能ファイルがいつ実行を開始するかを決定することが困難である。自己解凍式実行可能ファイルにおいて、アンパッキングコード及びパック済み実行可能ファイルは、同じバイナリの一部であり、メモリ中の2つの違いを決定するのは困難になり得る。
マルウェアを見えないようにする取り組みに打ち勝つ別の手法は、マルウェアを含む既知の自己解凍式実行可能ファイルの署名を、そのようなパック済みマルウェアの新たな署名が特定されたらすぐに、アンチウイルス署名データベースに加えることである。この手法の欠点は、パッカーコード又はパッキング手法をわずかに変更して、別の自己解凍式実行可能ファイル、したがって別の署名を生じさせることによって、この手法が容易に回避され得るということである。複数のパッキング手法におけるこれらの変形の原因となる複数の署名をアンチウイルス署名データベースに追加することは、署名データベースのサイズを増加させる働きをする。これにより、署名の数、及び複数の署名ファイルを維持する困難さも、それ相応に増すという点において、問題が引き起こされる。更に、これらの取り組みは更に妨げられ得る。その理由は、パッキング処理が、異なる複数のパッキングアルゴリズムを異なる順番で用いて任意の回数繰り返され、特定して維持すべき更に多数の署名を生み出し得るからである。
バイナリのアンパッキングは、マルウェア検出、マルウェアのクラスタ化及び分類、解析の自動化及びリバースエンジニアリングの自動化に極めて重要になり得るので、アンチマルウェアソフトウェアの開発者たちは、PolyUnpack、Renovo、及びOmniUnpackを含む、マルウェアの汎用的なアンパッキングへの様々なアプローチを試みている。しかしながら、以前のヒューリスティックなアプローチでは、アンパックされ得るパッキングの種類に限界があり、かなりの計算リソースを必要とし、高い偽陽性率を有する。PolyUnpack及びRenovoは、細粒度解析の変形に基づいており、この解析は最新のカスタムパッカーに対しては、非常に遅く不十分なアプローチである。一方、OmniUnpackは、複雑な実装を有し、そのままの形態で用いられた場合に、非常に高い偽陽性率を生じさせる。より良好な汎用的なアンパッキングアプローチがあれば、役立つであろう。
本明細書に組み込まれ、その一部を構成する複数の添付図面は、本発明と一致した装置及び複数の方法の実装を詳細な説明と共に図示し、本発明と一致した複数の利点及び複数の本質を説明するのに役立つ。
1つの実施形態に従って、開示された複数の手法が実装され得るインフラを図示するブロック図である。
1つの実施形態に従って、様々な既知のパッカーに対するアンパッキング時間の例を図示するグラフである。
1つの実施形態に従って、バイナリを一般的にアンパッキングするためのヒューリスティック手法を図示するブロック図である。
1つの実施形態に従って、バイナリを一般的にアンパッキングするためのヒューリスティック手法を図示するフローチャートである。
1つの実施形態に従って、バイナリを一般的にアンパッキングするための別のヒューリスティック手法を図示するブロック図である。
図5のヒューリスティック手法を図示するフローチャートである。
1つの実施形態に従って、本明細書で説明される複数の手法とともに用いるためのプログラマブルデバイスを図示するブロック図である。
別の実施形態に従って、本明細書で説明される複数の手法とともに用いるためのプログラマブルデバイスを図示するブロック図である。
以下の説明において、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供すべく説明される。しかしながら、当業者には、これらの複数の具体的な詳細なしに、本発明が実施され得ることは明らかであろう。他の複数の例において、本発明を不明瞭にすることを回避すべく、構造及び複数のデバイスがブロック図の形態で示される。下付き文字又は添字のない数字への参照は、その参照された数字に対応する下付き文字及び添字のすべての例を参照するものと理解される。更に、本開示で用いられる言語は、読みやすさ及び教授の目的で主に選択されており、本発明の主題を詳述する、又は制限するように選択されていない可能性があり、そのような本発明の主題を決定するのに必要となる特許請求の範囲を採用し得る。本明細書において、「1つの実施形態」又は「一実施形態」への参照は、複数の実施形態に関連して説明される特定の特徴、構造、又は特性が、本発明の少なくとも1つの実施形態に含まれることを意味する。「1つの実施形態」又は「一実施形態」への複数の参照は、必ずしもすべてが同じ実施形態への参照と理解されるべきではない。
本明細書で用いられるように、「プログラマブルデバイス」という用語は、単一のプログラマブルデバイス、又は、プログラマブルデバイス上で又はプログラマブルデバイスによって実行されると説明された機能を実行すべく共に動作する複数のプログラマブルデバイスを指し得る。
ここで図1を参照すると、以下で説明される複数の手法が実装され得る例示的なインフラ100が概略的に図示される。インフラ100は、コンピュータネットワーク102を含む。コンピュータネットワーク102は、インターネット、企業ネットワーク、又はローカルエリアネットワーク(LAN)などの現在利用可能な多くの異なる種類のコンピュータネットワークを含んでよい。これらのネットワークのそれぞれは、有線又は無線のプログラマブルデバイスを含み、任意の数のネットワークプロトコル(例えば、TCP/IP)を用いて動作し得る。ネットワーク102は、(108で表わされる)複数のゲートウェイ及びルータ、エンドユーザコンピュータ106、並びにコンピュータサーバ104に接続され得る。インフラ100は、複数のモバイル通信デバイスと共に用いるセルラーネットワーク103も含む。モバイルセルラーネットワークは、複数の携帯電話及び多くの他の種類のデバイスをサポートする。インフラ100の中の複数のモバイルデバイスは、携帯電話110、ラップトップ112、タブレット114として図示される。
以下で説明される複数のヒューリスティックは、CALL命令を利用する。複数のCALL命令仕様書に従って、CALL命令は実行をターゲットアドレスに転送し、次の命令のアドレスもスタックに保管する。そのアドレスは、リターンアドレスとしても知られている。リターンアドレスはランタイム時のコードの状態を知るのに用いられ得る。以下に説明される複数の手法は、リターンアドレスを取得すべく、バイナリにおいてアプリケーションプログラミングインタフェース(API)コールをフックし、次に、ランタイム時にアンパック済みコードを特定すべく、2つのヒューリスティックを用いる。
複数のAPIコールは、アンパッキングスタブ及びパック済み実行可能ファイルを含むバイナリにおいてアンパック済みコードを検出する基本メカニズムとして働く。したがって、自己解凍式実行可能ファイルであるバイナリをアンパックするのに必要な時間は、アンパッキングスタブにおける複数のAPIコールの分散に正比例する。試験において、我々の複数のヒューリスティックが、以前に提案された複数の解決手段よりはるかに高速なのは、我々がAPIコール毎に30〜40回多い命令を単に実行するからであり、これにより、従来の複数の手法のオーバヘッドの大部分が省かれる。我々の複数のヒューリスティックの別の利点は、各バイナリが複数のAPIをコールするので、結果がより正確な結果になるということである。複数の実験結果において、我々の複数のヒューリスティックは、既知及び未知のパッカーでパックされた複数のサンプルを700ミリ秒未満で完全にアンパックすることが可能であることが見出だされた。図2は、様々な既知のパッカーでパックされたバイナリをアンパックするのに、我々のヒューリスティックが要した時間を図示するチャートである。この時間には、我々の複数のヒューリスティック手法を実行するのに用いられたコードの実行時間だけでなく、アンパッカー自体の実行時間も含まれる。パック済みバイナリのアンパッキングは、複数のレベルのアンパッキングを伴い得て、それぞれは、異なるアンパッカーを用いる可能性がある。以下に説明される複数のヒューリスティック手法は、バイナリに埋め込まれたアンパッカーが動作する方法を変更することも、特定のアンパッカーの任意の知識に依存することもない。むしろ、これらのヒューリスティック手法は、いつアンパッキングが完了したかを検出することを可能にし、これにより、マルウェア検出の解析は、アンパック済みコード上で安全に開始し得る。
第1のヒューリスティック手法は、新たなメモリ割り当てを監視する。このヒューリスティックは、すべてのメモリ割り当ての表を作成し、各割り当ての開始アドレス及び終了アドレスを格納する。その後、我々は各APIのリターンアドレスを、予め入力された割り当て表を使ってスキャンする。リターンアドレスが表項目にある場合には、我々はアンパック済みコードを実行する。
第2のヒューリスティック手法は、バイナリマッピングである。このヒューリスティックは、バイナリ(「パッシブバイナリイメージ」)をメモリにマッピングし、同じバイナリ(「アクティブバイナリイメージ」)を実行する。アクティブバイナリイメージから、我々は複数のAPIコールのためのリターンアドレスを取り出し、リターンアドレスにおける複数のバイトを、パッシブバイナリイメージの同じアドレスにおける複数のバイトと照合する。複数のバイトが異なる場合には、我々はアンパック済みコードを実行する。
マルウェアをアンパッキングするための両方のヒューリスティックは、複数の粗粒度APIコールに基づいている。我々は、複数のバイナリをアンパックすべく、複数のAPIをフックする。以下に説明される複数のAPIコールは、複数のメモリ割り当てAPIであるが、フックするAPIの種類は設定可能であり得て、制約条件ではない。例えば、リアルタイム検出システムの実施形態において、複数のAPIは、関心のある特定のセットのAPIに限定され得る。自動化されたマルウェア解析システムの実施形態において、別の例では、すべてのシステム関連API(レジストリ、ファイルシステム、プロセス、ネットワーク)はフックされ得る。別の例において、kernel32.dllのすべてのAPIはフックされる。任意の所望されるセットのAPIがフックされてよい。
図3及び図4に図示される第1のヒューリスティックは、新たなメモリ割り当てを監視する。図3は、320〜350の4つの項目を持つ、メモリ割り当て表310を図示する。以下により詳細に説明されるように、実行コード300は、「CALL CreateFileA」命令をメモリ位置0x00601024に含み、続いて、「MOV EBX,EAX」命令をリターンアドレスに含む。図3の例において、リターンアドレス0x0060129は表項目330に見られるので、ヒューリスティックは、アンパック済みコードが実行されていると決定する。
図4は、1つの実施形態に従って第1のヒューリスティック手法を図示するフローチャートである。ブロック410において、複数のAPIがフックされる。上述されたように、いくつかの実施形態において、複数のシステム関連APIがフックされ得て、複数の他の実施形態においては、kernel32.dllのすべてのエクスポートされたAPIがフックされ得る。複数の他のAPIは、所望通りにフックされ得る。このアプローチにおいて、バイナリによって行われた複数のメモリ割り当ては追跡され得る。1つの実施形態において、LocalAlloc、HeapAlloc、VirtualAlloc、mallocなどのための割り当てAPIをフックすることによって、追跡は実現される。更なる実施形態において、複数の他の割り当てAPIと共にVirtualProtectのAPIもフックされ得る。
メモリ割り当てを説明する情報は、表310に格納され得て、複数の割り当てポインタ及び割り当てサイズを含み得る。任意の所望されるデータ構造又は複数のデータ構造は、複数の割り当てポインタ及び割り当てサイズを、表310に格納するために用いられ得て、データは、任意の所望されるフォーマットで格納され得る。複数の割り当てポインタ及び割り当てサイズのみが本明細書で参照されるが、他の割り当て関連データも取り込まれ割り当て表310に格納され得る。
次に、フックされた複数のAPIのそれぞれがコールされると、ブロック420〜480が実行される。ブロック425において、APIが新たなメモリ領域を割り当てるのに用いられる複数のフックされた割り当てAPIのうちの1つである場合に、ブロック430において、割り当て表310は更新される。次に、ブロック440において、予め入力された表310をスキャンすることによって、各APIコールのリターンアドレスが解析され得る。割り当て表310を検索する任意の手法が、所望通りに用いられ得る。ブロック450において決定されるように、リターンアドレスが予め割り当てられたメモリ領域に含まれる場合には、ブロック460において、割り当てポインタはアンパック済みコードを保持し、複数の処置が所望通りに取られ得る。ヒューリスティック手法がアンパック済みコードを発見するとすぐに、複数のマルウェア検出アルゴリズムがアンパック済みバイナリ上で実行され得る。1つの実施形態において、アンパッキングが記録され得る。汎用的なアンパッキング後に、バイナリ上でマルウェア検出を実行するために、実行処理は、ダンプイメージとして解析用にダンプされ得る。新たに発見されたアンパック済みコードは、ブロック470において、新たなセクションとしてダンプイメージに追加されて、バイナリの整合を維持するのが好ましい。したがって、ダンプイメージは、マルウェアを探すためにスキャンされ得るアンパック済み実行可能ファイルを含む。
以下の第2のヒューリスティックの検討において、「アクティブバイナリイメージ」という用語は、メモリに現在マッピングされていて実行状態にあるイメージとして定義される。「パッシブバイナリイメージ」という用語は、メモリに現在マッピングされているが、実行状態にはない、アクティブバイナリイメージに用いられるのと同じバイナリイメージとして定義される。「実行環境」という用語は、パック済みバイナリを実行するログラム、又は、何らかの方法でバイナリと、例えば、パック済みバイナリに読み込まれた動的リンクライブラリ(DLL)とインタラクトするプログラムとして定義される。
第2のヒューリスティックにおいて、パック済みバイナリが実行され(アクティブバイナリイメージ)、また後の参照のために別の位置にマッピングされる(パッシブバイナリイメージ)。様々な実施形態において、このことは、2つの異なる処理を作り出すことによって、又は、マルウェア検出システムのコードを用いてバイナリをマッピングすることによって行われ得る。2つの異なる処理を作り出す一実施形態において、一方のバイナリのみが実際に実行されるが、他方の処理は、例えば、その処理をエントリポイントで再開状態に保持することによって、一時停止している。同じバイナリの2つの処理を作り出すことは、いくつかの危険な影響を有し得るので、概して好ましくない。以下の検討は、複数のバイナリイメージが、マルウェア検出システムのコードを用いてマッピングされているシステムの観点から記述されている。
実行環境は、メモリにパッシブバイナリイメージをマッピングするのが好ましいが、様々な状況に応じて、実行環境は、バイナリを好ましいアドレスに、すなわち、バイナリのベースアドレスにマッピング可能であっても、可能でなくてもよい。例えば、複数のヒューリスティックがDLLに実装されている場合には、パッシブイメージはベースアドレスにマッピングされることができない。その理由は、アドレスが既にアクティブバイナリイメージに占有されているからである。しかし、複数のヒューリスティックがサンドボックス又はデバッガに実装されている場合には、パッシブイメージはベースアドレスにマッピング可能であり得る。
アクティブバイナリイメージから、第2のヒューリスティックは複数のAPIコールのリターンアドレスを記録して、次に、リターンアドレスの複数のバイトをパッシブバイナリイメージにおける同じ位置の複数のバイトと比較する。アクティブバイナリイメージ及びパッシブバイナリイメージにおけるリターンアドレスの複数のバイトが同一である場合には、アクティブバイナリイメージは、依然としてパック済み領域から実行することになる。複数のバイトが異なる場合には、アクティブバイナリイメージはアンパック済み領域から実行することになる。しかしながら、アクティブイメージとパッシブイメージの両方のベースアドレスが異なる場合には、アドレス変換が実行され得る。例えば、アクティブバイナリイメージが0x00400000にマッピングされ、パッシブバイナリイメージが0x00500000にマッピングされる場合には、アクティブバイナリイメージからのアドレス0x00401000は、パッシブバイナリイメージにおける0x00501000で発見され得る。
図5は、1つの実施形態に従って第2のヒューリスティックを図示するブロック図である。上述されたように、バイナリの2つのコピーが用いられる。パッシブバイナリイメージ510はメモリに読み込まれて、実行前に保存される。アクティブバイナリイメージは、実際に実行されるバイナリのコピーである。実行中、APIコールが行われる。この例では、コール530のリターンアドレスに「MOV EBX,EAX」命令(540)を有する「Call CreateFileA」(530)である。第2のヒューリスティックは、アクティブバイナリイメージ520におけるリターンアドレス540のデータを、パッシブバイナリイメージ510における同じアドレス(560)のデータと比較する。位置560のデータがアクティブバイナリイメージにおけるアドレス540のデータと異なる場合、つまり、この例のように、「Push 0」命令がパッシブバイナリイメージにおいて発見される場合には、我々はアンパック済みコードを実行する。次に、アクティブバイナリイメージは、第1のヒューリスティックの場合のように、マルウェア解析のためにダンプされ得る。
しかしながら、上述されたように、2つのイメージのベースアドレスが同一でない場合には、アクティブバイナリイメージ520におけるアドレスが、パッシブバイナリイメージ510におけるアドレスと同一でなくてもよい。このシナリオにおいて、図5のブロック550によって示されるように、アドレス変換が実行され得る。
図6は、1つの実施形態に従って、実行環境によって複数のAPIコールに設定されるフックにより、第2のヒューリスティックにおいて実行される解析を図示するフローチャートである。図6では、以下の表記が用いられる。
RAA:アクティブバイナリイメージから記録されたリターンアドレス。
RAP:パッシブバイナリイメージにおけるRAA均等物。
RVA:相対仮想アドレス。
Sec[i]A:アクティブバイナリイメージにおけるi番目セクションの仮想アドレス。
Sec[i]P:パッシブバイナリイメージにおけるi番目セクションの仮想アドレス。
Sec[i]A.size:アクティブバイナリイメージにおけるi番目セクションのサイズ(Sec[i+1]A−Sec[i]A)。
imagesize:メモリ中のアクティブバイナリイメージのサイズ。
BAA:アクティブバイナリイメージのベースアドレス。
BAP:パッシブバイナリイメージのベースアドレス。
data(address):アドレス−2から取り出されたデータの3バイト。例えば、RAAがアドレスの場合には、この操作はRAA−2から開始するデータの3バイトを取り出す。
copy(dst,src,size):送信元アドレスから送信先アドレスまでのサイズバイトのコピー。
ここで図6を参照すると、ブロック610において、フックされたAPIコールからリターンアドレスが検出されるたびに、図示される手法が実行される。アクティブバイナリイメージにおけるリターンアドレスは記録され、以下に説明される計算に用いられる。
アクティブバイナリイメージ520から記録されたリターンアドレスは、ブロック610において、アクティブバイナリイメージ520のベースアドレスと比較される。リターンアドレスがアクティブバイナリイメージ以外のアドレスを示す場合には、このリターンアドレスは無視され得て、アンパッキングが継続して行われる。
次に、ブロック620において、相対仮想アドレス、すなわち、ベースアドレスからのオフセットが、アクティブイメージのリターンアドレスRAAに対して計算される。次に、オフセットはブロック630において用いられ、オフセットをパッシブバイナリイメージのベースアドレスに加えることによって、パッシブバイナリイメージにおけるリターンアドレスのアドレスを決定する。
ブロック640において、アクティブバイナリイメージ及びパッシブバイナリイメージの両方のリターンアドレスにおけるデータが比較される。両方のイメージにおけるリターンアドレスのデータが同じ場合には、このリターンアドレスは無視され得て、アンパッキングが継続して行われる。しかしながら、リターンアドレスのデータが両方のイメージの間で異なる場合には、アンパッキングが行われ、アクティブバイナリイメージにおけるその位置が、実行された場合に、アンパック済みコードを実行することになる。これにより、ブロック650〜680が、アクティブバイナリイメージの各セクションに対して実行され、リターンアドレスを含むアクティブバイナリイメージのセクションをパッシブバイナリイメージにコピーする。
ブロック660において、考慮されるセクションの終了アドレスが計算される。リターンアドレスがセクションのアドレスの範囲にない場合には、ブロック670において決定されるように、セクションは無視され、次のセクションがもしあれば考慮される。
リターンアドレスが現在のセクションにある場合には、ブロック672において、アクティブバイナリイメージのベースアドレスをセクションの開始アドレスから差し引くことによって、パッシブバイナリイメージの対応するセクションへのオフセットが計算される。次に、ブロック674において、そのオフセットは、パッシブバイナリイメージの対応するセクションのベースアドレスに加えられ、パッシブバイナリイメージのセクションの開始アドレスを決定する。次に、ブロック676において、リターンアドレスを含むアクティブバイナリイメージのセクションは、ブロック676におけるパッシブバイナリイメージの対応するセクションにコピーされる。これで、パッシブバイナリイメージはアンパック済みコードで更新されることが可能になり、これにより、アンパック済み実行可能ファイルを含むパッシブバイナリイメージは、マルウェア検出システムによって解析され得る。
様々な実施形態は、第1及び第2のヒューリスティックの一方又は両方を実装し得る。アンパック済みコードが実行されていることが検出された後に、アンパック済み実行可能ファイルは、マルウェア検出システムによって、マルウェアを探すためにスキャンされ得る。マルウェアを探すためにアンパック済み実行可能ファイルをスキャンすべく、マルウェア検出システムによって用いられる複数の特定の解析手法は、本開示の範囲外であり、更に説明されることはない。
ここで図7を参照すると、1つの実施形態に従って、ブロック図は、上述された複数の汎用的なアンパッキング手法を利用し得る、プログラマブルデバイス700を図示する。図7に図示されるプログラマブルデバイスは、第1の処理要素770及び第2の処理要素780を含むマルチプロセッサのプログラマブルデバイス700である。2つの処理要素770及び780が示されるが、プログラマブルデバイス700の一実施形態は、そのような処理要素を1つだけ含むこともあり得る。
プログラマブルデバイス700はポイントツーポイント相互接続システムとして図示され、その中で、第1の処理要素770及び第2の処理要素780が、ポイントツーポイント相互接続750を介して連結される。図7に図示される複数の相互接続の何れか又はすべては、ポイントツーポイント相互接続ではなく、マルチドロップバスとして実装されてよい。
図7に図示されるように、各処理要素770及び780は第1及び第2のプロセッサコア(すなわち、プロセッサコア774A及び774B、並びにプロセッサコア784A及び784B)を含むマルチコアプロセッサであってよい。そのようなコア774A、774B、784A、784Bは、図1〜図3に関連して上述されたものと同様の態様で、命令コードを実行するよう構成され得る。しかしながら、複数の他の実施形態は、所望通りに、複数の単一コアプロセッサである複数の処理要素を用い得る。複数の処理要素770、780を有する複数の実施形態において、各処理要素は、異なる数のコアを所望通りに伴って実装され得る。
各処理要素770、780は少なくとも1つの共有キャッシュ746を含み得る。共有キャッシュ746A、746Bは、コア774A、774B、及び、784A、784Bなど、処理要素の1又は複数の構成要素によってそれぞれ利用されるデータ(例えば、複数の命令)を格納し得る。例えば、共有キャッシュは、処理要素770、780の複数の構成要素がより高速にアクセスするために、メモリ732、734に格納されたデータをローカルにキャッシュし得る。1又は複数の実施形態において、共有キャッシュ746A、746Bは、レベル2(L2)、レベル3(L3)、レベル4(L4)、又は他の複数のレベルのキャッシュなどの1又は複数の中間レベルキャッシュ、最終レベルキャッシュ(LLC)、又はこれらの複数の組み合わせを含み得る。
図7は、図面の明瞭さのために、2つの処理要素770、780を有するプログラマブルデバイスを図示するが、本発明の範囲はそのように限定されるものではなく、任意の数の処理要素が存在してよい。代替的に、処理要素770、780のうちの1又は複数は、グラフィック処理ユニット(GPU)、デジタル信号処理(DSP)ユニット、フィールドプログラマブルゲートアレイ、又は任意の他のプログラマブル処理要素など、プロセッサ以外の要素であってよい。処理要素780は、処理要素770と異種又は非対称であってよい。処理要素770と780との間には、アーキテクチャ上の特徴、マイクロアーキテクチャ上の特徴、熱特性、消費電力特性などを含む、多岐にわたるメトリックの測定基準の観点から様々な違いがあり得る。これらの違いは、非対称性及び異種性として、処理要素770、780の間に効果的に現れ得る。いくつかの実施形態において、様々な処理要素770、780は、同じダイパッケージの中に存在し得る。
第1の処理要素770は、メモリコントローラロジック(MC)772、並びにポイントツーポイント(P―P)相互接続776及び778を更に含み得る。同様に第2の処理要素780は、MC782、並びにP―P相互接続786及び788を含み得る。図7に図示されるように、MC772及び782は、処理要素770、780をそれぞれのメモリ、即ちメモリ732及びメモリ734に連結する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。MCロジック772及び782は、処理要素770、780に統合されているように図示されるが、いくつかの実施形態において、MCロジックはその中に統合されるのではなく、処理要素770、780の外部の別個のロジックであり得る。
処理要素770及び処理要素780は、P―P相互接続776、786、及び784をそれぞれ介して、I/Oサブシステム790に連結され得る。図7に図示されるように、I/Oサブシステム790は、P―P相互接続794及び798を含む。更に、I/Oサブシステム790は、インタフェース792を含み、I/Oサブシステム790を高性能グラフィックエンジン738と連結する。1つの実施形態において、バス739は、グラフィックエンジン738をI/Oサブシステム790に連結するのに用いられ得る。あるいは、ポイントツーポイント相互接続739がこれらの構成要素を連結し得る。
次に、I/Oサブシステム790は、インタフェース796を介して第1のリンク716に連結され得る。1つの実施形態において、第1のリンク716は周辺構成要素相互接続(PCI)バス、又は、PCIエクスプレスバス又は別のI/O相互接続バスなどのバスであってよいが、本発明の範囲をそのように限定するものではない。
図7に図示されるように、様々なI/Oデバイス714は、第1のリンク716を第2のリンク710に連結し得るブリッジ718と共に、第1のリンク716に連結され得る。1つの実施形態において、第2のリンク710は、ローピンカウント(LPC)バスであってよい。1つの実施形態において、例えば、キーボード/マウス712、通信デバイス726(これは次にコンピュータネットワーク703と通信し得る)、及び、コード730を含み得るディスクドライブ又は他の大容量記憶装置などのデータストレージユニット728など、様々なデバイスが第2のリンク710に連結され得る。コード730は、上述された複数の手法のうちの1又は複数の実施形態を実行するための複数の命令を含み得る。更に、オーディオI/O714が、第2のバス710に連結され得る。
複数の他の実施形態が企図されることに留意されたい。例えば、図7のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は別の同様の通信トポロジを実装し得る。リンク716及び710は、図7において複数のバスとして図示されるが、任意の所望される種類のリンクが用いられ得る。また、図7の複数の要素は、図7に図示されるよりも多い又は少ない複数の統合チップを用いて、代替的に区分けされ得る。
ここで図8を参照すると、別の実施形態に従って、ブロック図がプログラマブルデバイス800を図示する。図7の複数の特定の態様が、図8の複数の他の態様を不明瞭にするのを回避すべく、図8から省略されている。
図8は、処理要素870、880が統合メモリ並びにI/Oコントロールロジック(「CL」)872及び882をそれぞれ含み得ることを図示している。いくつかの実施形態において、CL872、882は、図7に関連して上述されたようなメモリコントロールロジック(MC)を含み得る。更に、CL872、882は、I/Oコントロールロジックも含み得る。図8は、メモリ832、834がCL872、882に連結され得るだけでなく、複数のI/Oデバイス844もコントロールロジック872、882に連結され得ることを図示する。レガシI/Oデバイス815は、I/Oサブシステム890に連結され得る。
図7及び図8に図示される複数のプログラマブルデバイスは、本明細書で説明される様々な実施形態を実行するのに利用され得る複数のプログラマブルデバイスの複数の実施形態の複数の略図である。図7及び図8に図示される複数のプログラマブルデバイスの様々な構成要素は、システムオンチップ(SoC)のアーキテクチャに結合され得ることが理解されるであろう。
以下の複数の例は、更なる複数の実施形態に関する。
例1は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、プログラマブルデバイスに、第1のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、アンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いてアンパッキングスタブの完了を検出させる複数の命令を含む。1又は複数のヒューリスティックは、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
例2は例1の主題を含み、媒体に格納された複数の命令は、実行された場合に、プログラマブルデバイスに、マルウェアを探すためにアンパック済み実行可能ファイルをスキャンさせる複数の命令を更に含む。
例3は例1の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
例4は例1の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
例5は例1から4の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例6は例1から4の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例7は例6の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例8は例1から4の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例9は例8の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例10はマルウェアを検出するためのシステムであり、1又は複数の処理要素と、1又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、1又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第1のアンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて第1のアンパッキングスタブの完了を検出させる。1又は複数のヒューリスティックは、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
例11は例10の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
例12は例10の主題を含み、複数の命令は、実行された場合に、プログラマブルデバイスに、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を更に含む。
例13は例10の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
例14は例10の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
例15は例10から14の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例16は例10から14の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例17は例16の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例18は例10から14の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例19は例18の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例20は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
例21は例20の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードは実行されていると決定する段階を含む。
例22は例21の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって、メモリの割り当て上にメモリ割り当てデータを取り込む段階を更に含む。
例23は例21の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリをパッシブイメージとしてメモリにマッピングして、パック済みバイナリをアクティブイメージとして実行する段階と、パッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージの中のリターンアドレスにおけるメモリコンテンツと比較する段階とを含む。
例24は例23の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、アクティブイメージの中のリターンアドレスを、パッシブイメージの中のリターンアドレスに変換する段階を更に含む。
例25は、例20から24において説明された方法を実行するための手段を含むシステムである。
例26はプログラマブルデバイスであり、処理要素と、メモリと、第1のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルを処理要素によって、実行のためにメモリに読み込むモジュールと、処理要素によって実行された場合に、アンパッキングスタブが、パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にするモジュールと、アンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて、アンパッキングスタブの完了を検出するモジュールとを含み、1又は複数のヒューリスティックは、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数のモジュールを含む。
例27は例26の主題を含み、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンするモジュールを更に含む。
例28は例26の主題を含み、プログラマブルデバイスにアプリケーションプログラミングインタフェースコールを検出させるモジュールは、システム関連ののアプリケーションプログラミングインタフェースコールを検出するモジュールを含む。
例29は例26の主題を含み、プログラマブルデバイスにアプリケーションプログラミングインタフェースコールを検出させるモジュールは、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出するモジュールを含む。
例30は例26から29の何れかの主題を含み、リターンアドレスに基づいて、プログラマブルデバイスにアンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させるモジュールを含む。
例31は例26から29の何れかの主題を含み、プログラマブルデバイスにアプリケーションプログラミングインタフェースコールを検出させるモジュールは、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリに割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させるモジュールを含む。
例32は例31の主題を含み、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させるモジュールを含む。
例33は例26から29の何れかの主題を含み、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させるモジュールを含む。
例34は例33の主題を含み、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させるモジュールを更に含む。
例35はマルウェアを検出するためのシステムであり、1又は複数の処理要素と、1又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、1又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第1のアンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて第1のアンパッキングスタブの完了を検出させる。1又は複数のヒューリスティックは、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
例36は例35の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
例37は例35の主題を含み、複数の命令は、実行された場合に、プログラマブルデバイスに、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を更に含む。
例38は例35の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
例39は例35の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
例40は例35から39の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例41は例35から39の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例42は例41の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例43は例35から39の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例44は例43の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例45は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
例46は例45の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードは実行されていると決定する段階を含む。
例47は例46の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによるメモリの割り当て後に、メモリ割り当てデータを取り込む段階を更に含む。
例48は例46の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリをパッシブイメージとしてメモリにマッピングして、パック済みバイナリをアクティブイメージとして実行する段階と、パッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージの中のリターンアドレスにおけるメモリコンテンツと比較する段階とを含む。
例49は例48の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、アクティブイメージの中のリターンアドレスを、パッシブイメージの中のリターンアドレスに変換する段階を更に含む。
例50は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、機械に例45から49に説明される方法を実行させる。
例51は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、プログラマブルデバイスに、第1のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、アンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いてアンパッキングスタブの完了を検出させる複数の命令を含む。1又は複数のヒューリスティックは、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
例52は例51の主題を含み、媒体に格納された複数の命令は、実行された場合に、プログラマブルデバイスに、マルウェアを探すためにアンパック済み実行可能ファイルをスキャンさせる複数の命令を更に含む。
例53は例51の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
例54は例51の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
例55は例51の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例56は例51の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例57は例56の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例58は例51の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例59は例58の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例60はマルウェアを検出するためのシステムであり、1又は複数の処理要素と、1又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、1又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第1のアンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて第1のアンパッキングスタブの完了を検出させる。1又は複数のヒューリスティックは、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
例61は例60の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
例62は例60の主題を含み、複数の命令は、実行された場合に、プログラマブルデバイスに、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を更に含む。
例63は例60の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
例64は例60の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
例65は例60の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例66は例60の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例67は例66の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例68は例60の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例69は例68の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例70は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
例71は例70の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードは実行されていると決定する段階を含む。
例72は例71の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって、メモリの割り当て上にメモリ割り当てデータを取り込む段階を更に含む。
例73は例71の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリをパッシブイメージとしてメモリにマッピングして、パック済みバイナリをアクティブイメージとして実行する段階と、パッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージの中のリターンアドレスにおけるメモリコンテンツと比較する段階とを含む。
例74は例73の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、アクティブイメージの中のリターンアドレスを、パッシブイメージの中のリターンアドレスに変換する段階を更に含む。
例75は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、プログラマブルデバイスに、第1のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、アンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いてアンパッキングスタブの完了を検出させる複数の命令を含む。1又は複数のヒューリスティックは、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
例76は例75の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例77は例75の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例78は例75から77の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例79は例75の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例80は例79の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例81はマルウェアを検出するためのシステムであり、1又は複数の処理要素と、1又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、1又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第1のアンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて第1のアンパッキングスタブの完了を検出させる。1又は複数のヒューリスティックは、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させ、任意選択で、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を含む。
例82は例81の主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
例83は例81又は82の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例84は例81又は82の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、1又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
例85は例84の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの1つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例86は例81又は82の何れかの主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
例87は例86の主題を含み、実行された場合に、1又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、1又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
例88は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、任意選択でアンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
例89は例88の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定する段階、又はメモリにマッピングされた、パック済みバイナリのパッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージとして実行するパック済みバイナリの中のリターンアドレスにおけるメモリコンテンツと比較する段階のうちの1つを含む。
上記の説明は例示であり、限定を意図するものではないことが理解されるべきである。例えば、上述された複数の実施形態は、互いと組み合わせて用いられてよい。多くの他の実施形態は、上記の説明を検討するとすぐに、当業者には明らかになるであろう。したがって、本発明の範囲は、添付の特許請求の範囲を参照し、そのような特許請求の範囲が権利を与えられる均等物の全範囲と共に、決定されるべきである。

Claims (26)

  1. ログラマブルデバイスに、
    第1のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込む手順と
    前記第1のアンパッキングスタブが、前記パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする手順と
    前記第1のアンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて、前記第1のアンパッキングスタブの完了を検出する手順と
    を実行させ
    前記1又は複数のヒューリスティックは前記プログラマブルデバイスに、
    アプリケーションプログラミングインタフェースコールを検出する手順と
    前記アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定する手順と
    前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する手順と
    を実行させる
    プログラム
  2. 記プログラマブルデバイスに、前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする手順を更に実行させる
    請求項1に記載のプログラム
  3. プリケーションプログラミングインタフェースコールを検出する前記手順システム関連のアプリケーションプログラミングインタフェースコールを検出する手順を有する、
    請求項1に記載のプログラム
  4. プリケーションプログラミングインタフェースコールを検出する前記手順予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出する手順を有する、
    請求項1に記載のプログラム
  5. 記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は
    前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるか否かを決定する手順と
    前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定する手順と
    有する、
    請求項1から4の何れか一項に記載のプログラム
  6. プリケーションプログラミングインタフェースコールを検出する前記手順は
    前記自己解凍式実行可能ファイルによって、メモリの割り当てを検出する手順と
    メモリの前記割り当てに対応するメモリ割り当てデータを記録する手順と
    有する、
    請求項1から4の何れか一項に記載のプログラム
  7. 記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は
    前記メモリ割り当てデータに基づいて、メモリの前記記録された複数の割り当てのうちの1つに前記リターンアドレスがあるか否かを決定する手順と
    メモリの前記記録された複数の割り当てのうちの1つに前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定する手順と
    有する、
    請求項6に記載のプログラム
  8. 記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は
    アクティブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較する手順と
    前記比較に応答して、アンパック済みコードが実行されていると決定する手順と
    有する、
    請求項1から4の何れか一項に記載のプログラム
  9. 記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は、前記アクティブバイナリイメージの中の前記リターンアドレスを、前記パッシブバイナリイメージの中のアドレスに変換する手順を更に有する、
    請求項8に記載のプログラム
  10. マルウェアを検出するためのシステムであって、
    1又は複数の処理要素と、
    前記1又は複数の処理要素に連結され、複数の命令が格納されたメモリと、
    を備え、
    前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、
    第1のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、
    前記第1のアンパッキングスタブが前記パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、
    前記第1のアンパッキングスタブの知識に依存しない、1又は複数のヒューリスティックを用いて、前記第1のアンパッキングスタブの完了を検出させ、
    前記1又は複数のヒューリスティックは、実行された場合に、1又は複数の処理要素に、
    アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、
    前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる、複数の命令を有する、
    システム。
  11. 実行された場合に、1又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、前記自己解凍式実行可能ファイルによって検出させる、複数の命令を有する、
    請求項10に記載のシステム。
  12. 前記複数の命令は、実行された場合に、プログラマブルデバイスに、前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる、複数の命令を更に有する、
    請求項10に記載のシステム。
  13. 実行された場合に、前記1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、システム関連の複数のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を有する、
    請求項10に記載のシステム。
  14. 実行された場合に、前記1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を有する
    請求項10に記載のシステム。
  15. 実行された場合に、前記1又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、
    前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるか否かを決定させ、
    前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定させる、
    複数の命令を有する、
    請求項10から14の何れか一項に記載のシステム。
  16. 実行された場合に、前記1又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、
    前記自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、
    メモリの前記割り当てに対応するメモリ割り当てデータを記録させる、
    複数の命令を有する、
    請求項10から14の何れか一項に記載のシステム。
  17. 実行された場合に、前記1又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、
    前記メモリ割り当てデータに基づいて、メモリの前記記録された複数の割り当てのうちの1つに前記リターンアドレスがあるか否かを決定させ、
    メモリの前記記録された複数の割り当てのうちの1つに前記リターンアドレスがあるとの前記決定に応答して、アンパック済みコードが実行されていると決定させる、
    複数の命令を有する、
    請求項16に記載のシステム。
  18. 実行された場合に、前記1又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、
    アクティブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較させ、
    前記比較に応答して、アンパック済みコードが実行されていると決定させる、
    複数の命令を有する、
    請求項10から14の何れか一項に記載のシステム。
  19. 実行された場合に、前記1又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記1又は複数の処理要素に、前記アクティブバイナリイメージ中の前記リターンアドレスを、前記パッシブバイナリイメージ中のアドレスに変換させる複数の命令を更に有する、
    請求項18に記載のシステム。
  20. パック済みバイナリをアンパッキングする方法であって、
    前記パック済みバイナリをプログラマブルデバイスで実行する段階であって、前記パック済みバイナリのアンパッキングスタブが、前記パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、
    パック済みバイナリによってアプリケーションプログラミングインタフェースコールを検出する段階と、
    前記アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定する段階と、
    前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、
    前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階と、
    を備える、
    方法。
  21. アンパック済みコードが実行されているか否かを決定する段階は、
    前記パック済みバイナリによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定する段階を有する、
    請求項20に記載の方法。
  22. アンパック済みコードが実行されているか否かを決定する段階は、前記パック済みバイナリによるメモリの割り当て後に、メモリ割り当てデータを取り込む段階を更に有する、
    請求項21に記載の方法。
  23. アンパック済みコードが実行されているか否かを決定する段階は、
    前記パック済みバイナリをパッシブイメージとしてメモリにマッピングし、前記パック済みバイナリをアクティブイメージとして実行する段階と、
    前記パッシブイメージの中の前記リターンアドレスにおけるメモリコンテンツを、前記アクティブイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較する段階と、
    を有する、
    請求項21に記載の方法。
  24. アンパック済みコードが実行されているか否かを決定する段階は、
    前記アクティブイメージの中の前記リターンアドレスを、前記パッシブイメージの中のリターンアドレスに変換する段階を更に有する、
    請求項23に記載の方法。
  25. 請求項20から24の何れか一項に記載の方法を実行するための手段を有する、
    システム。
  26. 請求項1から9の何れか一項に記載のプログラムを格納する、
    コンピュータ可読記憶媒体。
JP2016533625A 2013-12-26 2014-12-23 プログラムバイナリの汎用的なアンパッキング Active JP6163678B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
IN610CH2013 2013-12-26
PCT/US2014/072158 WO2015100327A1 (en) 2013-12-26 2014-12-23 Generic unpacking of program binaries

Publications (2)

Publication Number Publication Date
JP2017504865A JP2017504865A (ja) 2017-02-09
JP6163678B2 true JP6163678B2 (ja) 2017-07-19

Family

ID=57989674

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2016533625A Active JP6163678B2 (ja) 2013-12-26 2014-12-23 プログラムバイナリの汎用的なアンパッキング

Country Status (1)

Country Link
JP (1) JP6163678B2 (ja)

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB2245726B (en) * 1990-06-29 1994-08-24 Sun Microsystems Inc Accessing an option board in a computer system
US7996904B1 (en) * 2007-12-19 2011-08-09 Symantec Corporation Automated unpacking of executables packed by multiple layers of arbitrary packers
JP5456715B2 (ja) * 2011-03-16 2014-04-02 日本電信電話株式会社 データ特定装置、データ特定方法及びデータ特定プログラム
JP4927231B1 (ja) * 2011-12-22 2012-05-09 株式会社フォティーンフォティ技術研究所 プログラム、情報機器、及び不正アクセス検出方法
US9471783B2 (en) * 2013-03-15 2016-10-18 Mcafee, Inc. Generic unpacking of applications for malware detection

Also Published As

Publication number Publication date
JP2017504865A (ja) 2017-02-09

Similar Documents

Publication Publication Date Title
US9811663B2 (en) Generic unpacking of applications for malware detection
KR101880375B1 (ko) 네트워크 활동을 보이는 실행파일들의 분리
US10311233B2 (en) Generic unpacking of program binaries
US8479174B2 (en) Method, computer program and computer for analyzing an executable computer file
US8424093B2 (en) System and method for updating antivirus cache
US20080059726A1 (en) Dynamic measurement of an operating system in a virtualized system
CN107111498B (zh) 利用图形虚拟化从/向主机计算机进行虚拟机的实时迁移
US7962959B1 (en) Computer resource optimization during malware detection using antivirus cache
US10102373B2 (en) Method and apparatus for capturing operation in a container-based virtualization system
JP5832954B2 (ja) タグ付与装置及びタグ付与方法
JP6734481B2 (ja) コールスタック取得装置、コールスタック取得方法、および、コールスタック取得プログラム
WO2018040270A1 (zh) 在Windows系统中加载Linux系统ELF文件的方法及装置
US10129275B2 (en) Information processing system and information processing method
JP5952218B2 (ja) 情報処理装置および情報処理方法
US10275595B2 (en) System and method for characterizing malware
CN113176926A (zh) 一种基于虚拟机自省技术的api动态监控方法及系统
JP6163678B2 (ja) プログラムバイナリの汎用的なアンパッキング
JP2006106939A (ja) 侵入検知方法及び侵入検知装置並びにプログラム
CN113268280B (zh) 动态加载插件的方法、装置及电子设备
JP2009205324A (ja) プロセッサ、メモリ装置、処理装置及び命令の処理方法
JP6687844B2 (ja) マルウエア解析装置、マルウエア解析方法及びマルウエア解析プログラム
JP5389733B2 (ja) 抽出装置及び抽出方法
JP2011248406A (ja) 抽出装置及び抽出方法

Legal Events

Date Code Title Description
A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20170419

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

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20170530

R150 Certificate of patent or registration of utility model

Ref document number: 6163678

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

S533 Written request for registration of change of name

Free format text: JAPANESE INTERMEDIATE CODE: R313533

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250