(57)【要約】  実行環境において、複数のアプリケーションプログラミングインタフェースをフックすることによって、フックされた複数のアプリケーションプログラミングインタフェースコールに対するリターンアドレスが記録され、パック済みバイナリがいつアンパックされたかを決定するのに用いられ得る。１つのアプローチにおいて、複数のメモリ割り当てが検出され、リターンアドレスが、割り当てられた複数のメモリ領域に対して確認される。別のアプローチにおいて、実行可能バイナリの実行前コピーの中のリターンアドレスにおけるメモリのコンテンツが、バイナリの実行中のコピーの中のリターンアドレスにおけるメモリのコンテンツと比較される。これにより、アンパッキング手法の知識を持たずに、アンパッキングの完了を効率的に検出することが可能になる。次に、アンパック済みバイナリは、可能性のあるマルウェアを探すために解析され得る。
2017504865.tif 000002
【特許請求の範囲】
【請求項１】
複数の命令が格納された機械可読媒体であって、実行された場合に、プログラマブルデバイスに、
第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、
前記第１のアンパッキングスタブが、前記パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、
前記第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて、前記第１のアンパッキングスタブの完了を検出させる、
複数の命令を有し、
前記１又は複数のヒューリスティックは、実行された場合に、前記プログラマブルデバイスに、
アプリケーションプログラミングインタフェースコールを検出させ、
前記アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる、
複数の命令を有する、
機械可読媒体。
【請求項２】
前記機械可読媒体に格納された複数の命令は、実行された場合に、前記プログラマブルデバイスに、前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる、複数の命令を更に有する、
請求項１に記載の機械可読媒体。
【請求項３】
実行された場合に、前記プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を有する、
請求項１に記載の機械可読媒体。
【請求項４】
実行された場合に、前記プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を有する、
請求項１に記載の機械可読媒体。
【請求項５】
実行された場合に、前記プログラマブルデバイスに、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるか否かを決定させ、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１から４の何れか一項に記載の機械可読媒体。
【請求項６】
実行された場合に、前記プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、
前記自己解凍式実行可能ファイルによって、メモリの割り当てを検出させ、
メモリの前記割り当てに対応するメモリ割り当てデータを記録させる、
複数の命令を有する、
請求項１から４の何れか一項に記載の機械可読媒体。
【請求項７】
実行された場合に、前記プログラマブルデバイスに、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、
前記メモリ割り当てデータに基づいて、メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるか否かを決定させ、
メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項６に記載の機械可読媒体。
【請求項８】
実行された場合に、前記プログラマブルデバイスに、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、
アクティブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較させ、
前記比較に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１から４の何れか一項に記載の機械可読媒体。
【請求項９】
実行された場合に、前記プログラマブルデバイスに、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記プログラマブルデバイスに、前記アクティブバイナリイメージの中の前記リターンアドレスを、前記パッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に有する、
請求項８に記載の機械可読媒体。
【請求項１０】
マルウェアを検出するためのシステムであって、
１又は複数の処理要素と、
前記１又は複数の処理要素に連結され、複数の命令が格納されたメモリと、
を備え、
前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、
前記第１のアンパッキングスタブが前記パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、
前記第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて、前記第１のアンパッキングスタブの完了を検出させ、
前記１又は複数のヒューリスティックは、実行された場合に、１又は複数の処理要素に、
アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる、複数の命令を有する、
システム。
【請求項１１】
実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、前記自己解凍式実行可能ファイルによって検出させる、複数の命令を有する、
請求項１０に記載のシステム。
【請求項１２】
前記複数の命令は、実行された場合に、プログラマブルデバイスに、前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる、複数の命令を更に有する、
請求項１０に記載のシステム。
【請求項１３】
実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、システム関連の複数のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を有する、
請求項１０に記載のシステム。
【請求項１４】
実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を有する
請求項１０に記載のシステム。
【請求項１５】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるか否かを決定させ、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１０から１４の何れか一項に記載のシステム。
【請求項１６】
実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
前記自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、
メモリの前記割り当てに対応するメモリ割り当てデータを記録させる、
複数の命令を有する、
請求項１０から１４の何れか一項に記載のシステム。
【請求項１７】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
前記メモリ割り当てデータに基づいて、メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるか否かを決定させ、
メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるとの前記決定に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１６に記載のシステム。
【請求項１８】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
アクティブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較させ、
前記比較に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１０から１４の何れか一項に記載のシステム。
【請求項１９】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、前記アクティブバイナリイメージ中の前記リターンアドレスを、前記パッシブバイナリイメージ中のアドレスに変換させる複数の命令を更に有する、
請求項１８に記載のシステム。
【請求項２０】
パック済みバイナリをアンパッキングする方法であって、
前記パック済みバイナリをプログラマブルデバイスで実行する段階であって、前記パック済みバイナリのアンパッキングスタブが、前記パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、
パック済みバイナリによってアプリケーションプログラミングインタフェースコールを検出する段階と、
前記アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定する段階と、
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、
前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階と、
を備える、
方法。
【請求項２１】
アンパック済みコードが実行されているか否かを決定する段階は、
前記パック済みバイナリによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定する段階を有する、
請求項２０に記載の方法。
【請求項２２】
アンパック済みコードが実行されているか否かを決定する段階は、前記パック済みバイナリによるメモリの割り当て後に、メモリ割り当てデータを取り込む段階を更に有する、
請求項２１に記載の方法。
【請求項２３】
アンパック済みコードが実行されているか否かを決定する段階は、
前記パック済みバイナリをパッシブイメージとしてメモリにマッピングし、前記パック済みバイナリをアクティブイメージとして実行する段階と、
前記パッシブイメージの中の前記リターンアドレスにおけるメモリコンテンツを、前記アクティブイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較する段階と、
を有する、
請求項２１に記載の方法。
【請求項２４】
アンパック済みコードが実行されているか否かを決定する段階は、
前記アクティブイメージの中の前記リターンアドレスを、前記パッシブイメージの中のリターンアドレスに変換する段階を更に有する、
請求項２３に記載の方法。
【請求項２５】
請求項２０から２４の何れか一項に記載の方法を実行するための手段を有する、
システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本明細書で説明される複数の実施形態は、概してマルウェア検出に関し、具体的には、パック済みプログラムバイナリを作成するのに用いられるパッキング手法の知識を持たずに、パック済みプログラムバイナリをアンパッキングするための複数の手法に関する。
【背景技術】
【０００２】
一般的には、アプリケーションコードの現代の配信は、パッキング処理によって、その圧縮を含む。パッキング処理を用いることによって、バイナリファイルのサイズは圧縮され得て、複数のファイルは１つのファイルに結合され得る。現代のパッキング処理は、「自己解凍式実行可能ファイル」を作成する。これは、パック済みコードのコンテンツをアンパックすべく実行され得る。即ち、パック済みコードは、それ自体に実行可能コードセクション又はスタブを伴い、これが実行された場合に、パック済みコードを展開又は解凍することになる。従って、自己解凍式実行可能ファイルを実行することで、パック済みコード実行可能ファイルがディスク、メモリ、又はその両方に展開されることになり得る。
【０００３】
ファイルをパッキングして自己解凍式実行可能ファイルを作成する場合、多くの異なる種類の圧縮アルゴリズム及びパッキング手法が利用され得る。これらの中には、よく知られた確認済みのものもあるが、そうでないものもある。同じファイルに異なる複数の手法を利用して自己解凍式実行可能ファイルを作成することは、異なる複数のファイルをもたらすことになる。つまり、パッキングコード及びパック済みコードの両方は、異なるパッカー、及び異なる圧縮アルゴリズムによる様々な結果のために異なり得る。更に、未知の、又は未確認の複数の手法が、ファイルを自己解凍式実行可能ファイルにパックするのに用いられる場合に、パッキングコードとパック済みコードとの違いを決定することさえ困難になり得る。
【０００４】
複数の自己解凍式実行可能ファイルのこれらの特性は、複数のアンチウイルスプログラム又はマルウェア検出プログラムからマルウェアを見えないようにすべく、複数のマルウェア開発者に利用されることが多い。マルウェアを検出するための１つの一般的な方法は、署名スキャンである。署名スキャンを用いて、複数のファイルは、マルウェアと関連していることが知られている、又は疑われる複数のビットパターン又は署名を探すためにスキャンされる。ファイル中のビットパターンが、既知のマルウェアの署名に一致する場合、次にそのファイルは、マルウェアである、又はマルウェアを含むと特定され得る。しかしながら、悪意のある実行可能ファイルの署名は、その実行可能ファイルを分かりにくくする目的で、容易に変更され得る。マルウェアがパックされると、アンパック済みマルウェアの既知の署名は、パック済みマルウェアファイルのいかなるビットパターンにも一致しないので、検出は回避され得る。
【０００５】
マルウェアを見えないようにするこれらの取り組みに打ち勝とうとすべく、複数のアンチウイルスプログラム及びマルウェア検出プログラムは、複数の手法を利用し得る。１つの手法は、メモリ中のパック済みコードを、実行することなく解凍し、次にマルウェア署名用の非圧縮バイナリをスキャンしてみることである。パック済みコードは、その実行をエミュレートすることによって解凍され得る、又はパッキングアルゴリズムが既知である場合には、アンチウイルスプログラムによる解凍を実行することによって、解凍され得る。パッキング手法がよく知られてなく、確認済みでもない場合、アンチウイルスプログラムの管理下でパック済みコードを解凍することは、可能ではない場合がある。また、多くのパッキングアルゴリズムは、アンパッキングがデバッガによって、又は実行エミュレーションを通じて実行されていることが検出された後に、アンパッキング処理を簡単に終了させるべく、アンチエミュレーション及びアンチデバッグ手法を用いる。コードフローのタイムスタンプ部は、コードがエミュレートされていることを決定するのに用いられ得る標準的な方法である。同様に、コードがデバッグされていることを特定することは、オペレーティングシステムに問い合わせることによって、容易に決定され得る。
【０００６】
自己解凍式実行可能ファイルが、実行又はエミュレートされることを許可されているとしても、アンチウイルスプログラムは、アンパッキングの実行部分がいつ完了するか、及び最初に圧縮されていた実行可能ファイルがいつ実行を開始するかを決定することが困難である。自己解凍式実行可能ファイルにおいて、アンパッキングコード及びパック済み実行可能ファイルは、同じバイナリの一部であり、メモリ中の２つの違いを決定するのは困難になり得る。
【０００７】
マルウェアを見えないようにする取り組みに打ち勝つ別の手法は、マルウェアを含む既知の自己解凍式実行可能ファイルの署名を、そのようなパック済みマルウェアの新たな署名が特定されたらすぐに、アンチウイルス署名データベースに加えることである。この手法の欠点は、パッカーコード又はパッキング手法をわずかに変更して、別の自己解凍式実行可能ファイル、したがって別の署名を生じさせることによって、この手法が容易に回避され得るということである。複数のパッキング手法におけるこれらの変形の原因となる複数の署名をアンチウイルス署名データベースに追加することは、署名データベースのサイズを増加させる働きをする。これにより、署名の数、及び複数の署名ファイルを維持する困難さも、それ相応に増すという点において、問題が引き起こされる。更に、これらの取り組みは更に妨げられ得る。その理由は、パッキング処理が、異なる複数のパッキングアルゴリズムを異なる順番で用いて任意の回数繰り返され、特定して維持すべき更に多数の署名を生み出し得るからである。
【０００８】
バイナリのアンパッキングは、マルウェア検出、マルウェアのクラスタ化及び分類、解析の自動化及びリバースエンジニアリングの自動化に極めて重要になり得るので、アンチマルウェアソフトウェアの開発者たちは、ＰｏｌｙＵｎｐａｃｋ、Ｒｅｎｏｖｏ、及びＯｍｎｉＵｎｐａｃｋを含む、マルウェアの汎用的なアンパッキングへの様々なアプローチを試みている。しかしながら、以前のヒューリスティックなアプローチでは、アンパックされ得るパッキングの種類に限界があり、かなりの計算リソースを必要とし、高い偽陽性率を有する。ＰｏｌｙＵｎｐａｃｋ及びＲｅｎｏｖｏは、細粒度解析の変形に基づいており、この解析は最新のカスタムパッカーに対しては、非常に遅く不十分なアプローチである。一方、ＯｍｎｉＵｎｐａｃｋは、複雑な実装を有し、そのままの形態で用いられた場合に、非常に高い偽陽性率を生じさせる。より良好な汎用的なアンパッキングアプローチがあれば、役立つであろう。
【図面の簡単な説明】
【０００９】
本明細書に組み込まれ、その一部を構成する複数の添付図面は、本発明と一致した装置及び複数の方法の実装を詳細な説明と共に図示し、本発明と一致した複数の利点及び複数の本質を説明するのに役立つ。
【００１０】
【図１】１つの実施形態に従って、開示された複数の手法が実装され得るインフラを図示するブロック図である。
【００１１】
【図２】１つの実施形態に従って、様々な既知のパッカーに対するアンパッキング時間の例を図示するグラフである。
【００１２】
【図３】１つの実施形態に従って、バイナリを一般的にアンパッキングするためのヒューリスティック手法を図示するブロック図である。
【００１３】
【図４】１つの実施形態に従って、バイナリを一般的にアンパッキングするためのヒューリスティック手法を図示するフローチャートである。
【００１４】
【図５】１つの実施形態に従って、バイナリを一般的にアンパッキングするための別のヒューリスティック手法を図示するブロック図である。
【００１５】
【図６】図５のヒューリスティック手法を図示するフローチャートである。
【００１６】
【図７】１つの実施形態に従って、本明細書で説明される複数の手法とともに用いるためのプログラマブルデバイスを図示するブロック図である。
【００１７】
【図８】別の実施形態に従って、本明細書で説明される複数の手法とともに用いるためのプログラマブルデバイスを図示するブロック図である。
【発明を実施するための形態】
【００１８】
以下の説明において、説明の目的のために、多数の具体的な詳細が、本発明の完全な理解を提供すべく説明される。しかしながら、当業者には、これらの複数の具体的な詳細なしに、本発明が実施され得ることは明らかであろう。他の複数の例において、本発明を不明瞭にすることを回避すべく、構造及び複数のデバイスがブロック図の形態で示される。下付き文字又は添字のない数字への参照は、その参照された数字に対応する下付き文字及び添字のすべての例を参照するものと理解される。更に、本開示で用いられる言語は、読みやすさ及び教授の目的で主に選択されており、本発明の主題を詳述する、又は制限するように選択されていない可能性があり、そのような本発明の主題を決定するのに必要となる特許請求の範囲を採用し得る。本明細書において、「１つの実施形態」又は「一実施形態」への参照は、複数の実施形態に関連して説明される特定の特徴、構造、又は特性が、本発明の少なくとも１つの実施形態に含まれることを意味する。「１つの実施形態」又は「一実施形態」への複数の参照は、必ずしもすべてが同じ実施形態への参照と理解されるべきではない。
【００１９】
本明細書で用いられるように、「プログラマブルデバイス」という用語は、単一のプログラマブルデバイス、又は、プログラマブルデバイス上で又はプログラマブルデバイスによって実行されると説明された機能を実行すべく共に動作する複数のプログラマブルデバイスを指し得る。
【００２０】
ここで図１を参照すると、以下で説明される複数の手法が実装され得る例示的なインフラ１００が概略的に図示される。インフラ１００は、コンピュータネットワーク１０２を含む。コンピュータネットワーク１０２は、インターネット、企業ネットワーク、又はローカルエリアネットワーク（ＬＡＮ）などの現在利用可能な多くの異なる種類のコンピュータネットワークを含んでよい。これらのネットワークのそれぞれは、有線又は無線のプログラマブルデバイスを含み、任意の数のネットワークプロトコル（例えば、ＴＣＰ／ＩＰ）を用いて動作し得る。ネットワーク１０２は、（１０８で表わされる）複数のゲートウェイ及びルータ、エンドユーザコンピュータ１０６、並びにコンピュータサーバ１０４に接続され得る。インフラ１００は、複数のモバイル通信デバイスと共に用いるセルラーネットワーク１０３も含む。モバイルセルラーネットワークは、複数の携帯電話及び多くの他の種類のデバイスをサポートする。インフラ１００の中の複数のモバイルデバイスは、携帯電話１１０、ラップトップ１１２、タブレット１１４として図示される。
【００２１】
以下で説明される複数のヒューリスティックは、ＣＡＬＬ命令を利用する。複数のＣＡＬＬ命令仕様書に従って、ＣＡＬＬ命令は実行をターゲットアドレスに転送し、次の命令のアドレスもスタックに保管する。そのアドレスは、リターンアドレスとしても知られている。リターンアドレスはランタイム時のコードの状態を知るのに用いられ得る。以下に説明される複数の手法は、リターンアドレスを取得すべく、バイナリにおいてアプリケーションプログラミングインタフェース（ＡＰＩ）コールをフックし、次に、ランタイム時にアンパック済みコードを特定すべく、２つのヒューリスティックを用いる。
【００２２】
複数のＡＰＩコールは、アンパッキングスタブ及びパック済み実行可能ファイルを含むバイナリにおいてアンパック済みコードを検出する基本メカニズムとして働く。したがって、自己解凍式実行可能ファイルであるバイナリをアンパックするのに必要な時間は、アンパッキングスタブにおける複数のＡＰＩコールの分散に正比例する。試験において、我々の複数のヒューリスティックが、以前に提案された複数の解決手段よりはるかに高速なのは、我々がＡＰＩコール毎に３０〜４０回多い命令を単に実行するからであり、これにより、従来の複数の手法のオーバヘッドの大部分が省かれる。我々の複数のヒューリスティックの別の利点は、各バイナリが複数のＡＰＩをコールするので、結果がより正確な結果になるということである。複数の実験結果において、我々の複数のヒューリスティックは、既知及び未知のパッカーでパックされた複数のサンプルを７００ミリ秒未満で完全にアンパックすることが可能であることが見出だされた。図２は、様々な既知のパッカーでパックされたバイナリをアンパックするのに、我々のヒューリスティックが要した時間を図示するチャートである。この時間には、我々の複数のヒューリスティック手法を実行するのに用いられたコードの実行時間だけでなく、アンパッカー自体の実行時間も含まれる。パック済みバイナリのアンパッキングは、複数のレベルのアンパッキングを伴い得て、それぞれは、異なるアンパッカーを用いる可能性がある。以下に説明される複数のヒューリスティック手法は、バイナリに埋め込まれたアンパッカーが動作する方法を変更することも、特定のアンパッカーの任意の知識に依存することもない。むしろ、これらのヒューリスティック手法は、いつアンパッキングが完了したかを検出することを可能にし、これにより、マルウェア検出の解析は、アンパック済みコード上で安全に開始し得る。
【００２３】
第１のヒューリスティック手法は、新たなメモリ割り当てを監視する。このヒューリスティックは、すべてのメモリ割り当ての表を作成し、各割り当ての開始アドレス及び終了アドレスを格納する。その後、我々は各ＡＰＩのリターンアドレスを、予め入力された割り当て表を使ってスキャンする。リターンアドレスが表項目にある場合には、我々はアンパック済みコードを実行する。
【００２４】
第２のヒューリスティック手法は、バイナリマッピングである。このヒューリスティックは、バイナリ（「パッシブバイナリイメージ」）をメモリにマッピングし、同じバイナリ（「アクティブバイナリイメージ」）を実行する。アクティブバイナリイメージから、我々は複数のＡＰＩコールのためのリターンアドレスを取り出し、リターンアドレスにおける複数のバイトを、パッシブバイナリイメージの同じアドレスにおける複数のバイトと照合する。複数のバイトが異なる場合には、我々はアンパック済みコードを実行する。
【００２５】
マルウェアをアンパッキングするための両方のヒューリスティックは、複数の粗粒度ＡＰＩコールに基づいている。我々は、複数のバイナリをアンパックすべく、複数のＡＰＩをフックする。以下に説明される複数のＡＰＩコールは、複数のメモリ割り当てＡＰＩであるが、フックするＡＰＩの種類は設定可能であり得て、制約条件ではない。例えば、リアルタイム検出システムの実施形態において、複数のＡＰＩは、関心のある特定のセットのＡＰＩに限定され得る。自動化されたマルウェア解析システムの実施形態において、別の例では、すべてのシステム関連ＡＰＩ（レジストリ、ファイルシステム、プロセス、ネットワーク）はフックされ得る。別の例において、ｋｅｒｎｅｌ３２．ｄｌｌのすべてのＡＰＩはフックされる。任意の所望されるセットのＡＰＩがフックされてよい。
【００２６】
図３及び図４に図示される第１のヒューリスティックは、新たなメモリ割り当てを監視する。図３は、３２０〜３５０の４つの項目を持つ、メモリ割り当て表３１０を図示する。以下により詳細に説明されるように、実行コード３００は、「ＣＡＬＬ  ＣｒｅａｔｅＦｉｌｅＡ」命令をメモリ位置０ｘ００６０１０２４に含み、続いて、「ＭＯＶ  ＥＢＸ，ＥＡＸ」命令をリターンアドレスに含む。図３の例において、リターンアドレス０ｘ００６０１２９は表項目３３０に見られるので、ヒューリスティックは、アンパック済みコードが実行されていると決定する。
【００２７】
図４は、１つの実施形態に従って第１のヒューリスティック手法を図示するフローチャートである。ブロック４１０において、複数のＡＰＩがフックされる。上述されたように、いくつかの実施形態において、複数のシステム関連ＡＰＩがフックされ得て、複数の他の実施形態においては、ｋｅｒｎｅｌ３２．ｄｌｌのすべてのエクスポートされたＡＰＩがフックされ得る。複数の他のＡＰＩは、所望通りにフックされ得る。このアプローチにおいて、バイナリによって行われた複数のメモリ割り当ては追跡され得る。１つの実施形態において、ＬｏｃａｌＡｌｌｏｃ、ＨｅａｐＡｌｌｏｃ、ＶｉｒｔｕａｌＡｌｌｏｃ、ｍａｌｌｏｃなどのための割り当てＡＰＩをフックすることによって、追跡は実現される。更なる実施形態において、複数の他の割り当てＡＰＩと共にＶｉｒｔｕａｌＰｒｏｔｅｃｔのＡＰＩもフックされ得る。
【００２８】
メモリ割り当てを説明する情報は、表３１０に格納され得て、複数の割り当てポインタ及び割り当てサイズを含み得る。任意の所望されるデータ構造又は複数のデータ構造は、複数の割り当てポインタ及び割り当てサイズを、表３１０に格納するために用いられ得て、データは、任意の所望されるフォーマットで格納され得る。複数の割り当てポインタ及び割り当てサイズのみが本明細書で参照されるが、他の割り当て関連データも取り込まれ割り当て表３１０に格納され得る。
【００２９】
次に、フックされた複数のＡＰＩのそれぞれがコールされると、ブロック４２０〜４８０が実行される。ブロック４２５において、ＡＰＩが新たなメモリ領域を割り当てるのに用いられる複数のフックされた割り当てＡＰＩのうちの１つである場合に、ブロック４３０において、割り当て表３１０は更新される。次に、ブロック４４０において、予め入力された表３１０をスキャンすることによって、各ＡＰＩコールのリターンアドレスが解析され得る。割り当て表３１０を検索する任意の手法が、所望通りに用いられ得る。ブロック４５０において決定されるように、リターンアドレスが予め割り当てられたメモリ領域に含まれる場合には、ブロック４６０において、割り当てポインタはアンパック済みコードを保持し、複数の処置が所望通りに取られ得る。ヒューリスティック手法がアンパック済みコードを発見するとすぐに、複数のマルウェア検出アルゴリズムがアンパック済みバイナリ上で実行され得る。１つの実施形態において、アンパッキングが記録され得る。汎用的なアンパッキング後に、バイナリ上でマルウェア検出を実行するために、実行処理は、ダンプイメージとして解析用にダンプされ得る。新たに発見されたアンパック済みコードは、ブロック４７０において、新たなセクションとしてダンプイメージに追加されて、バイナリの整合を維持するのが好ましい。したがって、ダンプイメージは、マルウェアを探すためにスキャンされ得るアンパック済み実行可能ファイルを含む。
【００３０】
以下の第２のヒューリスティックの検討において、「アクティブバイナリイメージ」という用語は、メモリに現在マッピングされていて実行状態にあるイメージとして定義される。「パッシブバイナリイメージ」という用語は、メモリに現在マッピングされているが、実行状態にはない、アクティブバイナリイメージに用いられるのと同じバイナリイメージとして定義される。「実行環境」という用語は、パック済みバイナリを実行するログラム、又は、何らかの方法でバイナリと、例えば、パック済みバイナリに読み込まれた動的リンクライブラリ（ＤＬＬ）とインタラクトするプログラムとして定義される。
【００３１】
第２のヒューリスティックにおいて、パック済みバイナリが実行され（アクティブバイナリイメージ）、また後の参照のために別の位置にマッピングされる（パッシブバイナリイメージ）。様々な実施形態において、このことは、２つの異なる処理を作り出すことによって、又は、マルウェア検出システムのコードを用いてバイナリをマッピングすることによって行われ得る。２つの異なる処理を作り出す一実施形態において、一方のバイナリのみが実際に実行されるが、他方の処理は、例えば、その処理をエントリポイントで再開状態に保持することによって、一時停止している。同じバイナリの２つの処理を作り出すことは、いくつかの危険な影響を有し得るので、概して好ましくない。以下の検討は、複数のバイナリイメージが、マルウェア検出システムのコードを用いてマッピングされているシステムの観点から記述されている。
【００３２】
実行環境は、メモリにパッシブバイナリイメージをマッピングするのが好ましいが、様々な状況に応じて、実行環境は、バイナリを好ましいアドレスに、すなわち、バイナリのベースアドレスにマッピング可能であっても、可能でなくてもよい。例えば、複数のヒューリスティックがＤＬＬに実装されている場合には、パッシブイメージはベースアドレスにマッピングされることができない。その理由は、アドレスが既にアクティブバイナリイメージに占有されているからである。しかし、複数のヒューリスティックがサンドボックス又はデバッガに実装されている場合には、パッシブイメージはベースアドレスにマッピング可能であり得る。
【００３３】
アクティブバイナリイメージから、第２のヒューリスティックは複数のＡＰＩコールのリターンアドレスを記録して、次に、リターンアドレスの複数のバイトをパッシブバイナリイメージにおける同じ位置の複数のバイトと比較する。アクティブバイナリイメージ及びパッシブバイナリイメージにおけるリターンアドレスの複数のバイトが同一である場合には、アクティブバイナリイメージは、依然としてパック済み領域から実行することになる。複数のバイトが異なる場合には、アクティブバイナリイメージはアンパック済み領域から実行することになる。しかしながら、アクティブイメージとパッシブイメージの両方のベースアドレスが異なる場合には、アドレス変換が実行され得る。例えば、アクティブバイナリイメージが０ｘ００４０００００にマッピングされ、パッシブバイナリイメージが０ｘ００５０００００にマッピングされる場合には、アクティブバイナリイメージからのアドレス０ｘ００４０１０００は、パッシブバイナリイメージにおける０ｘ００５０１０００で発見され得る。
【００３４】
図５は、１つの実施形態に従って第２のヒューリスティックを図示するブロック図である。上述されたように、バイナリの２つのコピーが用いられる。パッシブバイナリイメージ５１０はメモリに読み込まれて、実行前に保存される。アクティブバイナリイメージは、実際に実行されるバイナリのコピーである。実行中、ＡＰＩコールが行われる。この例では、コール５３０のリターンアドレスに「ＭＯＶ  ＥＢＸ，ＥＡＸ」命令（５４０）を有する「Ｃａｌｌ  ＣｒｅａｔｅＦｉｌｅＡ」（５３０）である。第２のヒューリスティックは、アクティブバイナリイメージ５２０におけるリターンアドレス５４０のデータを、パッシブバイナリイメージ５１０における同じアドレス（５６０）のデータと比較する。位置５６０のデータがアクティブバイナリイメージにおけるアドレス５４０のデータと異なる場合、つまり、この例のように、「Ｐｕｓｈ  ０」命令がパッシブバイナリイメージにおいて発見される場合には、我々はアンパック済みコードを実行する。次に、アクティブバイナリイメージは、第１のヒューリスティックの場合のように、マルウェア解析のためにダンプされ得る。
【００３５】
しかしながら、上述されたように、２つのイメージのベースアドレスが同一でない場合には、アクティブバイナリイメージ５２０におけるアドレスが、パッシブバイナリイメージ５１０におけるアドレスと同一でなくてもよい。このシナリオにおいて、図５のブロック５５０によって示されるように、アドレス変換が実行され得る。
【００３６】
図６は、１つの実施形態に従って、実行環境によって複数のＡＰＩコールに設定されるフックにより、第２のヒューリスティックにおいて実行される解析を図示するフローチャートである。図６では、以下の表記が用いられる。
【００３７】
ＲＡＡ：アクティブバイナリイメージから記録されたリターンアドレス。
【００３８】
ＲＡＰ：パッシブバイナリイメージにおけるＲＡＡ均等物。
【００３９】
ＲＶＡ：相対仮想アドレス。
【００４０】
Ｓｅｃ［ｉ］Ａ：アクティブバイナリイメージにおけるｉ番目セクションの仮想アドレス。  
【００４１】
Ｓｅｃ［ｉ］Ｐ：パッシブバイナリイメージにおけるｉ番目セクションの仮想アドレス。
【００４２】
Ｓｅｃ［ｉ］Ａ．ｓｉｚｅ：アクティブバイナリイメージにおけるｉ番目セクションのサイズ（Ｓｅｃ［ｉ＋１］Ａ−Ｓｅｃ［ｉ］Ａ）。
【００４３】
ｉｍａｇｅｓｉｚｅ：メモリ中のアクティブバイナリイメージのサイズ。
【００４４】
ＢＡＡ：アクティブバイナリイメージのベースアドレス。
【００４５】
ＢＡＰ：パッシブバイナリイメージのベースアドレス。
【００４６】
ｄａｔａ（ａｄｄｒｅｓｓ）：アドレス−２から取り出されたデータの３バイト。例えば、ＲＡＡがアドレスの場合には、この操作はＲＡＡ−２から開始するデータの３バイトを取り出す。
【００４７】
ｃｏｐｙ（ｄｓｔ，ｓｒｃ，ｓｉｚｅ）：送信元アドレスから送信先アドレスまでのサイズバイトのコピー。
【００４８】
ここで図６を参照すると、ブロック６１０において、フックされたＡＰＩコールからリターンアドレスが検出されるたびに、図示される手法が実行される。アクティブバイナリイメージにおけるリターンアドレスは記録され、以下に説明される計算に用いられる。
【００４９】
アクティブバイナリイメージ５２０から記録されたリターンアドレスは、ブロック６１０において、アクティブバイナリイメージ５２０のベースアドレスと比較される。リターンアドレスがアクティブバイナリイメージ以外のアドレスを示す場合には、このリターンアドレスは無視され得て、アンパッキングが継続して行われる。
【００５０】
次に、ブロック６２０において、相対仮想アドレス、すなわち、ベースアドレスからのオフセットが、アクティブイメージのリターンアドレスＲＡＡに対して計算される。次に、オフセットはブロック６３０において用いられ、オフセットをパッシブバイナリイメージのベースアドレスに加えることによって、パッシブバイナリイメージにおけるリターンアドレスのアドレスを決定する。
【００５１】
ブロック６４０において、アクティブバイナリイメージ及びパッシブバイナリイメージの両方のリターンアドレスにおけるデータが比較される。両方のイメージにおけるリターンアドレスのデータが同じ場合には、このリターンアドレスは無視され得て、アンパッキングが継続して行われる。しかしながら、リターンアドレスのデータが両方のイメージの間で異なる場合には、アンパッキングが行われ、アクティブバイナリイメージにおけるその位置が、実行された場合に、アンパック済みコードを実行することになる。これにより、ブロック６５０〜６８０が、アクティブバイナリイメージの各セクションに対して実行され、リターンアドレスを含むアクティブバイナリイメージのセクションをパッシブバイナリイメージにコピーする。
【００５２】
ブロック６６０において、考慮されるセクションの終了アドレスが計算される。リターンアドレスがセクションのアドレスの範囲にない場合には、ブロック６７０において決定されるように、セクションは無視され、次のセクションがもしあれば考慮される。
【００５３】
リターンアドレスが現在のセクションにある場合には、ブロック６７２において、アクティブバイナリイメージのベースアドレスをセクションの開始アドレスから差し引くことによって、パッシブバイナリイメージの対応するセクションへのオフセットが計算される。次に、ブロック６７４において、そのオフセットは、パッシブバイナリイメージの対応するセクションのベースアドレスに加えられ、パッシブバイナリイメージのセクションの開始アドレスを決定する。次に、ブロック６７６において、リターンアドレスを含むアクティブバイナリイメージのセクションは、ブロック６７６におけるパッシブバイナリイメージの対応するセクションにコピーされる。これで、パッシブバイナリイメージはアンパック済みコードで更新されることが可能になり、これにより、アンパック済み実行可能ファイルを含むパッシブバイナリイメージは、マルウェア検出システムによって解析され得る。
【００５４】
様々な実施形態は、第１及び第２のヒューリスティックの一方又は両方を実装し得る。アンパック済みコードが実行されていることが検出された後に、アンパック済み実行可能ファイルは、マルウェア検出システムによって、マルウェアを探すためにスキャンされ得る。マルウェアを探すためにアンパック済み実行可能ファイルをスキャンすべく、マルウェア検出システムによって用いられる複数の特定の解析手法は、本開示の範囲外であり、更に説明されることはない。
【００５５】
ここで図７を参照すると、１つの実施形態に従って、ブロック図は、上述された複数の汎用的なアンパッキング手法を利用し得る、プログラマブルデバイス７００を図示する。図７に図示されるプログラマブルデバイスは、第１の処理要素７７０及び第２の処理要素７８０を含むマルチプロセッサのプログラマブルデバイス７００である。２つの処理要素７７０及び７８０が示されるが、プログラマブルデバイス７００の一実施形態は、そのような処理要素を１つだけ含むこともあり得る。
【００５６】
プログラマブルデバイス７００はポイントツーポイント相互接続システムとして図示され、その中で、第１の処理要素７７０及び第２の処理要素７８０が、ポイントツーポイント相互接続７５０を介して連結される。図７に図示される複数の相互接続の何れか又はすべては、ポイントツーポイント相互接続ではなく、マルチドロップバスとして実装されてよい。
【００５７】
図７に図示されるように、各処理要素７７０及び７８０は第１及び第２のプロセッサコア（すなわち、プロセッサコア７７４Ａ及び７７４Ｂ、並びにプロセッサコア７８４Ａ及び７８４Ｂ）を含むマルチコアプロセッサであってよい。そのようなコア７７４Ａ、７７４Ｂ、７８４Ａ、７８４Ｂは、図１〜図３に関連して上述されたものと同様の態様で、命令コードを実行するよう構成され得る。しかしながら、複数の他の実施形態は、所望通りに、複数の単一コアプロセッサである複数の処理要素を用い得る。複数の処理要素７７０、７８０を有する複数の実施形態において、各処理要素は、異なる数のコアを所望通りに伴って実装され得る。
【００５８】
各処理要素７７０、７８０は少なくとも１つの共有キャッシュ７４６を含み得る。共有キャッシュ７４６Ａ、７４６Ｂは、コア７７４Ａ、７７４Ｂ、及び、７８４Ａ、７８４Ｂなど、処理要素の１又は複数の構成要素によってそれぞれ利用されるデータ（例えば、複数の命令）を格納し得る。例えば、共有キャッシュは、処理要素７７０、７８０の複数の構成要素がより高速にアクセスするために、メモリ７３２、７３４に格納されたデータをローカルにキャッシュし得る。１又は複数の実施形態において、共有キャッシュ７４６Ａ、７４６Ｂは、レベル２（Ｌ２）、レベル３（Ｌ３）、レベル４（Ｌ４）、又は他の複数のレベルのキャッシュなどの１又は複数の中間レベルキャッシュ、最終レベルキャッシュ（ＬＬＣ）、又はこれらの複数の組み合わせを含み得る。
【００５９】
図７は、図面の明瞭さのために、２つの処理要素７７０、７８０を有するプログラマブルデバイスを図示するが、本発明の範囲はそのように限定されるものではなく、任意の数の処理要素が存在してよい。代替的に、処理要素７７０、７８０のうちの１又は複数は、グラフィック処理ユニット（ＧＰＵ）、デジタル信号処理（ＤＳＰ）ユニット、フィールドプログラマブルゲートアレイ、又は任意の他のプログラマブル処理要素など、プロセッサ以外の要素であってよい。処理要素７８０は、処理要素７７０と異種又は非対称であってよい。処理要素７７０と７８０との間には、アーキテクチャ上の特徴、マイクロアーキテクチャ上の特徴、熱特性、消費電力特性などを含む、多岐にわたるメトリックの測定基準の観点から様々な違いがあり得る。これらの違いは、非対称性及び異種性として、処理要素７７０、７８０の間に効果的に現れ得る。いくつかの実施形態において、様々な処理要素７７０、７８０は、同じダイパッケージの中に存在し得る。
【００６０】
第１の処理要素７７０は、メモリコントローラロジック（ＭＣ）７７２、並びにポイントツーポイント（Ｐ―Ｐ）相互接続７７６及び７７８を更に含み得る。同様に第２の処理要素７８０は、ＭＣ７８２、並びにＰ―Ｐ相互接続７８６及び７８８を含み得る。図７に図示されるように、ＭＣ７７２及び７８２は、処理要素７７０、７８０をそれぞれのメモリ、即ちメモリ７３２及びメモリ７３４に連結する。これらのメモリは、それぞれのプロセッサにローカルに取り付けられたメインメモリの一部であり得る。ＭＣロジック７７２及び７８２は、処理要素７７０、７８０に統合されているように図示されるが、いくつかの実施形態において、ＭＣロジックはその中に統合されるのではなく、処理要素７７０、７８０の外部の別個のロジックであり得る。
【００６１】
処理要素７７０及び処理要素７８０は、Ｐ―Ｐ相互接続７７６、７８６、及び７８４をそれぞれ介して、Ｉ／Ｏサブシステム７９０に連結され得る。図７に図示されるように、Ｉ／Ｏサブシステム７９０は、Ｐ―Ｐ相互接続７９４及び７９８を含む。更に、Ｉ／Ｏサブシステム７９０は、インタフェース７９２を含み、Ｉ／Ｏサブシステム７９０を高性能グラフィックエンジン７３８と連結する。１つの実施形態において、バス７３９は、グラフィックエンジン７３８をＩ／Ｏサブシステム７９０に連結するのに用いられ得る。あるいは、ポイントツーポイント相互接続７３９がこれらの構成要素を連結し得る。
【００６２】
次に、Ｉ／Ｏサブシステム７９０は、インタフェース７９６を介して第１のリンク７１６に連結され得る。１つの実施形態において、第１のリンク７１６は周辺構成要素相互接続（ＰＣＩ）バス、又は、ＰＣＩエクスプレスバス又は別のＩ／Ｏ相互接続バスなどのバスであってよいが、本発明の範囲をそのように限定するものではない。
【００６３】
図７に図示されるように、様々なＩ／Ｏデバイス７１４は、第１のリンク７１６を第２のリンク７１０に連結し得るブリッジ７１８と共に、第１のリンク７１６に連結され得る。１つの実施形態において、第２のリンク７１０は、ローピンカウント（ＬＰＣ）バスであってよい。１つの実施形態において、例えば、キーボード／マウス７１２、通信デバイス７２６（これは次にコンピュータネットワーク７０３と通信し得る）、及び、コード７３０を含み得るディスクドライブ又は他の大容量記憶装置などのデータストレージユニット７２８など、様々なデバイスが第２のリンク７１０に連結され得る。コード７３０は、上述された複数の手法のうちの１又は複数の実施形態を実行するための複数の命令を含み得る。更に、オーディオＩ／Ｏ７１４が、第２のバス７１０に連結され得る。
【００６４】
複数の他の実施形態が企図されることに留意されたい。例えば、図７のポイントツーポイントアーキテクチャの代わりに、システムは、マルチドロップバス又は別の同様の通信トポロジを実装し得る。リンク７１６及び７１０は、図７において複数のバスとして図示されるが、任意の所望される種類のリンクが用いられ得る。また、図７の複数の要素は、図７に図示されるよりも多い又は少ない複数の統合チップを用いて、代替的に区分けされ得る。
【００６５】
ここで図８を参照すると、別の実施形態に従って、ブロック図がプログラマブルデバイス８００を図示する。図７の複数の特定の態様が、図８の複数の他の態様を不明瞭にするのを回避すべく、図８から省略されている。
【００６６】
図８は、処理要素８７０、８８０が統合メモリ並びにＩ／Ｏコントロールロジック（「ＣＬ」）８７２及び８８２をそれぞれ含み得ることを図示している。いくつかの実施形態において、ＣＬ８７２、８８２は、図７に関連して上述されたようなメモリコントロールロジック（ＭＣ）を含み得る。更に、ＣＬ８７２、８８２は、Ｉ／Ｏコントロールロジックも含み得る。図８は、メモリ８３２、８３４がＣＬ８７２、８８２に連結され得るだけでなく、複数のＩ／Ｏデバイス８４４もコントロールロジック８７２、８８２に連結され得ることを図示する。レガシＩ／Ｏデバイス８１５は、Ｉ／Ｏサブシステム８９０に連結され得る。
【００６７】
図７及び図８に図示される複数のプログラマブルデバイスは、本明細書で説明される様々な実施形態を実行するのに利用され得る複数のプログラマブルデバイスの複数の実施形態の複数の略図である。図７及び図８に図示される複数のプログラマブルデバイスの様々な構成要素は、システムオンチップ（ＳｏＣ）のアーキテクチャに結合され得ることが理解されるであろう。
【００６８】
以下の複数の例は、更なる複数の実施形態に関する。  
【００６９】
例１は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、プログラマブルデバイスに、第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、アンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いてアンパッキングスタブの完了を検出させる複数の命令を含む。１又は複数のヒューリスティックは、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
【００７０】
例２は例１の主題を含み、媒体に格納された複数の命令は、実行された場合に、プログラマブルデバイスに、マルウェアを探すためにアンパック済み実行可能ファイルをスキャンさせる複数の命令を更に含む。
【００７１】
例３は例１の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
【００７２】
例４は例１の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
【００７３】
例５は例１から４の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【００７４】
例６は例１から４の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【００７５】
例７は例６の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【００７６】
例８は例１から４の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【００７７】
例９は例８の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【００７８】
例１０はマルウェアを検出するためのシステムであり、１又は複数の処理要素と、１又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、１又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて第１のアンパッキングスタブの完了を検出させる。１又は複数のヒューリスティックは、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
【００７９】
例１１は例１０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
【００８０】
例１２は例１０の主題を含み、複数の命令は、実行された場合に、プログラマブルデバイスに、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を更に含む。
【００８１】
例１３は例１０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
【００８２】
例１４は例１０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
【００８３】
例１５は例１０から１４の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【００８４】
例１６は例１０から１４の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【００８５】
例１７は例１６の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【００８６】
例１８は例１０から１４の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【００８７】
例１９は例１８の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【００８８】
例２０は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
【００８９】
例２１は例２０の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードは実行されていると決定する段階を含む。
【００９０】
例２２は例２１の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって、メモリの割り当て上にメモリ割り当てデータを取り込む段階を更に含む。
【００９１】
例２３は例２１の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリをパッシブイメージとしてメモリにマッピングして、パック済みバイナリをアクティブイメージとして実行する段階と、パッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージの中のリターンアドレスにおけるメモリコンテンツと比較する段階とを含む。
【００９２】
例２４は例２３の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、アクティブイメージの中のリターンアドレスを、パッシブイメージの中のリターンアドレスに変換する段階を更に含む。
【００９３】
例２５は、例２０から２４において説明された方法を実行するための手段を含むシステムである。
【００９４】
例２６はプログラマブルデバイスであり、処理要素と、メモリと、第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルを処理要素によって、実行のためにメモリに読み込むモジュールと、処理要素によって実行された場合に、アンパッキングスタブが、パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にするモジュールと、アンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて、アンパッキングスタブの完了を検出するモジュールとを含み、１又は複数のヒューリスティックは、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数のモジュールを含む。
【００９５】
例２７は例２６の主題を含み、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンするモジュールを更に含む。
【００９６】
例２８は例２６の主題を含み、プログラマブルデバイスにアプリケーションプログラミングインタフェースコールを検出させるモジュールは、システム関連ののアプリケーションプログラミングインタフェースコールを検出するモジュールを含む。
【００９７】
例２９は例２６の主題を含み、プログラマブルデバイスにアプリケーションプログラミングインタフェースコールを検出させるモジュールは、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出するモジュールを含む。
【００９８】
例３０は例２６から２９の何れかの主題を含み、リターンアドレスに基づいて、プログラマブルデバイスにアンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させるモジュールを含む。
【００９９】
例３１は例２６から２９の何れかの主題を含み、プログラマブルデバイスにアプリケーションプログラミングインタフェースコールを検出させるモジュールは、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリに割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させるモジュールを含む。
【０１００】
例３２は例３１の主題を含み、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させるモジュールを含む。
【０１０１】
例３３は例２６から２９の何れかの主題を含み、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させるモジュールを含む。
【０１０２】
例３４は例３３の主題を含み、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させるモジュールは、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させるモジュールを更に含む。
【０１０３】
例３５はマルウェアを検出するためのシステムであり、１又は複数の処理要素と、１又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、１又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて第１のアンパッキングスタブの完了を検出させる。１又は複数のヒューリスティックは、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
【０１０４】
例３６は例３５の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
【０１０５】
例３７は例３５の主題を含み、複数の命令は、実行された場合に、プログラマブルデバイスに、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を更に含む。
【０１０６】
例３８は例３５の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
【０１０７】
例３９は例３５の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
【０１０８】
例４０は例３５から３９の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１０９】
例４１は例３５から３９の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【０１１０】
例４２は例４１の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１１１】
例４３は例３５から３９の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１１２】
例４４は例４３の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【０１１３】
例４５は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
【０１１４】
例４６は例４５の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードは実行されていると決定する段階を含む。
【０１１５】
例４７は例４６の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによるメモリの割り当て後に、メモリ割り当てデータを取り込む段階を更に含む。
【０１１６】
例４８は例４６の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリをパッシブイメージとしてメモリにマッピングして、パック済みバイナリをアクティブイメージとして実行する段階と、パッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージの中のリターンアドレスにおけるメモリコンテンツと比較する段階とを含む。
【０１１７】
例４９は例４８の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、アクティブイメージの中のリターンアドレスを、パッシブイメージの中のリターンアドレスに変換する段階を更に含む。
【０１１８】
例５０は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、機械に例４５から４９に説明される方法を実行させる。
【０１１９】
例５１は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、プログラマブルデバイスに、第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、アンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いてアンパッキングスタブの完了を検出させる複数の命令を含む。１又は複数のヒューリスティックは、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
【０１２０】
例５２は例５１の主題を含み、媒体に格納された複数の命令は、実行された場合に、プログラマブルデバイスに、マルウェアを探すためにアンパック済み実行可能ファイルをスキャンさせる複数の命令を更に含む。
【０１２１】
例５３は例５１の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
【０１２２】
例５４は例５１の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
【０１２３】
例５５は例５１の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１２４】
例５６は例５１の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【０１２５】
例５７は例５６の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１２６】
例５８は例５１の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１２７】
例５９は例５８の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【０１２８】
例６０はマルウェアを検出するためのシステムであり、１又は複数の処理要素と、１又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、１又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて第１のアンパッキングスタブの完了を検出させる。１又は複数のヒューリスティックは、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
【０１２９】
例６１は例６０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
【０１３０】
例６２は例６０の主題を含み、複数の命令は、実行された場合に、プログラマブルデバイスに、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を更に含む。
【０１３１】
例６３は例６０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、システム関連のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を含む。
【０１３２】
例６４は例６０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を含む。
【０１３３】
例６５は例６０の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１３４】
例６６は例６０の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【０１３５】
例６７は例６６の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１３６】
例６８は例６０の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１３７】
例６９は例６８の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【０１３８】
例７０は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
【０１３９】
例７１は例７０の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードは実行されていると決定する段階を含む。
【０１４０】
例７２は例７１の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって、メモリの割り当て上にメモリ割り当てデータを取り込む段階を更に含む。
【０１４１】
例７３は例７１の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリをパッシブイメージとしてメモリにマッピングして、パック済みバイナリをアクティブイメージとして実行する段階と、パッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージの中のリターンアドレスにおけるメモリコンテンツと比較する段階とを含む。
【０１４２】
例７４は例７３の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、アクティブイメージの中のリターンアドレスを、パッシブイメージの中のリターンアドレスに変換する段階を更に含む。
【０１４３】
例７５は機械可読媒体であり、そこに格納される複数の命令は、実行された場合に、プログラマブルデバイスに、第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、アンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いてアンパッキングスタブの完了を検出させる複数の命令を含む。１又は複数のヒューリスティックは、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させ、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令を含む。
【０１４４】
例７６は例７５の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１４５】
例７７は例７５の主題を含み、実行された場合に、プログラマブルデバイスに、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、プログラマブルデバイスに、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【０１４６】
例７８は例７５から７７の何れかの主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１４７】
例７９は例７５の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１４８】
例８０は例７９の主題を含み、実行された場合に、プログラマブルデバイスに、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、プログラマブルデバイスに、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【０１４９】
例８１はマルウェアを検出するためのシステムであり、１又は複数の処理要素と、１又は複数の処理要素に連結され、複数の命令が格納されるメモリを含む。複数の命令は、実行された場合に、１又は複数の処理要素に、アンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、アンパッキングスタブがパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて第１のアンパッキングスタブの完了を検出させる。１又は複数のヒューリスティックは、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用リターンアドレスを決定させ、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させ、任意選択で、アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる複数の命令を含む。
【０１５０】
例８２は例８１の主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、自己解凍式実行可能ファイルによって検出させる複数の命令を含む。
【０１５１】
例８３は例８１又は８２の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるか否かを決定させ、自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１５２】
例８４は例８１又は８２の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる複数の命令は、実行された場合に、１又は複数の処理要素に、自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、メモリの割り当てに対応するメモリ割り当てデータを記録させる複数の命令を含む。
【０１５３】
例８５は例８４の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、メモリ割り当てデータに基づいて、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるか否かを決定させ、メモリの記録された複数の割り当てのうちの１つにリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１５４】
例８６は例８１又は８２の何れかの主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中のリターンアドレスにおけるメモリコンテンツと比較させ、その比較に応答して、アンパック済みコードが実行されていると決定させる複数の命令を含む。
【０１５５】
例８７は例８６の主題を含み、実行された場合に、１又は複数の処理要素に、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる複数の命令は、実行された場合に、１又は複数の処理要素に、アクティブバイナリイメージの中のリターンアドレスをパッシブバイナリイメージの中のアドレスに変換させる複数の命令を更に含む。
【０１５６】
例８８は、パック済みバイナリをアンパッキングする方法であり、パック済みバイナリをプログラマブルデバイスで実行する段階であって、パック済みバイナリのアンパッキングスタブが、パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、パック済みバイナリによってアプリケーションプログラミングコールを検出する段階と、アプリケーションプログラミングインタフェース用のリターンアドレスを決定する段階と、リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、任意選択でアンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階とを含む。
【０１５７】
例８９は例８８の主題を含み、アンパック済みコードが実行されているか否かを決定する段階は、パック済みバイナリによって予め割り当てられたメモリ領域にリターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定する段階、又はメモリにマッピングされた、パック済みバイナリのパッシブイメージの中のリターンアドレスにおけるメモリコンテンツを、アクティブイメージとして実行するパック済みバイナリの中のリターンアドレスにおけるメモリコンテンツと比較する段階のうちの１つを含む。
【０１５８】
上記の説明は例示であり、限定を意図するものではないことが理解されるべきである。例えば、上述された複数の実施形態は、互いと組み合わせて用いられてよい。多くの他の実施形態は、上記の説明を検討するとすぐに、当業者には明らかになるであろう。したがって、本発明の範囲は、添付の特許請求の範囲を参照し、そのような特許請求の範囲が権利を与えられる均等物の全範囲と共に、決定されるべきである。
【図１】
2017504865.tif 000003
【図２】
2017504865.tif 000004
【図３】
2017504865.tif 000005
【図４】
2017504865.tif 000006
【図５】
2017504865.tif 000007
【図６】
2017504865.tif 000008
【図７】
2017504865.tif 000009
【図８】
2017504865.tif 000010
【手続補正書】
【提出日】平成28年6月17日(2016.6.17)
【手続補正１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項１】
プログラマブルデバイスに、
第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込む手順と、
前記第１のアンパッキングスタブが、前記パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする手順と、
前記第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて、前記第１のアンパッキングスタブの完了を検出する手順と、
を実行させ、
前記１又は複数のヒューリスティックは、前記プログラマブルデバイスに、
アプリケーションプログラミングインタフェースコールを検出する手順と、
前記アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定する手順と、
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する手順と、
を実行させる、
プログラム。
【請求項２】
前記プログラマブルデバイスに、前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする手順を更に実行させる、
請求項１に記載のプログラム。
【請求項３】
アプリケーションプログラミングインタフェースコールを検出する前記手順は、システム関連のアプリケーションプログラミングインタフェースコールを検出する手順を有する、
請求項１に記載のプログラム。
【請求項４】
アプリケーションプログラミングインタフェースコールを検出する前記手順は、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出する手順を有する、
請求項１に記載のプログラム。
【請求項５】
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるか否かを決定する手順と、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定する手順と、
を有する、
請求項１から４の何れか一項に記載のプログラム。
【請求項６】
アプリケーションプログラミングインタフェースコールを検出する前記手順は、
前記自己解凍式実行可能ファイルによって、メモリの割り当てを検出する手順と、
メモリの前記割り当てに対応するメモリ割り当てデータを記録する手順と、
を有する、
請求項１から４の何れか一項に記載のプログラム。
【請求項７】
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は、
前記メモリ割り当てデータに基づいて、メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるか否かを決定する手順と、
メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定する手順と、
を有する、
請求項６に記載のプログラム。
【請求項８】
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は、
アクティブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較する手順と、
前記比較に応答して、アンパック済みコードが実行されていると決定する手順と、
を有する、
請求項１から４の何れか一項に記載のプログラム。
【請求項９】
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する前記手順は、前記アクティブバイナリイメージの中の前記リターンアドレスを、前記パッシブバイナリイメージの中のアドレスに変換する手順を更に有する、
請求項８に記載のプログラム。
【請求項１０】
マルウェアを検出するためのシステムであって、
１又は複数の処理要素と、
前記１又は複数の処理要素に連結され、複数の命令が格納されたメモリと、
を備え、
前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
第１のアンパッキングスタブ及びパック済み実行可能ファイルを含む自己解凍式実行可能ファイルをメモリに読み込ませ、
前記第１のアンパッキングスタブが前記パック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にさせ、
前記第１のアンパッキングスタブの知識に依存しない、１又は複数のヒューリスティックを用いて、前記第１のアンパッキングスタブの完了を検出させ、
前記１又は複数のヒューリスティックは、実行された場合に、１又は複数の処理要素に、
アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させ、
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる、複数の命令を有する、
システム。
【請求項１１】
実行された場合に、１又は複数の処理要素に、アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを、前記自己解凍式実行可能ファイルによって検出させる、複数の命令を有する、
請求項１０に記載のシステム。
【請求項１２】
前記複数の命令は、実行された場合に、プログラマブルデバイスに、前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンさせる、複数の命令を更に有する、
請求項１０に記載のシステム。
【請求項１３】
実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、システム関連の複数のアプリケーションプログラミングインタフェースコールを検出させる複数の命令を有する、
請求項１０に記載のシステム。
【請求項１４】
実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、予め定められたセットのアプリケーションプログラミングインタフェースコールの何れかを検出させる複数の命令を有する
請求項１０に記載のシステム。
【請求項１５】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるか否かを決定させ、
前記自己解凍式実行可能ファイルによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという前記決定に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１０から１４の何れか一項に記載のシステム。
【請求項１６】
実行された場合に、前記１又は複数の処理要素に、アプリケーションプログラミングインタフェースコールを検出させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
前記自己解凍式実行可能ファイルによってメモリの割り当てを検出させ、
メモリの前記割り当てに対応するメモリ割り当てデータを記録させる、
複数の命令を有する、
請求項１０から１４の何れか一項に記載のシステム。
【請求項１７】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
前記メモリ割り当てデータに基づいて、メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるか否かを決定させ、
メモリの前記記録された複数の割り当てのうちの１つに前記リターンアドレスがあるとの前記決定に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１６に記載のシステム。
【請求項１８】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、
アクティブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツを、パッシブバイナリイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較させ、
前記比較に応答して、アンパック済みコードが実行されていると決定させる、
複数の命令を有する、
請求項１０から１４の何れか一項に記載のシステム。
【請求項１９】
実行された場合に、前記１又は複数の処理要素に、前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定させる前記複数の命令は、実行された場合に、前記１又は複数の処理要素に、前記アクティブバイナリイメージ中の前記リターンアドレスを、前記パッシブバイナリイメージ中のアドレスに変換させる複数の命令を更に有する、
請求項１８に記載のシステム。
【請求項２０】
パック済みバイナリをアンパッキングする方法であって、
前記パック済みバイナリをプログラマブルデバイスで実行する段階であって、前記パック済みバイナリのアンパッキングスタブが、前記パック済みバイナリのパック済み実行可能ファイルをアンパック済み実行可能ファイルにアンパックすることを可能にする、実行する段階と、
パック済みバイナリによってアプリケーションプログラミングインタフェースコールを検出する段階と、
前記アプリケーションプログラミングインタフェースコール用のリターンアドレスを決定する段階と、
前記リターンアドレスに基づいて、アンパック済みコードが実行されているか否かを決定する段階と、
前記アンパック済み実行可能ファイルを、マルウェアを探すためにスキャンする段階と、
を備える、
方法。
【請求項２１】
アンパック済みコードが実行されているか否かを決定する段階は、
前記パック済みバイナリによって予め割り当てられたメモリ領域に前記リターンアドレスがあるという決定に応答して、アンパック済みコードが実行されていると決定する段階を有する、
請求項２０に記載の方法。
【請求項２２】
アンパック済みコードが実行されているか否かを決定する段階は、前記パック済みバイナリによるメモリの割り当て後に、メモリ割り当てデータを取り込む段階を更に有する、
請求項２１に記載の方法。
【請求項２３】
アンパック済みコードが実行されているか否かを決定する段階は、
前記パック済みバイナリをパッシブイメージとしてメモリにマッピングし、前記パック済みバイナリをアクティブイメージとして実行する段階と、
前記パッシブイメージの中の前記リターンアドレスにおけるメモリコンテンツを、前記アクティブイメージの中の前記リターンアドレスにおけるメモリコンテンツと比較する段階と、
を有する、
請求項２１に記載の方法。
【請求項２４】
アンパック済みコードが実行されているか否かを決定する段階は、
前記アクティブイメージの中の前記リターンアドレスを、前記パッシブイメージの中のリターンアドレスに変換する段階を更に有する、
請求項２３に記載の方法。
【請求項２５】
請求項２０から２４の何れか一項に記載の方法を実行するための手段を有する、
システム。
【請求項２６】
請求項１から９の何れか一項に記載のプログラムを格納する、
コンピュータ可読記憶媒体。
【国際調査報告】
2017504865.tif 000011
2017504865.tif 000012