(57)【特許請求の範囲】
【請求項１】
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項２】
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第１の通信部とを有する端末装置と通信を行う第２の通信部と、
前記第１の通信部および前記第２の通信部を介して前記アプリケーションファイルを取得する取得部と、
前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第１の通信部および前記第２の通信部を介して前記コンポーネントを起動する起動部と、
を備えたことを特徴とするアプリケーション解析装置。
【請求項３】
前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項４】
前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログを前記第１の通信部および前記第２の通信部を介して取得し、前記ログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする請求項２に記載のアプリケーション解析装置。
【請求項５】
前記アプリケーションファイルをディスアセンブルしてソースファイルを取得するディスアセンブル部と、
前記ソースファイルに対して、前記コンポーネントがインテントを受け取るためのIDに関するコードを追加することにより前記ソースファイルを変更する変更部と、
前記コードが追加された前記ソースファイルをアセンブルし、前記アプリケーションファイルを生成するアセンブル部と、
前記アセンブル部によって生成された前記アプリケーションファイルを前記記憶部に格納するインストール部と、
をさらに備え、
前記解析部は、前記インストール部によって前記記憶部に格納された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する
ことを特徴とする請求項１に記載のアプリケーション解析装置。
【請求項６】
端末装置とアプリケーション解析装置とを備えたアプリケーション解析システムであって、
前記端末装置は、
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーション解析装置と通信を行う第１の通信部と、
を有し、
前記アプリケーション解析装置は、
前記端末装置と通信を行う第２の通信部と、
前記第１の通信部および前記第２の通信部を介して前記アプリケーションファイルを取得する取得部と、
前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第１の通信部および前記第２の通信部を介して前記コンポーネントを起動する起動部と、
を有することを特徴とするアプリケーション解析システム。
【請求項７】
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、
前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、
としてコンピュータを機能させるためのプログラム。
【請求項８】
アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第１の通信部とを有する端末装置と通信を行う第２の通信部と、
前記第１の通信部および前記第２の通信部を介して前記アプリケーションファイルを取得する取得部と、
前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、
前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第１の通信部および前記第２の通信部を介して前記コンポーネントを起動する起動部と、
としてコンピュータを機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、アプリケーションの機能を解析するアプリケーション解析装置およびアプリケーション解析システムに関する。また、本発明は、本アプリケーション解析装置としてコンピュータを機能させるためのプログラムにも関する。
【背景技術】
【０００２】
汎用OS（オペレーティングシステム）を用いたオープンプラットフォームを採用する、スマートフォンと呼ばれる携帯情報端末が普及している。また、スマートフォンに搭載される汎用OSとして、端末で管理される情報や機能を利用するための命令や関数の集合であるAPI が豊富に用意されているAndroid（登録商標）が注目を集めている。本明細書では一例として、Android（登録商標） OSを搭載したスマートフォンについて記載する。
【０００３】
スマートフォンは、誰もが自由にアプリケーションを開発して公開でき、公開されたアプリケーションをユーザが自由にインストールできるプラットフォームである。公開されたアプリケーションをスマートフォンに導入することにより、スマートフォンの様々な機能を柔軟かつ容易に拡張することができる。
【０００４】
しかし、アプリケーションの中には、ユーザに気づかれないように、端末内の情報を収集して外部に送信する悪性アプリケーション（マルウェア）が存在する。特に、正規のアプリケーションを装いつつ、こうした不正な振る舞いを行うアプリケーションはトロイの木馬と呼ばれており、ユーザがその脅威に気づくことは困難である。
【０００５】
スマートフォンには、電話やカメラを制御するAPIが設けられており、アプリケーションがAPIを利用して、発呼や、SMS（Short Message Service）通信、写真撮影を行うことができる。これらの行為を悪性アプリケーションが密かに行った場合、勝手な課金やプライバシの漏洩が発生する。
【０００６】
スマートフォンは、ユーザとの結びつきがPC（パーソナルコンピュータ）よりも緊密な機器であり、電話番号、メールアドレス、住所録、メールの送受信履歴、インターネットの閲覧履歴等の個人情報が集積している。また、端末の高機能化と、常に携帯される利用形態とから、従来のPCでは収集されなかった位置情報等の情報も容易に取得可能となり、情報が悪用される脅威に直面する。
【０００７】
また、スマートフォンでは、ユーザが明示的に操作を行ってアプリケーションを起動できる機能以外にも、端末の状態の変化に応じてアプリケーションが自動的に起動する機能がある。例えば、電話の着信があった、端末が再起動した、WiFiがオンになった等の端末の状態の変化によってアプリケーションを自動的に起動させることができる。よって、ユーザが誤って悪性アプリケーションを一旦端末にインストールしてしまうと、ユーザの知らないうちに情報漏洩が発生する可能性がある。したがって、アプリケーションを容易に入手可能な環境において情報が悪用される脅威からユーザを保護する必要がある。
【０００８】
ユーザを悪性アプリケーションによる脅威から保護する手法として、アプリケーションの安全性を事前に検証し、悪性アプリケーションを検知する仕組みが有効である。情報漏洩を行うアプリケーションを検知する手法の１つとして、動的解析の手法が提案されている。
【０００９】
動的解析とは、実際にアプリケーションを動作させ、アプリケーションの振る舞いが記録されたログを解析することで、アプリケーションの悪性／良性判定を行う手法である（例えば、非特許文献１参照）。代表的な解析方法として、straceログの情報を用いた手法がある。この手法は、アプリケーションがシステムの機能を利用した際にログに記録された情報から悪性の挙動を解析する手法である。
【先行技術文献】
【非特許文献】
【００１０】
【非特許文献１】竹森敬祐、磯原隆将、窪田歩、高野智秋、「Android携帯電話上での情報漏洩検知」、電子情報通信学会、SCIS2011シンポジウム、2011年1月
【発明の概要】
【発明が解決しようとする課題】
【００１１】
Android（登録商標）上で動作するアプリケーションは、アプリケーションの様々な機能を実現する複数のコンポーネントを構成要素として有する。動的解析の手法では、端末の状態変化に応じて自動的に起動するコンポーネントに関して、解析対象期間中に所望の状態変化が発生しない場合、そのコンポーネントが起動しないため、そのコンポーネントに関するログを取得できず、悪性アプリケーションを見逃してしまう問題がある。また、ユーザがアプリケーションに対して行う操作の全てを網羅するのに限界があり、起動できないコンポーネントが発生してしまう場合もある。
【００１２】
本発明は、上述した課題に鑑みてなされたものであって、アプリケーションのコンポーネントを自動的かつ強制的に起動することができるアプリケーション解析装置、アプリケーション解析システム、およびプログラムを提供することを目的とする。
【課題を解決するための手段】
【００１３】
本発明は、上記の課題を解決するためになされたもので、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、を備えたことを特徴とするアプリケーション解析装置である。
【００１４】
また、本発明は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第１の通信部とを有する端末装置と通信を行う第２の通信部と、前記第１の通信部および前記第２の通信部を介して前記アプリケーションファイルを取得する取得部と、前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第１の通信部および前記第２の通信部を介して前記コンポーネントを起動する起動部と、を備えたことを特徴とするアプリケーション解析装置である。
【００１５】
また、本発明のアプリケーション解析装置は、前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする。
【００１６】
また、本発明のアプリケーション解析装置は、前記起動部によって生成されたインテントによって起動した前記コンポーネントの動作結果が記録されたログを前記第１の通信部および前記第２の通信部を介して取得し、前記ログに基づいてアプリケーションの動的解析を行う動的解析部をさらに備えたことを特徴とする。
【００１７】
また、本発明のアプリケーション解析装置は、前記アプリケーションファイルをディスアセンブルしてソースファイルを取得するディスアセンブル部と、前記ソースファイルに対して、前記コンポーネントがインテントを受け取るためのIDに関するコードを追加することにより前記ソースファイルを変更する変更部と、前記コードが追加された前記ソースファイルをアセンブルし、前記アプリケーションファイルを生成するアセンブル部と、前記アセンブル部によって生成された前記アプリケーションファイルを前記記憶部に格納するインストール部と、をさらに備え、前記解析部は、前記インストール部によって前記記憶部に格納された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定することを特徴とする。
【００１８】
また、本発明は、端末装置とアプリケーション解析装置とを備えたアプリケーション解析システムであって、前記端末装置は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーション解析装置と通信を行う第１の通信部と、を有し、前記アプリケーション解析装置は、前記端末装置と通信を行う第２の通信部と、前記第１の通信部および前記第２の通信部を介して前記アプリケーションファイルを取得する取得部と、前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第１の通信部および前記第２の通信部を介して前記コンポーネントを起動する起動部と、を有することを特徴とするアプリケーション解析システムである。
【００１９】
また、本発明は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記コンポーネントを起動する起動部と、としてコンピュータを機能させるためのプログラムである。
【００２０】
また、本発明は、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルと、アプリケーションが利用する機能や権限が定義されたマニフェストファイルとを含むアプリケーションファイルを記憶する記憶部と、通信を行う第１の通信部とを有する端末装置と通信を行う第２の通信部と、前記第１の通信部および前記第２の通信部を介して前記アプリケーションファイルを取得する取得部と、前記取得部によって取得された前記アプリケーションファイルに含まれる前記マニフェストファイルを解析し、前記実行ファイルに含まれる前記コンポーネントを特定する解析部と、前記解析部によって特定された前記コンポーネントを起動するインテントを生成し、前記第１の通信部および前記第２の通信部を介して前記コンポーネントを起動する起動部と、としてコンピュータを機能させるためのプログラムである。
【発明の効果】
【００２１】
本発明によれば、アプリケーションファイルに含まれるマニフェストファイルを解析することにより、実行ファイルに含まれるコンポーネントを特定し、そのコンポーネントを起動するインテントを生成し、コンポーネントを起動することによって、アプリケーションのコンポーネントを自動的かつ強制的に起動することができる。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施形態によるアプリケーション解析装置の構成を示すブロック図である。
【図２】本発明の第１の実施形態におけるパッケージファイルの構成を示す参考図である。
【図３】本発明の第１の実施形態におけるアプリケーションの解析手順を示すシーケンス図である。
【図４】本発明の第１の実施形態におけるマニフェストファイルの内容を示す参考図である。
【図５】本発明の第１の実施形態においてActivityを起動するメソッドを示す参考図である。
【図６】本発明の第１の実施形態においてBroadcastReceiverを起動するメソッドを示す参考図である。
【図７】本発明の第２の実施形態によるアプリケーション解析装置の構成を示すブロック図である。
【図８】本発明の第２の実施形態によるアプリケーション解析装置が備えるアプリケーション変更部の構成を示すブロック図である。
【図９】本発明の第２の実施形態におけるアプリケーションの解析手順を示すシーケンス図である。
【図１０】本発明の第２の実施形態においてServiceを起動するメソッドを示す参考図である。
【図１１】本発明の第３の実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【図１２】本発明の第３の実施形態におけるアプリケーションの解析手順を示すシーケンス図である。
【図１３】本発明の第３の実施形態によるアプリケーション解析システムの構成を示すブロック図である。
【発明を実施するための形態】
【００２３】
以下、図面を参照し、本発明の実施形態を説明する。本明細書および図面では、便宜上、必要に応じてandroid（登録商標）という文字列を*andrd*という文字列で代用し、Android（登録商標）という文字列を*Andrd*という文字列で代用している。すなわち、*andrd*という文字列はandroid（登録商標）という文字列と等価であり、*Andrd*という文字列はAndroid（登録商標）という文字列と等価である。
【００２４】
Android（登録商標）上で動作するアプリケーションの構成要素であるコンポーネントとして、Activity、Service、BroadcastReceiver、ContentProviderの4つがある。アプリケーションのソースコードにおいて、クラスが継承するコンポーネントが記述されることにより、そのクラスで定義されているメソッドはそのコンポーネントを利用することが可能となる。以下、各コンポーネントについて説明する。
【００２５】
Activityは、ユーザに対して視覚的なインターフェースを提供し、画面上でユーザと対話を行うコンポーネントである。アプリケーションを起動すると画面が表示される場合、Activityに記述されたプログラムが動作している。
【００２６】
Serviceは、画面を表示する機能を持たずに、バックグラウンドで処理を実行するコンポーネントである。例えば、ユーザが音楽を聞きながらブラウザを起動してインターネットの利用を楽しむ場合、音楽用アプリケーションがServiceを起動することにより、ユーザはインターネットの利用中に音楽を聞くことができる。
【００２７】
BroadcastReceiverは、Android（登録商標）が搭載された端末装置のシステム全体にブロードキャストされるINTENTを受け取るコンポーネントである。例えば、電池残量が減ってきたときに、「残りのバッテリー残量が少ないです」というメッセージを含む画面を表示するアプリケーションでは、電池残量が変化するときに発行されるBroadcastIntentをBroadcastReceiverにより受け取ったアプリケーションがActivityを起動して画面を表示する。
【００２８】
ContentProviderは、アプリケーションが保持するデータを他のコンポーネントでも使用可能にするコンポーネントである。例えば、あるアプリケーションが電話帳のデータを取得したい場合、そのアプリケーションは、電話帳アプリケーションのContentProviderを利用して、電話帳に登録されている情報を取得する。
【００２９】
Android（登録商標）では、インテント（Intent）という仕組みがある。インテントは、コンポーネント間の情報の受け渡しやコンポーネントの起動など、コンポーネントを繋ぐ役割を果たしている。コンポーネントのうち、Activity、BroadcastReciver、Serviceはインテントによって起動される。コンポーネントを起動するコードがソースファイルに記述されていても、それだけではインテントによってコンポーネントを起動できる状態にはならない。明示的にシステムにインテントを知らせるためには、マニフェストファイルと呼ばれるファイルにおいてコンポーネントの使用を宣言する必要がある。以下の各実施形態では、マニフェストファイルに記述されたコンポーネントの情報を解析し、解析結果に基づいて、アプリケーションに含まれる各コンポーネントにインテントを発行することによって、コンポーネントを強制的に起動する方法を説明する。
【００３０】
悪意のユーザがAndroid（登録商標）のトロイの木馬を他人の端末に導入させる手法として、不正な挙動が発生するように正規のアプリケーションを改竄し、そのアプリケーションをマーケットに公開するという手法がある。悪性アプリケーションの開発者は、正規のアプリケーションの実行ファイルをディスアセンブル（逆アセンブル）してソースファイルを取得し、ソースファイルを改竄した後、ソースファイルをアセンブルして悪性アプリケーションの実行ファイルを生成する。不正な挙動が発生するように正規のアプリケーションを改竄する簡単な手法として、以下の２つの手法がある。これまでに出現したトロイの木馬では、２つの手法のどちらかがとられていることが多い。
【００３１】
第１の手法は、正規のアプリケーションに対して、BroadcastReceiverを利用して、端末の状態変化が発生したときに不正な挙動が発生するように改竄を施す手法である。この手法は、正規のアプリケーションの実行コードを改竄せずにマニフェストファイルだけを改竄するだけで容易に実現できる。
【００３２】
第２の手法は、正規のアプリケーションのソースコードにおいて、アプリケーションが起動した際に最初に呼び出されて実行されるActivityのonCreateメソッドが記述されている箇所に、不正な挙動が発生するメソッドのコードを追記する手法である。onCreateメソッドは、Activity、Service、BroadcastReceiver、ContentProviderが起動した際に最初に呼び出されて実行されるメソッドであり、各コンポーネントを起動するインテントが発行されると、自動的に実行される。アプリケーションが起動した際に最初に呼び出されるメソッドを解析することは容易であり、この手法は、数行のコードを挿入するという容易な手法で実現できる。
【００３３】
以下の各実施形態では、アプリケーションが有する全てのコンポーネントを強制的に起動させることによって、上記のいずれかの特徴を有するトロイの木馬型のマルウェアの動的解析を行うことが可能となる。
【００３４】
（第１の実施形態）
まず、本発明の第１の実施形態を説明する。図１は、本実施形態によるアプリケーション解析装置の構成を示している。アプリケーション解析装置は、記憶部１０、アプリケーション解析部１１、動的解析部１２を有する。
【００３５】
記憶部１０は、解析対象のアプリケーションの実行ファイルを含むパッケージファイル（アプリケーションファイル）を記憶する。図２は、インストール前のアプリケーションのパッケージファイルの構成を示している。パッケージファイルは、例えば拡張子が.apkのファイルであり、アプリケーションの機能を実現する構成要素であるコンポーネントを含む実行ファイルＦ１（例えば拡張子が.dex）、アプリケーションが利用する機能や権限が定義されたマニフェストファイルＦ２（例えば拡張子が.xml）、アプリケーションが利用するテキストファイルや画像ファイル等の各種リソースファイルＦ３を含む。アプリケーションがインストールされると、パッケージファイルが展開されて記憶部１０に各種ファイルが格納されると共に、記憶部１０の所定のフォルダ（/data/app/）の配下にパッケージファイル自体が格納される。
【００３６】
アプリケーション解析部１１は、解析対象のアプリケーションのパッケージファイルを用いて、アプリケーションの機能を解析する。本実施形態のアプリケーション解析部１１はアプリケーションとして構成されている。アプリケーション解析部１１は、インテント発行部１１０とマニフェスト解析部１１１を有する。マニフェスト解析部１１１は、パッケージファイルに含まれるマニフェストファイルを解析し、実行ファイルに含まれるコンポーネントを特定する。インテント発行部１１０は、マニフェスト解析部１１１によって特定された各コンポーネントを起動するインテントを発行（生成）することにより、コンポーネント毎にアプリケーションを起動する。動的解析部１２は、起動したアプリケーションの動的解析を行う。
【００３７】
ContentProviderは、データを管理するコンポーネントであるため本実施形態ではインテントを発行する対象ではない。ActivityとBroadcastReceiverに関してはインテントを発行することで起動することが可能であるが、Serviceに関しては他のアプリケーションからのインテントがセキュリティの関係上、解析対象のアプリケーションに届かないため起動することができない。本実施形態では、ActivityとBroadcastReceiverを起動する方法を説明する。
【００３８】
次に、アプリケーション解析装置の動作を説明する。図３はアプリケーションの解析手順を示している。まず、マニフェスト解析部１１１は、記憶部１０に格納されている解析対象のアプリケーションのパッケージファイルからマニフェストファイルを抽出する（ステップＳ１００）。Android（登録商標）では、端末にインストールされたアプリケーションのパッケージファイルは、所定のフォルダ（/data/app/）の配下に保存されている。ステップＳ１００ではマニフェスト解析部１１１はこのフォルダを参照する。
【００３９】
続いて、マニフェスト解析部１１１はマニフェストファイルの内容を解析し、解析対象のアプリケーションのパッケージ名と、Activityのクラス名と、BroadcastReceiverの起動条件とを取得する（ステップＳ１０５）。図４はマニフェストファイルの内容の一例を示している。解析対象のアプリケーションのパッケージ名は、「<manifest」という文字列で開始されるタグ（「<」と「>」で囲まれた部分）内の「package=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。図４では、パッケージ名は「com.sample.app」である。
【００４０】
Activityのクラス名は、「<activity」という文字列で開始されるタグ内の「*andrd*:name=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。図４では、クラス名は「.Main_Activity」である。BroadcastReceiverの起動条件は、「<receiver」という文字列で開始されるタグの後の「<intent-filter>」という文字列と「</intent-filter>」という文字列とで囲まれた部分において、「<action」という文字列で開始されるタグ内の「*andrd*:name=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。図４では、BroadcastReceiverの起動条件は「*andrd*.intent.action.BOOT_COMPLETED」であり、この例ではシステム起動時にBroadcastReceiverが起動することが示されている。
【００４１】
続いて、インテント発行部１１０は、ステップＳ１０５で取得された情報に基づいて、解析対象のアプリケーションに含まれるコンポーネントに対するインテントを発行（生成）し、記憶部１０にインストールされているアプリケーションのコンポーネントを起動する（ステップＳ１１０）。Activityは、パッケージ名とクラス名を指定してインテントを発行することで起動することができる。具体的には、ステップＳ１１０ではインテント発行部１１０はインテントオブジェクトを生成し、startActivityメソッドを実行する。図５は、Activityを起動するコードの一例を示している。１行目でインテントオブジェクトが生成され、２行目でパッケージ名とクラス名が指定されている。３行目でActivityの起動に必要なフラグが付加され、４行目でstartActivityメソッドが実行され、インテントが発行される。
【００４２】
BroadcastReceiverは、起動条件として指定された条件のインテントを発行することで起動することができる。具体的には、ステップＳ１１０ではインテント発行部１１０はインテントオブジェクトを生成し、sendBroadcastメソッドを実行する。図６は、BroadcastReceiverを起動するコードの一例を示している。１行目で起動条件が設定されたインテントオブジェクトが生成され、２行目でsendBroadcastメソッドが実行され、インテントが発行される。
【００４３】
上記のようにして、解析対象のアプリケーションを構成するコンポーネントが起動した後、動的解析部１２は、コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う。アプリケーションのログは、straceやLogcat等のコマンドを実行することにより取得することができる。
【００４４】
上述したように、本実施形態によれば、パッケージファイルに含まれるマニフェストファイルを解析することにより、アプリケーションに含まれるActivityとBroadcastReceiverのコンポーネントを特定し、そのコンポーネントを起動するインテントを生成し、コンポーネントを起動することによって、アプリケーションのコンポーネントを自動的かつ強制的に起動することができる。このため、従来の動的解析の手法では解析することが困難であったコンポーネントを起動できるようになり、動的解析の網羅性を高めることができる。また、評価者の手動操作によって起動していたコンポーネントを自動的に起動することによって、評価コストを削減することができる。
【００４５】
（第２の実施形態）
次に、本発明の第２の実施形態を説明する。Android（登録商標）では、UIDと呼ばれる、アプリケーション毎に異なるIDがアプリケーションに与えられる。UIDが異なるアプリケーション間ではリソースを共有することができず、Serviceに関しては、UIDが異なる他のアプリケーションからのインテントが解析対象のアプリケーションに届かない。しかし、sharedUserIdという仕組みを利用することで、２つのアプリケーションを同一のUIDで動作させることが可能となる。これによって、２つのアプリケーション間でリソースを共有し、Serviceのインテントによりコンポーネントを起動することができる。
【００４６】
図７は、本実施形態によるアプリケーション解析装置の構成を示している。アプリケーション解析部１１がインテント発行部１１０およびマニフェスト解析部１１１に加えてアプリケーション変更部１１２を有することが第１の実施形態と異なる。これ以外の構成は、第１の実施形態で説明した構成と同様である。
【００４７】
図８はアプリケーション変更部１１２の構成を示している。アプリケーション変更部１１２は、ディスアセンブル部１１２ａ、マニフェスト変更部１１２ｂ、アセンブル部１１２ｃ、インストール部１１２ｄを有する。ディスアセンブル部１１２ａは、解析対象のパッケージファイルをディスアセンブル（逆アセンブル）し、ソースファイルを取得する。マニフェスト変更部１１２ｂは、ディスアセンブルしたソースファイルに含まれるマニフェストファイルに、sharedUserIdのコードを追加することによって、マニフェストファイルを変更する。アセンブル部１１２ｃは、変更後のマニフェストファイルを含むソースファイルをアセンブルし、パッケージファイルを生成する。インストール部１１２ｄはアセンブル後のパッケージファイルを用いて記憶部１０にアプリケーションをインストールする。前述したように、アプリケーションがインストールされると、パッケージファイルが展開されて記憶部１０に各種ファイルが格納されると共に、記憶部１０の所定のフォルダ（/data/app/）の配下にパッケージファイル自体が格納される。
【００４８】
次に、アプリケーション解析装置の動作を説明する。図９はアプリケーションの解析手順を示している。まず、Serviceのインテントによってコンポーネントを起動できるように、アプリケーション変更部１１２が解析対象のアプリケーションのパッケージファイルを変更する（ステップＳ２００）。ステップＳ２００では具体的には以下の処理が行われる。
【００４９】
ディスアセンブル部１１２ａは、解析対象のパッケージファイルをディスアセンブルし、パッケージファイルのソースファイルを取得する（ステップＳ２００ａ）。ディスアセンブルを行う代表的なツールとして、Apk-toolやDedexerがある。続いて、マニフェスト変更部１１２ｂは、ディスアセンブルしたソースファイルに含まれるマニフェストファイルにコードを追加することによって、マニフェストファイルを変更する（ステップＳ２００ｂ）。
【００５０】
具体的には、ステップＳ２００ｂではマニフェスト変更部１１２ｂは、マニフェストファイルにおいて、「<manifest」という文字列で開始されるタグ内に「sharedUserId=”aaa.bbb” 」という文字列（コード）を追加する。「aaa.bbb」はUIDの一例である。アプリケーション解析部１１を構成するアプリケーションのパッケージファイルに含まれるマニフェストファイルに記述されているsharedUserIdのコードと同一のコードが解析対象のアプリケーションのマニフェストファイルに追加される。つまり、アプリケーション解析部１１を構成するアプリケーションと、変更後の解析対象のアプリケーションは同一のUIDを有することになる。
【００５１】
続いて、アセンブル部１１２ｃは、アプリケーション解析部１１を構成するアプリケーションのアセンブル時に使用した証明書と同一の証明書を使用して、変更後のマニフェストファイルを含むソースファイルに署名を施してアセンブルを行い、パッケージファイルを生成する（ステップＳ２００ｃ）。続いて、インストール部１１２ｄはアセンブル後のパッケージファイルを用いて記憶部１０にアプリケーションをインストールする（ステップＳ２００ｄ）。
【００５２】
パッケージファイルの変更後、マニフェスト解析部１１１は、記憶部１０にインストールされた解析対象のアプリケーションのパッケージファイルからマニフェストファイルを抽出する（ステップＳ２０５）。端末にインストールされたアプリケーションのパッケージファイルは、所定のフォルダ（/data/app/）の配下に保存されているので、ステップＳ２０５ではマニフェスト解析部１１１はこのフォルダを参照する。
【００５３】
続いて、マニフェスト解析部１１１はマニフェストファイルの内容を解析し、解析対象のアプリケーションのパッケージ名と、Serviceのクラス名とを取得する（ステップＳ２１０）。解析対象のアプリケーションのパッケージ名は、「<manifest」という文字列で開始されるタグ内の「package=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。図４では、パッケージ名は「com.sample.app」である。Serviceのクラス名は、「<service」という文字列で開始されるタグ内の「*andrd*:name=」という文字列に続く「"」と「"」に囲まれた部分に記載されている。図４では、クラス名は「.Main_Service」である。
【００５４】
続いて、インテント発行部１１０は、ステップＳ２１０で取得された情報に基づいて、解析対象のアプリケーションに含まれるコンポーネントに対するインテントを発行（生成）し、記憶部１０にインストールされているアプリケーションのコンポーネントを起動する（ステップＳ２１５）。アプリケーション解析部１１を構成するアプリケーションと解析対象のアプリケーションが同一のUIDで動作する場合、Serviceは、パッケージ名とクラス名を指定してインテントを発行することで起動することができる。具体的には、ステップＳ２１５ではインテント発行部１１０はインテントオブジェクトを生成し、startServiceメソッドを実行する。図１０は、Serviceを起動するコードの一例を示している。１行目でパッケージ名とクラス名が設定されたインテントオブジェクトが生成され、２行目でstart Serviceメソッドが実行され、インテントが発行される。
【００５５】
上記のようにして、解析対象のアプリケーションを構成するコンポーネントが起動した後、動的解析部１２は、コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う。
【００５６】
上述したように、本実施形態によれば、Serviceに関して、アプリケーションのコンポーネントを自動的かつ強制的に起動することができる。なお、アプリケーション解析部１１が第１の実施形態の機能と第２の実施形態の機能との両方を備えていてもよい。
【００５７】
（第３の実施形態）
次に、本発明の第３の実施形態を説明する。第３の実施形態では、解析対象のアプリケーションが起動する端末装置と、アプリケーション解析装置とを有するアプリケーション解析システムについて説明する。
【００５８】
図１１は、本実施形態によるアプリケーション解析システムの構成を示している。アプリケーション解析システムは端末装置１とアプリケーション解析装置２を有する。端末装置１は、記憶部１０と通信部１３を有する。アプリケーション解析装置２は、アプリケーション解析部２０、記憶部２１、動的解析部２２を有する。アプリケーション解析装置２は、例えばPC（Personal Computer）である。
【００５９】
記憶部１０は、解析対象のアプリケーションの実行ファイルを含むパッケージファイル（アプリケーションファイル）を記憶する。通信部１３はアプリケーション解析装置２と通信を行う。
【００６０】
アプリケーション解析部２０は、解析対象のアプリケーションのパッケージファイルを用いて、アプリケーションの機能を解析する。本実施形態のアプリケーション解析部２０はアプリケーションとして構成されている。アプリケーション解析部２０は、通信部２００、取得部２０１、インテント発行部２０２、マニフェスト解析部２０３を有する。通信部２００は端末装置１と通信を行う。端末装置１とアプリケーション解析装置２の通信は、adb Interfaceを用いて行われる。adb Interfaceは、PCと、Android（登録商標）で動作する端末装置とを接続し、PCで動作するシェルから端末装置を操作できるインターフェースであり、Android（登録商標）のSDK（Software Development Kit）にツールとして用意されている。
【００６１】
取得部２０１は、通信部２００を介して端末装置１の通信部１３と通信を行い、記憶部１０に格納されている解析対象のアプリケーションのパッケージファイルと、起動したアプリケーションのログとを取得する。マニフェスト解析部２０３は、パッケージファイルに含まれるマニフェストファイルを解析し、実行ファイルに含まれるコンポーネントを特定する。インテント発行部２０２は、マニフェスト解析部２０３によって特定された各コンポーネントを起動するインテントを発行（生成）することにより、コンポーネント毎にアプリケーションを起動する。
【００６２】
記憶部２１は、アプリケーションの解析時に端末装置１から取得される解析対象のアプリケーションのパッケージファイルを記憶する。動的解析部２２は、起動したアプリケーションの動的解析を行う。
【００６３】
次に、アプリケーション解析システムの動作を説明する。図１２はアプリケーションの解析手順を示している。まず、取得部２０１は、通信部２００を介して端末装置１の通信部１３と通信を行い、記憶部１０に格納されている解析対象のアプリケーションのパッケージファイルのコピーを取得する（ステップＳ３００）。端末装置１にインストールされたアプリケーションのパッケージファイルは、所定のフォルダ（/data/app/）の配下に保存されているので、このフォルダを参照することにより、パッケージファイルを取得することができる。adb Interfaceでは、PCから端末装置のデータを取得するadb pullコマンドがある。例えば「adb pull /data/app/AAA.apk」というコマンドを実行することによりパッケージファイルを取得することができる。「AAA.apk」は取得対象のパッケージファイルのファイル名である。取得されたパッケージファイルは記憶部２１に格納される。
【００６４】
続いて、マニフェスト解析部１１１は、記憶部２１に格納されている解析対象のアプリケーションのパッケージファイルからマニフェストファイルを抽出する（ステップＳ３０５）。Android（登録商標）のSDKでは、マニフェストファイルを抽出するツールとしてaaptが用意されている。ステップＳ３０５ではマニフェスト解析部１１１は、aaptを用いてマニフェストファイルを抽出する。例えば、「aapt d xmltree AAA.apk *Andrd*Manifest.xml」というコマンドを実行することによりマニフェストファイルを抽出することができる。「AAA.apk」は取得対象のパッケージファイルのファイル名である。
【００６５】
続いて、マニフェスト解析部２０３はマニフェストファイルの内容を解析し、解析対象のアプリケーションのパッケージ名と、Activityのクラス名と、BroadcastReceiverの起動条件とを取得する（ステップＳ３１０）。ステップＳ３１０で取得される各情報の内容は、第１の実施形態で説明した内容と同様である。
【００６６】
続いて、インテント発行部２０２は、ステップＳ３１０で取得された情報に基づいて、解析対象のアプリケーションに含まれるコンポーネントに対するインテントを発行（生成）する。インテント発行部２０２は、発行したインテントを、通信部２００を介して端末装置１の通信部１３へ送信し、記憶部１０にインストールされているアプリケーションのコンポーネントを起動する（ステップＳ３１５）。
【００６７】
Activityは、パッケージ名とクラス名を指定してインテントを発行することで起動することができる。Android（登録商標）では、adb Interfaceでインテントを送信するコマンドとして、amコマンドがある。例えば、「am start −n "com.sample.app","com.sample.app.Main_Activity"」というコマンドを実行することによりインテントを送信することができる。
【００６８】
BroadcastReceiverは、起動条件として指定された条件のインテントを発行することで起動することができる。Activityのインテントと同様に、amコマンドを利用してBroadcastReceiverのインテントを送信することができる。例えば、「am broadcast −a “*andrd*.intent.action.BOOT_COMPLETED”」 というコマンドを実行することによりインテントを送信することができる。
【００６９】
上記のようにして、解析対象のアプリケーションを構成するコンポーネントが起動した後、動的解析部２２は、通信部２００を介して端末装置１の通信部１３と通信を行い、コンポーネントの動作結果が記録されたログを端末装置１から取得し、取得したログに基づいてアプリケーションの動的解析を行う。
【００７０】
上記ではアプリケーション解析装置２で動的解析が行われるが、端末装置１で動的解析を行ってもよい。図１３は、本実施形態によるアプリケーション解析システムの他の構成例を示している。図１３に示すアプリケーション解析システムでは、端末装置１が動的解析部１２を有している。アプリケーション解析部２０は、解析対象のアプリケーションを構成するコンポーネントを起動した後、通信部２００を介して端末装置１の通信部１３と通信を行い、動的解析部１２に動的解析の指示を与える。指示を受けた動的解析部１２は、コンポーネントの動作結果が記録されたログに基づいてアプリケーションの動的解析を行う。
【００７１】
上述したように、本実施形態によれば、ActivityとBroadcastReceiverに関して、解析対象のアプリケーションがインストールされた端末装置１と接続されたアプリケーション解析装置２からアプリケーションのコンポーネントを自動的かつ強制的に起動することができる。
【００７２】
上述した各実施形態のアプリケーション解析部１１，２０はアプリケーションとして構成されている。アプリケーション解析部１１，２０を構成するアプリケーションのプログラムをコンピュータ読み取り可能な記録媒体に記録して、この記録媒体に記録されたプログラムをコンピュータ（上記の各実施形態のアプリケーション解析装置）に読み込ませ、実行させることにより、アプリケーション解析部１１，２０は、規定された処理を実行する。
【００７３】
ここで、「コンピュータ」は、ＷＷＷシステムを利用している場合であれば、ホームページ提供環境（あるいは表示環境）も含むものとする。また、「コンピュータ読み取り可能な記録媒体」とは、フレキシブルディスク、光磁気ディスク、ＲＯＭ、ＣＤ−ＲＯＭ等の可搬媒体、コンピュータに内蔵されるハードディスク等の記憶装置のことをいう。さらに「コンピュータ読み取り可能な記録媒体」とは、インターネット等のネットワークや電話回線等の通信回線を介してプログラムが送信された場合のサーバやクライアントとなるコンピュータシステム内部の揮発性メモリ（ＲＡＭ）のように、一定時間プログラムを保持しているものも含むものとする。
【００７４】
また、上述したプログラムは、このプログラムを記憶装置等に格納したコンピュータから、伝送媒体を介して、あるいは伝送媒体中の伝送波により他のコンピュータに伝送されてもよい。ここで、プログラムを伝送する「伝送媒体」は、インターネット等のネットワーク（通信網）や電話回線等の通信回線（通信線）のように、情報を伝送する機能を有する媒体のことをいう。また、上述したプログラムは、前述した機能の一部を実現するためのものであってもよい。さらに、前述した機能を、コンピュータに既に記録されているプログラムとの組合せで実現できるもの、いわゆる差分ファイル（差分プログラム）であってもよい。
【００７５】
以上、図面を参照して本発明の実施形態について詳述してきたが、具体的な構成は上記の実施形態に限られるものではなく、本発明の要旨を逸脱しない範囲の設計変更等も含まれる。
【符号の説明】
【００７６】
１・・・端末装置、２・・・アプリケーション解析装置、１０，２１・・・記憶部、１１，２０・・・アプリケーション解析部、１２，２２・・・動的解析部、１３，２００・・・通信部、１１０，２０２・・・インテント発行部（起動部）、１１１，２０３・・・マニフェスト解析部（解析部）、１１２ａ・・・ディスアセンブル部、１１２ｂ・・・マニフェスト変更部（変更部）、１１２ｃ・・・アセンブル部、１１２ｄ・・・インストール部、２０１・・・取得部
【図１】
0005723760.tif 000002
【図２】
0005723760.tif 000003
【図３】
0005723760.tif 000004
【図４】
0005723760.tif 000005
【図５】
0005723760.tif 000006
【図６】
0005723760.tif 000007
【図７】
0005723760.tif 000008
【図８】
0005723760.tif 000009
【図９】
0005723760.tif 000010
【図１０】
0005723760.tif 000011
【図１１】
0005723760.tif 000012
【図１２】
0005723760.tif 000013
【図１３】
0005723760.tif 000014