フォティーンフォティ技術研究所 技術戦略室の鈴木です。
今回は、AndroidのAPKファイルのリバースエンジニアリングについて話をしました。
Androidの開発や解析を行ったことがない人が最初に理解しておくべき構造や概念、最初の解析ステップを説明しました。
ここでは、簡単にその内容を紹介したいと思います。
APKファイルはAndroidのアプリファイルで、ZIP形式となっています。解析するにはまず、apktoolを用いて、AndroidManifest.xml、リソースファイル、smaliファイル等を取り出します。
apktoolを利用すると簡単に必要なファイルが抜き出されますが、実際の内部的な構造は以下の図のような関係になっています。
AndroidManifest.xmlには、そのアプリの提供するサービスや、利用するパーミッションなどが書かれており、まずこれを読むことでアプリの概要を理解できます。
リソースファイルは、文字列や画像などが含まれています。リソースはIDで管理されているため、この後紹介するsmaliファイルの中で利用されている部分を探す場合などは、このIDを検索することも必要になってきます。
実際のプログラムはsmaliファイルを読むことで行います。smaliファイルはAndroidのコードであるdexファイルの逆アセンブルです。
難読化などが施されていない場合は、かなり読みやすく、クラス名や、メソッド名、引数の型など簡単に読み取ることができます。
そのため、たとえばファイル関連の処理を抜き出したい場合などは以下のようにsmaliファイルを検索することで大体の場所を特定することができます。
find ./ -type f | xargs grep java/io/File
あとは、周辺を順に読むなどしていけばWindowsのPEファイル等の解析に比べればずっと簡単に処理を追うことができます。
関連記事
FFRI-Tech-Meeting #3-2 「Android解析入門」
FFRI-Tech-Meeting #3-3 「Windows 8 Store AppのSandbox AppContaner」
FFRI-Tech-Meeting #4-1 「Android 端末検査のコツ」
情報提供: FFRI BLOG