攻撃は最大の防御なり

50代おやじの適当なブログです。

[Android] apkの中身を見てみる その3

2011-11-02 09:17:47 | Android
昨日の続きです

・assets

アプリ用の外部プログラム等が入っている所。
入れる物に縛りは無いので設定ファイルなんかが入っている場合もあります。
ROM Managerの場合はbusyboxとかが入っていますね。

・libs

ROM Managerにこのディレクトリは存在しませんが
アプリ用のライブラリが入る場所です。
AndroidのアプリはJavaで作られていると書きましたが
高速化を図る為、Cで作られたライブラリが使用できます。

・smali

これもapkをzip解凍した時には無かったディレクトリですが
このアプリの肝、Javaのクラスファイルに当たるclasses.dex
を逆コンパイルしたソースが入っています。
Javaとアセンブラを足した様なsmaliという言語で出力されます。
又、こいつの事を「逆アセンブラする」と説明しているサイトが多々ありますが
classes.dexはマシン語じゃありませんし、出力もアセンブリコードではないので誤りです。
(でも、smaliの作者は「逆アセンブラ」と記載しているんですよねw)

このコードを弄ればアプリの改造が出来るのですが
smaliの言語仕様に関する情報が殆ど入手出来ないので
自力で解析する必要があります。
Javaが書けてアセンブラのレジスタの考えを知っていれば何とか解るかな?

ディレクトリをのぞくとa.smaliとか良く意味の分からないソースが大量にありますが
AndroidManifest.xmlに記載されていない内部的に使用するクラスは名前解決が出来ないので
こんないい加減なクラス名になってしまうんです。
規模の大きなプログラムは追っていくだけで大変なので余り触りたくないですね。

・apktool.yml

apktoolの処理結果が出力されるファイルっぽいですね。
展開時にフレームワークを使用したかどうかとかが載っています。


ここで話が出たのでフレームワークに関する事もちょっと記載しておきます。
このapktookはアプリだけじゃなくてsystem配下のapkも展開できるのですが
(apk + odexの構成になっているリソースの場合は当然ながらsmaliは出力されません)
物によってframework-res.apkの中身を参照している場合があります。
apktoolではこいつらを正常に展開する為にframework-res.apkを事前登録しておく事を
install-frameworkと表現しています。

端末のframework-res.apkを引っこ抜いて来て

apktool.bat if framework-res.apk

同様にHTC系のapk場合はcom.htc.resources.apkを参照している場合があります。

端末のframework-res.apkを引っこ抜いて来て

apktool.bat if com.htc.resources.apk

展開時にエラーになる場合は試してみると良いかも。


apktoolで展開したapkをリコンパイルする手順もさらっと記載しておきます。

apktool.bat b 出力apk名 元ネタディレクトリ名


これに電子署名を付ければOKですが、物によって上手く行かない場合もあります。
ここいら辺は他の詳しいサイトを見て下さい。