(57)【要約】【課題】Web連動型アプリケーションの挙動をより正確に解析することができる技術を提供する。【解決手段】静的解析部１０は、アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する。動的解析部２０は、アプリケーションがサーバに送信するリクエストを取得する。サーバ解析部３０は、動的解析部２０によって取得されたリクエストに基づいてリクエストを生成し、生成されたリクエストをサーバに送信する。アプリケーション解析部４０は、サーバから送信されたレスポンスに含まれるスクリプトを解析し、静的解析部１０によって特定されたメソッドのうちレスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定する。【選択図】図１
2015114968.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する静的解析部と、
前記アプリケーションが前記サーバに送信するリクエストを取得する動的解析部と、
前記動的解析部によって取得された前記リクエストに基づいてリクエストを生成し、生成されたリクエストを前記サーバに送信するサーバ解析部と、
前記サーバから送信されたレスポンスに含まれるスクリプトを解析し、前記静的解析部によって特定されたメソッドのうち前記レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定するアプリケーション解析部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項２】
前記アプリケーション解析部は、第１のレスポンスに含まれる第１のスクリプトと、前記第１のレスポンスとは別の第２のレスポンスに含まれる第２のスクリプトとを解析し、前記静的解析部によって特定されたメソッドのうち前記第１のスクリプトと前記第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、前記第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、前記第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項３】
前記アプリケーション解析部は、前記サーバ解析部によって送信された第１のリクエストに対応する第１のレスポンスに含まれる第１のスクリプトと、前記サーバ解析部によって送信された、前記第１のリクエストとは異なる第２のリクエストに対応する第２のレスポンスに含まれる第２のスクリプトとを解析することを特徴とする請求項２に記載のアプリケーション解析装置。
【請求項４】
前記アプリケーション解析部は、前記アプリケーションが前記サーバに送信した第１のリクエストに対応する第１のレスポンスに含まれる第１のスクリプトと、前記サーバ解析部によって送信された第２のリクエストに対応する第２のレスポンスに含まれる第２のスクリプトとを解析することを特徴とする請求項２に記載のアプリケーション解析装置。
【請求項５】
前記動的解析部は、前記アプリケーションが前記サーバに送信する、端末情報を含むリクエストを取得し、
前記サーバ解析部は、前記動的解析部によって取得された前記リクエストに基づいて、前記端末情報と同一または異なる第１の端末情報を含む第１のリクエストと、前記第１の端末情報と異なる第２の端末情報を含む第２のリクエストとを生成し、生成された前記第１のリクエストと前記第２のリクエストとを前記サーバに送信し、
前記アプリケーション解析部は、前記第１のリクエストに対応して前記サーバから送信された第１のレスポンスに含まれる第１のスクリプトと、前記第２のリクエストに対応して前記サーバから送信された第２のレスポンスに含まれる第２のスクリプトとを解析し、前記静的解析部によって特定されたメソッドのうち前記第１のスクリプトと前記第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、前記第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、前記第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項６】
前記サーバ解析部は、端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストに含まれる情報と、前記動的解析部によって取得された前記リクエストに含まれる情報とを比較し、前記リクエストに含まれる情報が、前記端末情報リストに含まれる情報のいずれかと一致した場合に、前記端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択し、選択した情報を含む前記第１のリクエストと前記第２のリクエストとを生成することを特徴とする請求項５に記載のアプリケーション解析装置。
【請求項７】
前記動的解析部は、前記アプリケーションが前記サーバに送信する、第１の端末情報を含む第１のリクエストを取得し、
前記サーバ解析部は、前記動的解析部によって取得された前記第１のリクエストに基づいて、前記第１の端末情報と異なる第２の端末情報を含む第２のリクエストを生成し、生成された前記第２のリクエストを前記サーバに送信し、
前記アプリケーション解析部は、前記第１のリクエストに対応して前記サーバから送信された第１のレスポンスに含まれる第１のスクリプトと、前記第２のリクエストに対応して前記サーバから送信された第２のレスポンスに含まれる第２のスクリプトとを解析し、前記静的解析部によって特定されたメソッドのうち前記第１のスクリプトと前記第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、前記第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、前記第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較することを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項８】
前記サーバ解析部は、端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストに含まれる情報と、前記動的解析部によって取得された前記第１のリクエストに含まれる情報とを比較し、前記第１のリクエストに含まれる情報が、前記端末情報リストに含まれる情報のいずれかと一致した場合に、前記端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択し、選択した情報を含む前記第２のリクエストを生成することを特徴とする請求項７に記載のアプリケーション解析装置。
【請求項９】
静的解析部が、アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する静的解析ステップと、
動的解析部が、前記アプリケーションが前記サーバに送信するリクエストを取得する動的解析ステップと、
サーバ解析部が、前記動的解析ステップで取得された前記リクエストに基づいてリクエストを生成し、生成されたリクエストを前記サーバに送信するサーバ解析ステップと、
アプリケーション解析部が、前記サーバから送信されたレスポンスに含まれるスクリプトを解析し、前記静的解析ステップで特定されたメソッドのうち前記レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定するアプリケーション解析ステップと、
を有することを特徴とするアプリケーション解析方法。
【請求項１０】
アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する静的解析部と、
前記アプリケーションが前記サーバに送信するリクエストを取得する動的解析部と、
前記動的解析部によって取得された前記リクエストに基づいてリクエストを生成し、生成されたリクエストを前記サーバに送信するサーバ解析部と、
前記サーバから送信されたレスポンスに含まれるスクリプトを解析し、前記静的解析部によって特定されたメソッドのうち前記レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定するアプリケーション解析部と、
としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの機能を解析するアプリケーション解析装置およびアプリケーション解析方法に関する。また、本発明は、本アプリケーション解析装置としてコンピュータを機能させるためのプログラムにも関する。
【背景技術】
【０００２】
Webと連動して動作するWeb連動型アプリケーションが存在する。Web連動型アプリケーションは、Webページのスクリプトを保持するサーバからスクリプトを取得し、そのスクリプトを実行する。Webページのスクリプトから実行できるメソッドをアプリケーションに予め定義しておくことで、Web連動型アプリケーションを実現することができる。この仕組みでは、Webページのスクリプトを書き換えることによってアプリケーションの挙動を変更することができる。この仕組みを悪用すると、アプリケーションが公開された後の任意の時点でWebページのスクリプトを書き換えることで、例えば情報漏洩のような不正行為を行うようにアプリケーションの動作を変更することができる。
【０００３】
従来、Webページと連携するアプリケーションの挙動を解析する方法が提案されている。例えば、アプリケーションを逆アセンブルし、逆アセンブル後のプログラムコードに基づいて、Webページのスクリプトから実行できるアプリケーションのメソッドを特定し、そのメソッドが、アプリケーションの動作するプラットフォームのどのような情報を取得するのかを解析する方法がある（特許文献１、非特許文献１参照）。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２０１２−２３４４０１号公報
【非特許文献】
【０００５】
【非特許文献１】“AndroidにおけるWebViewの脆弱性を利用した攻撃を防止するアクセス制御方式の提案”、情報処理学会研究報告、２０１３年３月１４日、Vol.2013-CSEC-60 No.14
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、従来技術では、実際にWebページのスクリプトからアプリケーションのメソッドが実行されるかどうかを考慮していないため、アプリケーションの挙動を完全には解析することができない問題点がある。
【０００７】
本発明は、上述した課題に鑑みてなされたものであって、Web連動型アプリケーションの挙動をより正確に解析することができる技術を提供することを目的とする。
【課題を解決するための手段】
【０００８】
本発明は、上記の課題を解決するためになされたもので、アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する静的解析部と、前記アプリケーションが前記サーバに送信するリクエストを取得する動的解析部と、前記動的解析部によって取得された前記リクエストに基づいてリクエストを生成し、生成されたリクエストを前記サーバに送信するサーバ解析部と、前記サーバから送信されたレスポンスに含まれるスクリプトを解析し、前記静的解析部によって特定されたメソッドのうち前記レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定するアプリケーション解析部と、を備えたことを特徴とするアプリケーション解析装置である。
【０００９】
また、本発明のアプリケーション解析装置において、前記アプリケーション解析部は、第１のレスポンスに含まれる第１のスクリプトと、前記第１のレスポンスとは別の第２のレスポンスに含まれる第２のスクリプトとを解析し、前記静的解析部によって特定されたメソッドのうち前記第１のスクリプトと前記第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、前記第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、前記第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較することを特徴とする。
【００１０】
また、本発明のアプリケーション解析装置において、前記アプリケーション解析部は、前記サーバ解析部によって送信された第１のリクエストに対応する第１のレスポンスに含まれる第１のスクリプトと、前記サーバ解析部によって送信された、前記第１のリクエストとは異なる第２のリクエストに対応する第２のレスポンスに含まれる第２のスクリプトとを解析することを特徴とする。
【００１１】
また、本発明のアプリケーション解析装置において、前記アプリケーション解析部は、前記アプリケーションが前記サーバに送信した第１のリクエストに対応する第１のレスポンスに含まれる第１のスクリプトと、前記サーバ解析部によって送信された第２のリクエストに対応する第２のレスポンスに含まれる第２のスクリプトとを解析することを特徴とする。
【００１２】
また、本発明のアプリケーション解析装置において、前記動的解析部は、前記アプリケーションが前記サーバに送信する、端末情報を含むリクエストを取得し、前記サーバ解析部は、前記動的解析部によって取得された前記リクエストに基づいて、前記端末情報と同一または異なる第１の端末情報を含む第１のリクエストと、前記第１の端末情報と異なる第２の端末情報を含む第２のリクエストとを生成し、生成された前記第１のリクエストと前記第２のリクエストとを前記サーバに送信し、前記アプリケーション解析部は、前記第１のリクエストに対応して前記サーバから送信された第１のレスポンスに含まれる第１のスクリプトと、前記第２のリクエストに対応して前記サーバから送信された第２のレスポンスに含まれる第２のスクリプトとを解析し、前記静的解析部によって特定されたメソッドのうち前記第１のスクリプトと前記第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、前記第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、前記第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較することを特徴とする。
【００１３】
また、本発明のアプリケーション解析装置において、前記サーバ解析部は、端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストに含まれる情報と、前記動的解析部によって取得された前記リクエストに含まれる情報とを比較し、前記リクエストに含まれる情報が、前記端末情報リストに含まれる情報のいずれかと一致した場合に、前記端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択し、選択した情報を含む前記第１のリクエストと前記第２のリクエストとを生成することを特徴とする。
【００１４】
また、本発明のアプリケーション解析装置において、前記動的解析部は、前記アプリケーションが前記サーバに送信する、第１の端末情報を含む第１のリクエストを取得し、前記サーバ解析部は、前記動的解析部によって取得された前記第１のリクエストに基づいて、前記第１の端末情報と異なる第２の端末情報を含む第２のリクエストを生成し、生成された前記第２のリクエストを前記サーバに送信し、前記アプリケーション解析部は、前記第１のリクエストに対応して前記サーバから送信された第１のレスポンスに含まれる第１のスクリプトと、前記第２のリクエストに対応して前記サーバから送信された第２のレスポンスに含まれる第２のスクリプトとを解析し、前記静的解析部によって特定されたメソッドのうち前記第１のスクリプトと前記第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、前記第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、前記第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較することを特徴とする。
【００１５】
また、本発明のアプリケーション解析装置において、前記サーバ解析部は、端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストに含まれる情報と、前記動的解析部によって取得された前記第１のリクエストに含まれる情報とを比較し、前記第１のリクエストに含まれる情報が、前記端末情報リストに含まれる情報のいずれかと一致した場合に、前記端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択し、選択した情報を含む前記第２のリクエストを生成することを特徴とする。
【００１６】
また、本発明は、静的解析部が、アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する静的解析ステップと、動的解析部が、前記アプリケーションが前記サーバに送信するリクエストを取得する動的解析ステップと、サーバ解析部が、前記動的解析ステップで取得された前記リクエストに基づいてリクエストを生成し、生成されたリクエストを前記サーバに送信するサーバ解析ステップと、アプリケーション解析部が、前記サーバから送信されたレスポンスに含まれるスクリプトを解析し、前記静的解析ステップで特定されたメソッドのうち前記レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定するアプリケーション解析ステップと、を有することを特徴とするアプリケーション解析方法である。
【００１７】
また、本発明は、アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する静的解析部と、前記アプリケーションが前記サーバに送信するリクエストを取得する動的解析部と、前記動的解析部によって取得された前記リクエストに基づいてリクエストを生成し、生成されたリクエストを前記サーバに送信するサーバ解析部と、前記サーバから送信されたレスポンスに含まれるスクリプトを解析し、前記静的解析部によって特定されたメソッドのうち前記レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定するアプリケーション解析部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【００１８】
本発明によれば、実際のアプリケーションの動作に基づいて、スクリプトの実行時に実行されるメソッドが利用するAPIを特定することが可能となる。このため、Web連動型アプリケーションの挙動をより正確に解析することができる。
【図面の簡単な説明】
【００１９】
【図１】本発明の第１の実施形態によるアプリケーション解析装置の構成を示すブロック図である。
【図２】本発明の第１の実施形態によるアプリケーション解析装置が有する静的解析部の構成を示すブロック図である。
【図３】本発明の第１の実施形態におけるAPIリストを示す参考図である。
【図４】本発明の第１の実施形態によるアプリケーション解析装置が有する動的解析部の構成を示すブロック図である。
【図５】本発明の第１の実施形態によるアプリケーション解析装置が有するサーバ解析部の構成を示すブロック図である。
【図６】本発明の第１の実施形態によるアプリケーション解析装置が有するアプリケーション解析部の構成を示すブロック図である。
【図７】本発明の第１の実施形態によるアプリケーション解析装置の動作の手順を示すフローチャートである。
【図８】本発明の第１の実施形態におけるプログラムの例を示す参考図である。
【図９】本発明の第１の実施形態におけるプログラムの例を示す参考図である。
【図１０】本発明の第１の実施形態におけるリクエストの例を示す参考図である。
【図１１】本発明の第１の実施形態におけるリクエストの例を示す参考図である。
【図１２】本発明の第１の実施形態におけるレスポンスの例を示す参考図である。
【図１３】本発明の第１の実施形態におけるレスポンスの例を示す参考図である。
【図１４】本発明の第１の実施形態におけるレスポンスの例を示す参考図である。
【図１５】本発明の第２の実施形態によるアプリケーション解析装置が有するサーバ解析部の構成を示すブロック図である。
【図１６】本発明の第２の実施形態における端末情報リストの例を示す参考図である。
【発明を実施するための形態】
【００２０】
以下、図面を参照し、本発明の実施形態を説明する。以下では、一例として、Android（登録商標）がOS（Operating Systems）に用いられている端末で動作するアプリケーションの解析について主に説明する。本明細書および図面では、便宜上、必要に応じてAndroid（登録商標）という文字列を*andrd*という文字列で代用し、java（登録商標）という文字列を*jv*という文字列で代用し、Linux（登録商標）という文字列を*Lnx*という文字列で代用している。すなわち、*andrd*という文字列はAndroid（登録商標）という文字列と等価であり、*jv*という文字列はjava（登録商標）という文字列と等価であり、*Lnx*という文字列はLinux（登録商標）という文字列と等価である。
【００２１】
（第１の実施形態）
まず、本発明の第１の実施形態を説明する。図１は、本実施形態によるアプリケーション解析装置の構成を示している。本実施形態によるアプリケーション解析装置は、静的解析部１０、動的解析部２０、サーバ解析部３０、アプリケーション解析部４０を有する。
【００２２】
静的解析部１０は、アプリケーションのプログラム（実行プログラム）を逆アセンブルして得られるプログラムコードを解析し、サーバが保持するWebページのスクリプトの実行時に実行されるメソッドを特定する。動的解析部２０は、アプリケーションがサーバに送信するリクエストを取得する。サーバ解析部３０は、動的解析部２０によって取得されたリクエストに基づいてリクエストを生成し、生成されたリクエストをサーバに送信する。アプリケーション解析部４０は、サーバから送信されたレスポンスに含まれるスクリプトを解析し、静的解析部１０によって特定されたメソッドのうちレスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定する。
【００２３】
図２は、静的解析部１０の構成を示している。静的解析部１０は、逆アセンブル部１００、APIリスト記憶部１０１、メソッド解析部１０２、メソッド解析結果記憶部１０３を有する。
【００２４】
逆アセンブル部１００は、アプリケーションのプログラムを含むアプリケーションファイルを逆アセンブルし、プログラムコードとしてソースコードに相当する逆アセンブルコードを得る。本実施形態で想定しているOSに対応したアプリケーションは、ソースコードをコンパイルした実行プログラムであるclass.dexファイルと、証明書情報、画像等のリソース情報を圧縮したファイルとで構成されている。逆アセンブル部１００は、既存のツールを利用してアプリケーションファイルを逆アセンブルしてもよい。
【００２５】
APIリスト記憶部１０１は、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI（Application Program Interface）を含むAPIリストを記憶する。図３は、APIリスト記憶部１０１に記憶されているAPIリストの一例を示している。図３には、本実施形態で想定しているOSのプラットフォームにおける複数のAPIの例が示されている。図３では、getCellLocation、getLastKnowLocation、requestLocationUpdates、getDeviceId、getNetworkOperator、getLine1Number、getAccounts、sendTextMessageが示されている。
【００２６】
getCellLocation、getLastKnowLocation、requestLocationUpdatesは、端末の位置情報を取得するAPIである。getDeviceIdは、端末固有識別子であるIMEI（International Mobile Equipment Identity）を取得するAPIである。getNetworkOperatorは、MCC（Mobile Country Code）、MNC（Mobile Network Code）を取得するAPIである。getLine1Numberは、端末の電話番号を取得するAPIである。getAccountsは、端末のアカウント情報を取得するAPIである。sendTextMessageは、SMS（Short Message Service）を送信するAPIである。
【００２７】
メソッド解析部１０２は、逆アセンブル部１００が得た逆アセンブルコードを解析し、アプリケーションがスクリプトを実行するときにスクリプトから呼び出されて実行されるメソッドを特定する。また、メソッド解析部１０２は、特定したメソッドの情報と、APIリスト記憶部１０１に記憶されているAPIリストに含まれる複数のAPIとを比較し、特定したメソッドが利用するAPIを特定する。メソッド解析結果記憶部１０３は、メソッド解析部１０２によって特定されたメソッドの情報と、そのメソッドが利用するAPIの情報とを記憶する。
【００２８】
図４は、動的解析部２０の構成を示している。動的解析部２０は、アプリケーション実行部２００、リクエスト取得部２０１、リクエスト記憶部２０２を有する。
【００２９】
アプリケーション実行部２００は、解析対象のアプリケーションを実行することによって、アプリケーションを起動する。ユーザが解析対象のアプリケーションを指定して実行を指示する等の方法によってアプリケーションの実行が可能な場合、アプリケーション実行部２００が設けられていなくてもよい。
【００３０】
リクエスト取得部２０１は、アプリケーション実行部２００によって実行されて起動したアプリケーションが行う通信を監視し、サーバへ送信されるリクエストを取得する。通信の監視は、アプリケーションがインストールされている端末上で行ってもよいし、それ以外の監視ポイントで行ってもよい。例えば、端末が接続するアクセスポイントまたはプロキシサーバ等の通信装置を別途用意し、通信装置上で監視を行ってもよい。通信装置は、端末からのリクエストをキャプチャし、そのリクエストをアプリケーション解析装置に送信する。リクエスト取得部２０１は、このリクエストを受信することによって、リクエストを取得してもよい。リクエスト記憶部２０２は、リクエスト取得部２０１によって取得されたリクエストを記憶する。
【００３１】
図５は、サーバ解析部３０の構成を示している。サーバ解析部３０は、リクエスト生成部３００、リクエスト送信部３０１、レスポンス受信部３０２、レスポンス記憶部３０３を有する。
【００３２】
リクエスト生成部３００は、リクエスト記憶部２０２に記憶されているリクエストに基づいて新たなリクエストを生成する。リクエスト送信部３０１は、リクエスト生成部３００によって生成されたリクエストをサーバに送信する。レスポンス受信部３０２は、リクエスト送信部３０１によって送信されたリクエストを受信したサーバから送信されるレスポンスを受信する。レスポンスには、Webページのスクリプトが含まれる場合がある。レスポンス記憶部３０３は、レスポンス受信部３０２によって受信されたレスポンスを受信する。
【００３３】
図６は、アプリケーション解析部４０の構成を示している。アプリケーション解析部４０は、アプリケーション挙動解析部４００を有する。
【００３４】
アプリケーション挙動解析部４００は、レスポンス記憶部３０３に記憶されているレスポンスに含まれるスクリプトを解析する。アプリケーション挙動解析部４００は、レスポンスに含まれるスクリプトと、メソッド解析結果記憶部１０３に記憶されているメソッドの情報とを比較し、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。さらに、アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されているAPIの情報に基づいて、レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定する。
【００３５】
本実施形態によるアプリケーション解析装置は、複数の記憶部（APIリスト記憶部１０１、メソッド解析結果記憶部１０３、リクエスト記憶部２０２、レスポンス記憶部３０３）を有している。アプリケーション解析装置が有する複数の記憶部がそれぞれ異なる記憶装置で構成されていてもよいし、アプリケーション解析装置が有する複数の記憶部の一部または全部が同一の記憶装置で構成されていてもよい。
【００３６】
静的解析部１０、動的解析部２０、サーバ解析部３０、アプリケーション解析部４０の機能は、例えばＣＰＵ（Central Processing Unit）等の制御装置の動作を制御するためのプログラムを、アプリケーション解析装置のコンピュータが読み込んで実行することにより、ソフトウェアの機能として実現可能である。また、このプログラムは、例えばフラッシュメモリのような「コンピュータ読み取り可能な記録媒体」により提供されてもよい。また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波によりアプリケーション解析装置に伝送されることでアプリケーション解析装置に入力されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体である。また、上述したプログラムは、前述した機能の一部を実現してもよい。さらに、上述したプログラムは、前述した機能をコンピュータに既に記録されているプログラムとの組合せで実現できる、いわゆる差分ファイル（差分プログラム）であってもよい。
【００３７】
次に、本実施形態によるアプリケーション解析装置の動作を説明する。図７は、本実施形態によるアプリケーション解析装置の動作の手順を示している。
【００３８】
（静的解析部１０による処理）
静的解析部１０は、アプリケーションのプログラムを逆アセンブルして得られるプログラムコードを解析し、サーバが保持するＷｅｂページのスクリプトの実行時に実行されるメソッドを特定する（ステップＳ１０）。例えば、ステップＳ１０では、以下の処理が行われる。
【００３９】
逆アセンブル部１００は、アプリケーションのプログラムを含むアプリケーションファイルを逆アセンブルし、逆アセンブルコードを得る。メソッド解析部１０２は、逆アセンブル部１００が得た逆アセンブルコードを解析し、アプリケーションがスクリプトを実行するときにスクリプトから呼び出されて実行されるメソッドを特定する。また、メソッド解析部１０２は、特定したメソッドの情報と、APIリスト記憶部１０１に記憶されているAPIリストに含まれる複数のAPIとを比較し、特定したメソッドが利用するAPIを特定する。具体的には以下の処理が行われる。
【００４０】
本実施形態で想定しているOSにおいて、スクリプトが実行されたときにスクリプトから呼び出される*jv*オブジェクトを登録するAPIは、WebViewクラスのadd*jv*scriptInterfaceというAPIである。図８は、*jv*オブジェクトを登録するプログラム（ソースコード）の例を示している。アプリケーションのソースコードの一部が抜粋されて図８に示されている。
【００４１】
図８において、最も左に記載された数字は行番号である。２行目に、add*jv*scriptInterfaceに関するコードがある。add*jv*scriptInterfaceは、第一引数と第二引数との２つの引数を必要とする。第一引数は、登録される*jv*オブジェクトの名前であり、第二引数は、スクリプトから呼び出されるメソッドの名前である。図８に示す例では、第一引数は「JsObject()」であり、第二引数は「FromWebScript」である。３行目〜７行目には、登録された*jv*オブジェクトに関するコードがある。このコードには、JsObject()クラスのメソッドであるmethod1()メソッドを定義するコードが含まれる。method1()メソッドは、アプリケーションがスクリプトを実行するときにスクリプトから呼び出されて実行される。６行目には、スクリプトから実行される処理のコードがある（図８ではコードが省略されている）。スクリプトから呼び出されて実行されるメソッドがAPIを利用する場合、６行目にAPIの情報が含まれる。
【００４２】
図９は、スクリプトに含まれるプログラムの例を示している。図９において、最も左に記載された数字は行番号である。２行目には、図８に示すプログラムで定義されているJsObject()クラスのmethod1()メソッドを呼び出すコードがある。
【００４３】
メソッド解析部１０２は、スクリプトから呼び出されるアプリケーション内のメソッドを特定するため、逆アセンブルコードから、add*jv*scriptInterfaceの第一引数と第二引数とを取得する。続いて、メソッド解析部１０２は、逆アセンブルコードにおいて、第一引数が示す*jv*オブジェクトに関するコードからメソッドの処理内容の情報を取得する（図８の６行目の情報）。これによって、メソッド解析部１０２は、アプリケーションがスクリプトを実行するときにスクリプトから呼び出されて実行されるメソッドを特定する。
【００４４】
続いて、メソッド解析部１０２は、取得したメソッドの処理内容の情報と、APIリスト記憶部１０１に記憶されているAPIリストに含まれる複数のAPIとを比較する。これによって、メソッド解析部１０２は、アプリケーションがスクリプトを実行するときにスクリプトから呼び出されて実行されるメソッドが利用するAPIを特定する。メソッドの処理内容の情報の中に、APIリストに含まれるAPIと一致するAPIの情報があった場合、メソッド解析部１０２は、そのAPIがメソッドによって利用されると判定する。メソッド解析部１０２は、add*jv*scriptInterfaceの第二引数の情報（スクリプトから呼び出されるメソッドの名前、図８では「FromWebScript」）と、登録された*jv*オブジェクトのメソッドの名前（図８では「method1()」）と、メソッドが利用するAPIの名前とを関連付けてメソッド解析結果記憶部１０３に記憶させる。
【００４５】
（動的解析部２０による処理）
動的解析部２０は、アプリケーションがサーバに送信するリクエストを取得する（ステップＳ２０）。例えば、ステップＳ２０では、以下の処理が行われる。
【００４６】
アプリケーション実行部２００は、解析対象のアプリケーションを実行する。アプリケーション実行部２００によって実行されたアプリケーションは起動し、アプリケーションの処理として規定された各種の処理を実行する。何らかの操作の入力が必要な場合、例えばユーザが操作を行う。あるいは、既存のツールを利用して操作の入力を行ってもよい。リクエスト取得部２０１は、アプリケーション実行部２００によって実行されたアプリケーションが行う通信を監視し、サーバへ送信されるリクエストを取得する。リクエスト取得部２０１は、取得したリクエストから、リクエストラインと、ヘッダと、メッセージ・ボディとを抽出し、抽出した情報をリクエスト記憶部２０２に記憶させる。
【００４７】
図１０は、アプリケーションが、広告等を取得するためにHTTP GETメソッドを実行した際に送信されるリクエストの例を示している。図１０において、最も左に記載された数字は行番号である。１行目はリクエストラインである。２行目〜５行目はヘッダである。図１０に示す例ではメッセージ・ボディはない。
【００４８】
図１１は、アプリケーションが、広告等を取得するために上記とは別のHTTP GETメソッドを実行した際に送信されるリクエストの例を示している。図１１において、最も左に記載された数字は行番号である。１行目はリクエストラインである。２行目〜１１行目はヘッダである。図１１に示す例ではメッセージ・ボディはない。
【００４９】
（サーバ解析部３０による処理）
サーバ解析部３０は、ステップＳ２０で取得されたリクエストに基づいてリクエストを生成し、生成されたリクエストをサーバに送信する（ステップＳ３０）。例えば、ステップＳ３０では、以下の処理が行われる。
【００５０】
リクエスト生成部３００は、リクエスト記憶部２０２に記憶されているリクエストと同一のリクエストを生成する。リクエスト送信部３０１は、リクエスト生成部３００によって生成されたリクエストをサーバに送信する。レスポンス受信部３０２は、リクエスト送信部３０１によって送信されたリクエストを受信したサーバから送信されるレスポンスを受信し、受信したレスポンスをレスポンス記憶部３０３に記憶させる。
【００５１】
図１２は、図１０に示すリクエストに対応するレスポンスの例を示している。図１２において、最も左に記載された数字は行番号である。１行目はステータスコードである。２行目〜１４行目はヘッダである。１５行目はヘッダとメッセージ・ボディとの区切りを示している。１６行目はメッセージ・ボディである。図１２に示すレスポンスは、スクリプトを含まないレスポンスの例である。レスポンスにスクリプトが含まれる場合、メッセージ・ボディにスクリプトが含まれる。
【００５２】
図１３および図１４は、図１１に示すリクエストに対応するレスポンスの例を示している。図１３および図１４は、スクリプトが含まれるレスポンスの例を示している。図１３および図１４において、最も左に記載された数字は行番号である。図１３にはレスポンスの１行目〜１２行目、１６行目、２９行目、３２行目が示され、その他の行は省略されている。省略されている行は「・・・」で示されている。１行目はステータスコードである。２行目〜９行目はヘッダである。１０行目はヘッダとメッセージ・ボディとの区切りを示している。１１行目以降はメッセージ・ボディである。レスポンスにスクリプトが含まれる場合、メッセージ・ボディにスクリプトが含まれる。１１行目は空白行である。２９行目と３２行目では一部が示され、残りは省略されている。省略されている部分は「・・・」で示されている。
【００５３】
図１４は、レスポンスにおいて、図１３に示す部分に続く部分を示している。図１４では３６行目、３９行目、４０行目、４５行目のみが示され、それ以外の行は省略されている。省略されている行は「・・・」で示されている。３６行目、３９行目、４０行目では一部が示され、残りは省略されている。省略されている部分は「・・・」で示されている。
【００５４】
リクエスト送信部３０１は、リクエストを１回以上送信する。リクエスト送信部３０１は、リクエストを複数回送信してもよい。その場合、リクエスト送信部３０１は定期的に（所定の時間間隔で）リクエストを送信してもよい。
【００５５】
サーバ解析部３０が処理を行っている間、ステップＳ２０で実行されたアプリケーションを終了してもよい。例えば、リクエスト取得部２０１がリクエストを取得した後、アプリケーション実行部２００は、実行中の解析対象のアプリケーションを終了する。より具体的には、リクエスト取得部２０１がリクエストを取得した後であって、リクエスト送信部３０１がリクエストを送信する前にアプリケーションを終了することが望ましい。
【００５６】
例えば、複数のアプリケーションの挙動を解析する場合、複数のアプリケーションが起動したままであると、アプリケーションの挙動の解析に割り当て可能なリソースが減少する。したがって、リクエストが取得された後にアプリケーションを終了することによって、アプリケーションの挙動の解析に必要なリソースを確保することができる。
【００５７】
上記の処理では、アプリケーションの状態によらずリクエストが送信されるので、アプリケーションの挙動の解析を効率的に行うことができる。
【００５８】
（アプリケーション解析部４０による処理）
アプリケーション解析部４０は、サーバから送信されたレスポンスに含まれるスクリプトを解析し、静的解析部１０によって特定されたメソッドのうちレスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIを特定する（ステップＳ４０）。例えば、ステップＳ４０では、以下の処理が行われる。
【００５９】
アプリケーション挙動解析部４００は、レスポンス記憶部３０３に記憶されているレスポンスに含まれる情報と、メソッド解析結果記憶部１０３に記憶されているメソッドの情報とを比較する。具体的には、アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３から、add*jv*scriptInterfaceの第二引数の情報と、登録された*jv*オブジェクトのメソッドの名前とを読み出す。アプリケーション挙動解析部４００は、読み出した第二引数が示す文字列と、登録された*jv*オブジェクトのメソッドの名前が示す文字列とをドットで繋いだ文字列を生成する。
【００６０】
例えば、第二引数が「FromWebScript」であり、登録された*jv*オブジェクトのメソッドの名前が「method1()」である場合、アプリケーション挙動解析部４００は、「FromWebScript.method1()」という文字列を生成する。スクリプトにこの文字列が含まれていると、スクリプトからmethod1()メソッドが呼び出される。
【００６１】
アプリケーション挙動解析部４００は、レスポンス記憶部３０３からレスポンスを読み出し、そのレスポンスのメッセージ・ボディを検索範囲として、上記の文字列を検索する。この検索によって、アプリケーション挙動解析部４００は、スクリプトに含まれるメソッドが、静的解析で特定されたメソッドと一致するか否かを確認する。検索に使用した文字列と、検索範囲に含まれる文字列とが一致した場合、静的解析部１０によって特定されたメソッドのうちレスポンスに含まれるスクリプトの実行時に実行されるメソッドが特定されたことを意味する。
【００６２】
文字列が一致した場合、アプリケーション挙動解析部４００は、上記の第二引数および登録された*jv*オブジェクトのメソッドの名前と関連付けられているAPIの名前をメソッド解析結果記憶部１０３から読み出す。このAPIの名前は、レスポンスに含まれるスクリプトから呼び出されるメソッドが利用するAPIの名前である。つまり、レスポンスに含まれるスクリプトの実行時に実行されるメソッドが利用するAPIが特定されたことを意味する。
【００６３】
図１３、図１４に示すレスポンスの例を用いて、アプリケーション挙動解析部４００の動作を説明する。この例では、add*jv*scriptInterfaceの第二引数が「medibaappsdk」であり、登録された*jv*オブジェクトのメソッドの名前が「adFirstResult()」、「adClicked(settings.targetWindow,enurl)」、「getAdViewScale」、「dspUidSync(name,uid,publishUrl,registUrl)」、「adRefreshResult(1)」、「adRefreshResult(2)」である。アプリケーション挙動解析部４００は、「medibaappsdk」と上記の各メソッドの名前とをドットで繋いだ文字列を検索する。
【００６４】
図１３に示すレスポンスでは、１６行目に「medibaappsdk.adFirstResult()」という文字列（下線部）が登場する。したがって、アプリケーション挙動解析部４００は、この文字列を検出することによって、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されている情報を参照し、add*jv*scriptInterfaceの第二引数である「medibaappsdk」および登録された*jv*オブジェクトのメソッドの名前である「adFirstResult()」と関連付けられているAPIの名前を取得する。
【００６５】
また、図１３に示すレスポンスでは、２９行目に「medibaappsdk.adClicked(settings.targetWindow,enurl)」という文字列（下線部）が登場する。したがって、アプリケーション挙動解析部４００は、この文字列を検出することによって、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されている情報を参照し、add*jv*scriptInterfaceの第二引数である「medibaappsdk」および登録された*jv*オブジェクトのメソッドの名前である「adClicked(settings.targetWindow,enurl)」と関連付けられているAPIの名前を取得する。
【００６６】
また、図１３に示すレスポンスでは、３２行目に「medibaappsdk.getAdViewScale()」という文字列（下線部）が登場する。したがって、アプリケーション挙動解析部４００は、この文字列を検出することによって、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されている情報を参照し、add*jv*scriptInterfaceの第二引数である「medibaappsdk」および登録された*jv*オブジェクトのメソッドの名前である「getAdViewScale()」と関連付けられているAPIの名前を取得する。
【００６７】
図１４に示すレスポンスでは、３６行目に「medibaappsdk.dspUidSync(name,uid,publishUrl,registUrl)」という文字列（下線部）が登場する。したがって、アプリケーション挙動解析部４００は、この文字列を検出することによって、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されている情報を参照し、add*jv*scriptInterfaceの第二引数である「medibaappsdk」および登録された*jv*オブジェクトのメソッドの名前である「dspUidSync(name,uid,publishUrl,registUrl)」と関連付けられているAPIの名前を取得する。
【００６８】
また、図１４に示すレスポンスでは、３９行目および４０行目に「medibaappsdk.adRefreshResult(2)」という文字列（下線部）が登場する。したがって、アプリケーション挙動解析部４００は、この文字列を検出することによって、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されている情報を参照し、add*jv*scriptInterfaceの第二引数である「medibaappsdk」および登録された*jv*オブジェクトのメソッドの名前である「adRefreshResult(2)」と関連付けられているAPIの名前を取得する。
【００６９】
また、図１４に示すレスポンスでは、４５行目に「medibaappsdk. adRefreshResult(1)」という文字列（下線部）が登場する。したがって、アプリケーション挙動解析部４００は、この文字列を検出することによって、レスポンスに含まれるスクリプトの実行時に実行されるメソッドを特定する。アプリケーション挙動解析部４００は、メソッド解析結果記憶部１０３に記憶されている情報を参照し、add*jv*scriptInterfaceの第二引数である「medibaappsdk」および登録された*jv*オブジェクトのメソッドの名前である「adRefreshResult(1)」と関連付けられているAPIの名前を取得する。
【００７０】
アプリケーション挙動解析部４００は、アプリケーションの挙動の解析結果を出力する。例えば、表示部に解析結果が表示される。あるいは、いずれかの記憶部に解析結果を記憶してもよい。例えば、解析結果は、スクリプトから呼び出されるメソッドが利用するAPIの名前である。あるいは、解析結果は、スクリプトから呼び出されるメソッドが利用するAPIの処理内容（例えば、位置情報の取得）であってもよい。
【００７１】
ステップＳ１０の処理はステップＳ４０の処理よりも前に行われればよい。ステップＳ１０の処理はステップＳ２０またはステップＳ３０の処理の後に行われてもよい。リクエスト送信部３０１がリクエストを複数回送信する場合、例えば１個のリクエストを送信するステップＳ３０と、１個のレスポンスを受信して解析を行うステップＳ４０とが繰り返される。
【００７２】
次に、本実施形態の変形例を説明する。以下では、時間の経過に応じたスクリプトの変更によってアプリケーションの挙動が変化することを明示的に検出する処理について説明する。
【００７３】
アプリケーション挙動解析部４００は、第１のレスポンスに含まれる第１のスクリプトと、第１のレスポンスとは別の第２のレスポンスに含まれる第２のスクリプトとを解析する。第１のレスポンスおよび第２のレスポンスは、異なるタイミングで取得されたレスポンスである。
【００７４】
例えば、リクエスト送信部３０１がリクエストを複数回送信する場合、複数回のリクエストの送信に対応して、レスポンス受信部３０２はレスポンスを複数回受信する。レスポンス受信部３０２によって異なるタイミングで受信された複数のレスポンスのうちの任意の２つのレスポンスが上記の第１のレスポンスおよび第２のレスポンスである。
【００７５】
動的解析部２０が動的解析を行っている際にアプリケーションが送信するリクエストを受信したサーバから送信されるレスポンスを解析に利用してもよい。例えば、アプリケーション実行部２００によってアプリケーションが実行された後、リクエスト送信部３０１はリクエストの送信を行わず、レスポンス受信部３０２はレスポンスの受信を待つ。アプリケーションが送信したリクエストを受信したサーバから送信されたレスポンスを受信した場合、レスポンス受信部３０２は、受信したレスポンスをレスポンス記憶部３０３に記憶させる。このレスポンスが第１のレスポンスである。レスポンス受信部３０２がレスポンスを受信した後、リクエスト送信部３０１はリクエストを送信する。レスポンス受信部３０２は、このリクエストを受信したサーバから送信されたレスポンスを受信する。このレスポンスが第２のレスポンスである。アプリケーションが送信するリクエストを受信したサーバから送信されるレスポンスを解析に利用することによって、リクエストの送信が１回減るので、アプリケーションの挙動の解析をより効率的に行うことができる。
【００７６】
アプリケーション挙動解析部４００は、静的解析部２０によって特定されたメソッドのうち第１のスクリプトと第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定する。つまり、アプリケーション挙動解析部４００は、第１のスクリプトの実行時に実行されるメソッドが利用する第１のAPIと、第２のスクリプトの実行時に実行されるメソッドが利用する第２のAPIとを特定する。アプリケーション挙動解析部４００は、特定した第１のAPIと第２のAPIとを比較し、両者が同一であるか否かを確認する。
【００７７】
第１のAPIと第２のAPIとが同一である場合、時間が経過してもアプリケーションの挙動は変化していない。一方、第１のAPIと第２のAPIとが異なる場合、時間の経過によってスクリプトが変化し、アプリケーションの挙動が変化することを検出することができる。これによって、解析対象のアプリケーションが、時間の経過に応じて挙動を変化させるタイプのアプリケーションであることを知ることができる。
【００７８】
上記の変形例では、アプリケーション解析部４０は、第１のレスポンスに含まれる第１のスクリプトと、第１のレスポンスとは別の第２のレスポンスに含まれる第２のスクリプトとを解析し、静的解析部１０によって特定されたメソッドのうち第１のスクリプトと第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較する。
【００７９】
また、上記の変形例では、アプリケーション解析部４０は、サーバ解析部３０によって送信された第１のリクエストに対応する第１のレスポンスに含まれる第１のスクリプトと、サーバ解析部３０によって送信された、第１のリクエストとは異なる第２のリクエストに対応する第２のレスポンスに含まれる第２のスクリプトとを解析する。
【００８０】
あるいは、上記の変形例では、アプリケーション解析部４０は、アプリケーションがサーバに送信した第１のリクエストに対応する第１のレスポンスに含まれる第１のスクリプトと、サーバ解析部３０によって送信された第２のリクエストに対応する第２のレスポンスに含まれる第２のスクリプトとを解析する。
【００８１】
次に、本実施形態の他の変形例を説明する。アプリケーションがインストールされた端末とは別にアプリケーション解析装置を構成してもよい。例えば、端末が接続するアクセスポイントまたはプロキシサーバ等の通信装置を別途用意し、その通信装置にアプリケーション解析装置の機能を実装してもよい。端末とは別の通信装置にアプリケーション解析装置の機能が実装された場合、リクエスト取得部２０１は、端末のアプリケーションによって送信されたリクエストを受信することによってリクエストを取得する。これによって、解析対象のアプリケーションがインストールされた端末にアプリケーション解析装置の機能を実装する必要がなくなる。したがって、アプリケーション解析装置のOS等の実行環境が端末の実行環境に依存しなくなるので、様々な実行環境で動作するアプリケーションの挙動の解析をより効率的に行うことができる。
【００８２】
また、アプリケーション解析装置を構成する静的解析部１０、動的解析部２０、サーバ解析部３０、アプリケーション解析部４０の一部または全部が複数の異なる装置に分散して配置されていてもよい。例えば、静的解析部１０が第１の装置に配置され、動的解析部２０、サーバ解析部３０、アプリケーション解析部４０が第１の装置とは異なる第２の装置に配置されてもよい。また、静的解析部１０とアプリケーション解析部４０とが第１の装置に配置され、動的解析部２０とサーバ解析部３０とが第１の装置とは異なる第２の装置に配置されてもよい。
【００８３】
上述したように、本実施形態によれば、実際のアプリケーションの動作に基づいて、スクリプトの実行時に実行されるメソッドが利用するAPIを特定することが可能となる。また、ステップＳ３０におけるリクエストの生成と送信とを任意のタイミングで行うことによって、任意のタイミングでスクリプトを取得し、スクリプトを解析することが可能となる。任意のタイミングでWebページのスクリプトが変更される可能性があるが、本実施形態では、スクリプトが変更された場合でも、スクリプトの変更後にリクエストが送信されれば、スクリプトの変更後のアプリケーションの挙動を解析することが可能となる。よって、Web連動型アプリケーションの挙動をより正確に解析することができる。
【００８４】
また、特定の操作が行われた場合のみリクエストを送信するアプリケーションの挙動を解析する場合、アプリケーションが送信するリクエストを１回取得した後は特定の操作を行う必要がない。このため、アプリケーションの挙動の解析をより効率的に行うことができる。
【００８５】
スマートフォン等のプラットフォームでは、アプリケーションの実装によっては、複数のアプリケーションを並列に実行できない場合がある。このような場合に本実施形態では、複数のアプリケーションを１つずつ排他的に実行し、リクエストを取得した時点でアプリケーションを終了すればよい。定期的に解析を行うためにリクエストを複数回送信する場合でも、各アプリケーションは１回実行されればよい。したがって、複数のアプリケーションの挙動の解析をより効率的に行うことができる。
【００８６】
また、アプリケーションが送信するリクエストを受信したサーバから送信されるレスポンスを解析に利用することによって、アプリケーションの挙動の解析をより効率的に行うことができる。
【００８７】
（第２の実施形態）
次に、本発明の第２の実施形態を説明する。Web連携型アプリケーションの中には、端末に依存する端末情報に応じたスクリプトをサーバから受信するアプリケーションがある。端末情報に応じてスクリプトが変化するため、端末情報に応じてアプリケーションの挙動が変化する。このようなアプリケーションの挙動を解析するために、端末情報が異なる多くの端末を用意するとコストがかかる。本実施形態では、端末情報に応じて変化するアプリケーションの挙動を効率的に解析するアプリケーション解析装置について説明する。
【００８８】
本実施形態では、第１の実施形態におけるサーバ解析部３０が、図１５に示すサーバ解析部３０ａに変更される。サーバ解析部３０ａは、リクエスト生成部３００、リクエスト送信部３０１、レスポンス受信部３０２、レスポンス記憶部３０３、端末情報リスト記憶部３０４を有する。
【００８９】
端末情報リスト記憶部３０４は、端末の性能や属性を示す端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストを記憶する。図１６は、端末情報リストの例を示している。
【００９０】
図１６では端末情報の種類としてOSバージョン情報、端末モデル名、User-Agent、国コードがある。それぞれの種類に対して、端末情報として使用される複数の情報が示されている。例えば、OSバージョン情報に使用される情報として、「*andrd*1.6」、「*andrd*2.1」等が示されている。また、端末モデル名に使用される情報として、「IS01」、「IS03」等が示されている。また、User-Agentに使用される情報として、「Mozilla/5.0 (*Lnx*; U; *andrd* 4.1.1; ja-jp; Galaxy Nexus Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30」、「Mozilla/5.0 (*Lnx*; *andrd* 4.1.1; Nexus 7 Build/JRO03S) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19」等が示されている。また、国コードに使用される情報として、「JP」、「US」等が示されている。
【００９１】
本実施形態では、動的解析部２０は、アプリケーションがサーバに送信する、端末情報を含むリクエストを取得する。また、サーバ解析部３０は、動的解析部２０によって取得されたリクエストに基づいて、そのリクエストに含まれる端末情報と同一または異なる第１の端末情報を含む第１のリクエストと、第１の端末情報と異なる第２の端末情報を含む第２のリクエストとを生成し、生成された第１のリクエストと第２のリクエストとをサーバに送信する。
【００９２】
具体的には、リクエスト生成部３００は、リクエスト記憶部２０２に記憶されているリクエストに含まれる情報と、端末情報リスト記憶部３０４に記憶されている端末情報リストに含まれる情報とを比較する。このとき、リクエスト生成部３００は、リクエストのメッセージ・ボディを検索範囲として、端末情報の種類毎に、端末情報として使用される情報の文字列を検索する。例えば、OSバージョン情報として使用されるそれぞれの情報の文字列の検索、端末モデル名として使用されるそれぞれの情報の文字列の検索、User-Agentとして使用されるそれぞれの情報の文字列の検索、国コードとして使用されるそれぞれの情報の文字列の検索が順次行われる。
【００９３】
図１０に示すリクエストの例では、２行目に「Mozilla/5.0 (*Lnx*; U; *andrd* 4.1.1; ja-jp; Galaxy Nexus Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30」（下線部）がある。また、図１１に示すリクエストの例では、６行目に「Mozilla/5.0 (*Lnx*; U; *andrd* 4.1.1; ja-jp; Galaxy Nexus Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30」（下線部）がある。これらは、端末情報リストに含まれるUser-Agentの情報と一致する。
【００９４】
文字列の検索の結果、リクエスト生成部３００は、リクエスト記憶部２０２に記憶されているリクエストに含まれる情報が、端末情報リストに含まれる情報のいずれかと一致した場合に、端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択する。例えば、User-Agentに使用される情報である「Mozilla/5.0 (*Lnx*; U; *andrd* 4.1.1; ja-jp; Galaxy Nexus Build/JRO03H) AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 Mobile Safari/534.30」がリクエストに含まれている場合、リクエスト生成部３００は、User-Agentに使用される情報であって、リクエストに含まれる情報と同一の情報または異なる情報（例えば、「Mozilla/5.0 (*Lnx*; *andrd* 4.1.1; Nexus 7 Build/JRO03S) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.166 Safari/535.19」）を端末情報リストから選択する。
【００９５】
リクエスト生成部３００は、リクエストに含まれる端末情報を、上記のようにして選択した情報で置き換えることによって、新たなリクエストを生成する。リクエスト記憶部２０２に記憶されているリクエストに含まれる情報が、端末情報リストに含まれる情報のいずれかと一致した場合、そのリクエストが、端末情報を含むリクエストである。また、上記のようにしてリクエスト生成部３００が生成したリクエストが、第１の端末情報を含む第１のリクエストおよび第２の端末情報を含む第２のリクエストである。リクエスト生成部３００は、第２のリクエストを生成する際、第１の端末情報とは異なる第２の端末情報を端末情報リストから選択する。
【００９６】
リクエスト生成部３００は、リクエスト記憶部２０２に記憶されているリクエストと同一のリクエストを第１のリクエストとして生成してもよい。この場合、リクエスト記憶部２０２に記憶されているリクエストに含まれる端末情報と、第１のリクエストに含まれる第１の端末情報とは同一である。
【００９７】
リクエスト送信部３０１は上記の第１のリクエストと第２のリクエストとをサーバに送信する。リクエスト受信部３０２は、第１のリクエストを受信したサーバから送信された第１のレスポンスと、第２のリクエストを受信したサーバから送信された第２のレスポンスとを受信し、受信した第１のレスポンスと第２のレスポンスとをレスポンス記憶部３０３に記憶させる。
【００９８】
上記の例では、サーバ解析部３０は、端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストに含まれる情報と、動的解析部２０によって取得されたリクエストに含まれる情報とを比較し、そのリクエストに含まれる情報が、端末情報リストに含まれる情報のいずれかと一致した場合に、端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択し、選択した情報を含む第１のリクエストと第２のリクエストとを生成する。
【００９９】
動的解析部２０が動的解析を行っている際にアプリケーションが送信するリクエストを受信したサーバから送信されるレスポンスを解析に利用してもよい。例えば、アプリケーション実行部２００によってアプリケーションが実行された後、リクエスト送信部３０１はリクエストの送信を行わず、レスポンス受信部３０２はレスポンスの受信を待つ。アプリケーションが送信したリクエスト（第１のリクエスト）を受信したサーバから送信されたレスポンスを受信した場合、レスポンス受信部３０２は、受信したレスポンスをレスポンス記憶部３０３に記憶させる。
【０１００】
アプリケーションが送信した第１のリクエストはリクエスト記憶部２０２に記憶されている。この第１のリクエストに含まれる情報が、端末情報リストに含まれる情報のいずれかと一致した場合、この第１のリクエストに対応して受信されたレスポンスが第１のレスポンスである。レスポンス受信部３０２が第１のレスポンスを受信した後、リクエスト生成部３００は、第１のリクエストに含まれる端末情報を、上記のようにして選択した情報で置き換えることによって、第２のリクエストを生成する。リクエスト送信部３０１は第２のリクエストを送信する。レスポンス受信部３０２は、第２のリクエストを受信したサーバから送信されたレスポンスを受信する。このレスポンスが第２のレスポンスである。アプリケーションが送信するリクエストを受信したサーバから送信されるレスポンスを解析に利用することによって、リクエストの送信が１回減るので、アプリケーションの挙動の解析をより効率的に行うことができる。
【０１０１】
上記の例では、動的解析部２０は、アプリケーションがサーバに送信する、第１の端末情報を含む第１のリクエストを取得する。サーバ解析部３０は、動的解析部２０によって取得された第１のリクエストに基づいて、第１の端末情報と異なる第２の端末情報を含む第２のリクエストを生成し、生成された第２のリクエストをサーバに送信する。
【０１０２】
また、上記の例では、サーバ解析部３０は、端末情報の種類毎に、端末情報として使用される複数の情報を含む端末情報リストに含まれる情報と、動的解析部２０によって取得された第１のリクエストに含まれる情報とを比較し、第１のリクエストに含まれる情報が、端末情報リストに含まれる情報のいずれかと一致した場合に、端末情報リストから、一致した情報と同一種類の端末情報として使用される情報を選択し、選択した情報を含む第２のリクエストを生成する。
【０１０３】
アプリケーション挙動解析部４００は、第１のレスポンスに含まれる第１のスクリプトと、第２のレスポンスに含まれる第２のスクリプトとを解析する。この解析によって、アプリケーション挙動解析部４００は、静的解析部２０によって特定されたメソッドのうち第１のスクリプトと第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定する。つまり、アプリケーション挙動解析部４００は、第１のスクリプトの実行時に実行されるメソッドが利用する第１のAPIと、第２のスクリプトの実行時に実行されるメソッドが利用する第２のAPIとを特定する。アプリケーション挙動解析部４００は、特定した第１のAPIと第２のAPIとを比較し、両者が同一であるか否かを確認する。
【０１０４】
第１のAPIと第２のAPIとが同一である場合、リクエストに含まれる端末情報が変化してもアプリケーションの挙動は変化していない。一方、第１のAPIと第２のAPIとが異なる場合、リクエストに含まれる端末情報が変化することによってスクリプトが変化し、アプリケーションの挙動が変化することを検出することができる。これによって、解析対象のアプリケーションが、リクエストに含まれる端末情報の変化に応じて挙動を変化させるタイプのアプリケーションであることを知ることができる。
【０１０５】
上記の例では、アプリケーション解析部４０は、第１のリクエストに対応してサーバから送信された第１のレスポンスに含まれる第１のスクリプトと、第２のリクエストに対応してサーバから送信された第２のレスポンスに含まれる第２のスクリプトとを解析し、静的解析部１０によって特定されたメソッドのうち第１のスクリプトと第２のスクリプトとのそれぞれの実行時に実行されるメソッドが利用するAPIを特定し、かつ、第１のスクリプトの実行時に実行されるメソッドが利用するAPIと、第２のスクリプトの実行時に実行されるメソッドが利用するAPIとを比較する。
【０１０６】
上述したように、本実施形態によれば、実際のアプリケーションの動作に基づいて、スクリプトの実行時に実行されるメソッドが利用するAPIを特定することが可能となる。また、動的解析部２０によって取得されたリクエストに含まれる端末情報とは異なる端末情報を含むリクエストを送信し、そのリクエストに対応するレスポンスに含まれるスクリプトを解析することによって、端末情報の変化に応じたアプリケーションの挙動の変化を解析することが可能となる。よって、Web連動型アプリケーションの挙動をより正確に解析することができる。
【０１０７】
また、端末情報が異なる多くの端末を用意してアプリケーションの挙動を解析する必要がないため、端末情報に応じて変化するアプリケーションの挙動を効率的に解析することができる。
【０１０８】
また、アプリケーションが送信するリクエストを受信したサーバから送信されるレスポンスを解析に利用することによって、アプリケーションの挙動の解析をより効率的に行うことができる。
【０１０９】
また、動的解析部２０によって取得されたリクエストに含まれる端末情報を特定し、その端末情報と同一種類の端末情報として使用される情報を含むリクエストを生成することによって、異なる端末情報を含むリクエストをより効率的に生成することができる。
【０１１０】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【０１１１】
１０  静的解析部、２０  動的解析部、３０  サーバ解析部、４０  アプリケーション解析部、１００  逆アセンブル部、１０１  APIリスト記憶部、１０２  メソッド解析部、１０３  メソッド解析結果記憶部、２００  アプリケーション実行部、２０１  リクエスト取得部、２０２  リクエスト記憶部、３００  リクエスト生成部、３０１  リクエスト送信部、３０２  レスポンス受信部、３０３  レスポンス記憶部、３０４  端末情報リスト記憶部、４００  アプリケーション挙動解析部
【図１】
2015114968.tif 000003
【図２】
2015114968.tif 000004
【図３】
2015114968.tif 000005
【図４】
2015114968.tif 000006
【図５】
2015114968.tif 000007
【図６】
2015114968.tif 000008
【図７】
2015114968.tif 000009
【図８】
2015114968.tif 000010
【図９】
2015114968.tif 000011
【図１０】
2015114968.tif 000012
【図１１】
2015114968.tif 000013
【図１２】
2015114968.tif 000014
【図１３】
2015114968.tif 000015
【図１４】
2015114968.tif 000016
【図１５】
2015114968.tif 000017
【図１６】
2015114968.tif 000018