以下の説明において、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供すべく説明される。しかしながら、当業者には、これらの複数の具体的な詳細なしに、本発明が実施され得ることは明らかであろう。他の複数の例において、本発明を不明瞭にすることを回避すべく、構造及び複数のデバイスがブロック図の形態で示される。下付き文字又は添字のない数字への参照は、その参照された数字に対応する下付き文字及び添字のすべての例を参照するものと理解される。更に、本開示で用いられる言語は、読みやすさ及び教授の目的で主に選択されており、本発明の主題を詳述する、又は制限するように選択されていない可能性があり、そのような本発明の主題を決定するのに必要となる特許請求の範囲を採用し得る。本明細書において、「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つを含む。
上記の説明は例示であり、限定を意図するものではないことが理解されるべきである。例えば、上述された複数の実施形態は、互いと組み合わせて用いられてよい。多くの他の実施形態は、上記の説明を検討するとすぐに、当業者には明らかになるであろう。したがって、本発明の範囲は、添付の特許請求の範囲を参照し、そのような特許請求の範囲が権利を与えられる均等物の全範囲と共に、決定されるべきである。