SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Javaセキュアコーディング入門

Androidアプリの配布パッケージapkの解析について

Javaセキュアコーディング入門(8)

  • X ポスト
  • このエントリーをはてなブックマークに追加

apktoolの使い方

 では、Javaのコードにうまく逆コンパイルできなかった場合や、マニフェストファイル、リソースファイルなどを見たいという場合はどうするのでしょうか。そこで登場するのがapktoolです。

$ apktool d sample.apk 

 apkファイル名と同じディレクトリ、この場合だとsampleというディレクトリが作成されます。このディレクトリは図3のような内容になっています。

図3 apktoolが作成したディレクトリの中身
図3 apktoolが作成したディレクトリの中身

 apkを単純に展開しただけではバイナリ化され読むことができなかったAndroidManifest.xmlですが、テキストに変換されて見慣れた内容になりました。

図4 バイナリ化されていたマニフェストファイルがテキスト形式に変換
図4 バイナリ化されていたマニフェストファイルがテキスト形式に変換

 また、smaliディレクトリには、smaliと呼ばれる逆アセンブルされたDalvik VMのバイトコードが入っています。これらファイルを開いてみると、図5に示すように、何となく何をしているのかイメージが掴めそうな記述になっています。たとえば図5は、サンプルアプリケーションのonCreateメソッドの部分が逆アセンブルされたものです。invoke-superと記述されている部分では、親クラスのonCreateメソッドが呼び出され、invoke-virtualと記述されている部分ではfindViewByIdメソッドが呼び出されています。また、const-stringでは文字列への参照をレジスタに渡しています。

図5 smaliファイル
図5 smaliファイル

 smaliの文法などについては説明しませんが、必要な方は下記のドキュメントを参照してください。

 さらに、resディレクトリにはリソースファイルが、assetsディレクトリにはassetsファイルが展開されています。

 このように、apktoolを使用することでアプリケーションの中身を自由に見ることができます。もちろん、見るだけではなく編集することもでき、smaliファイルを編集しアプリケーションの挙動を変えたり、リソースファイルを編集し表示内容を変えることも可能です。編集したアプリケーションは、以下のコマンドで新しいアプリケーションとしてビルドすることができます。

$ apktool b sample new_sample.apk

 この例では、sampleディレクトリ下にあるファイルをnew_sample.apkとして再ビルドしています。

まとめ

 OWASPのセッションでは、Javaのコードを見て探すというところまででしたが、apktoolを使用することで、うまく逆コンパイルできず読めなかった部分についても、ある程度読めるものになります。また、Androidアプリケーションにとっては重要なマニフェストファイルもテキスト化され、使用しているActivityやContentProvider、パーミッションなどを確認できるようになります。

 今回は使い方を紹介しなかったandroguardやGUIで解析するツールなど、さまざまな便利なツールが登場し、だれでも簡単に解析を始められる環境が揃ってきています。

 解析を行うことで、アプリケーションの構造や挙動をより深く把握することができます。ただし、そういった行為が禁止されている場合もありますので、解析は自分で作成したアプリケーションで行ってください。

参考情報

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
Javaセキュアコーディング入門連載記事一覧

もっと読む

この記事の著者

熊谷 裕志(JPCERTコーディネーションセンター)(クマガイ ヒロシ(JPCERTコーディネーションセンター))

情報セキュリティアナリスト JPCERTコーディネーションセンターベンチャ企業にてWEBサイトのデザインやシステム開発、Androidアプリケーションの開発などに従事したのち、2011年4月よりJPCERTコーディネーションセンターにて、脆弱性情報の分析やセキュアコーディングの普及活動に携わってい...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/6992 2013/02/19 14:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング