Javaのアプリケーションは解析しやすいという特徴があります。アプリを解析できれば、脆弱性が含まれていないかどうかを判断し、よりセキュリティを高めることができます。特集の最後に、アプリケーションを解析するためのツールと、その方法を説明します。

アプリを解凍する

 Androidアプリは、apkというファイルにパッケージングされています。このapkファイルは、ZIP形式でアーカイブされたもので、解凍ソフトで展開できます。apkファイルを展開してみると、いくつかのファイルが現れます(図15)。

図15●apkファイルの中身
図15●apkファイルの中身
[画像のクリックで拡大表示]

 META-INF/ディレクトリですが、パッケージに署名をしている場合にこのディレクトリが作成されて、署名に関係するファイルが入っています。res/ディレクトリ内のファイルとresources.arscは、アプリケーションで使用している画像やレイアウト、文字列などのリソースファイルがバイナリ形式になったものです。

 AndroidManifest.xmlは、実装を行っているときに編集していたAndroidManifest.xmlがバイナリ化されたものです。試しにファイルを開いてみると図15の右のように、ファイルの中身はテキストではなくバイナリ形式に変換されています。

 そして、classes.dexはアプリケーションの実体、Dalvik VM上で動作するようにコンパイルされたDalvikバイトコードです。これがapkファイルの基本的な構造です。