たていすのメモ このページをアンテナに追加 RSSフィード

2010/07/09

apkファイルに含まれたAndroidManifest.xmlのデコード

androidのアプリケーションパッケージであるapkファイルを適当なアプリでSDカードにバックアップした後、そのzipされてる中にある AndroidManifest.xml を読むことになったのでメモしておきます。

xmlなんですがバイナリにエンコードされています。

文字列テーブル

後述するxmlデータ中の文字列がまとめて格納されています。

ヘッダ情報

  • エントリ数 *(Int32)[data+0x10]
  • 開始アドレス *(Int32)[data+0x1c] +8

この開始アドレスから、エントリ数だけ次の構造を読みます。

  • Int16 長さ
  • UTF-16 String 文字列データ
  • UNT-16[1] null terminator

xmlデータ

文字列テーブルの後にXMLデータのヘッダがあるのですが、

構造がよくわからないのでFFFFFFFFまで読み飛ばします。

さらに12バイト読み飛ばすか12バイト戻すと、次のような構造があります。

0x100102 開始タグ

# 0x100102,0x38,0x54,-1,-1, タグ名

タグ名というか文字列は全て文字列テーブルのインデクスで表現されています。

3つ目はおそらくタグのインデックス

4つ目はおそらく名前空間です。

0x140014 属性

# 0x140014,0x1,0x0

2つ目が属性の数です。この並びの後に次のような属性データが複数並びます。

# ns,name,nazo1,nazo2,value

最後3つの部分は値の表現ですが、即値、リソースID、文字列テーブル参照などのパターンがあります。

0x100103 終了タグ

# 0x100103,0x18,0x55,-1,-1,manifest

開始タグと似た構造です。

0x100101 全体の終了

# 0x100101,0x18,0x55,-1,android,http://schemas.android.com/apk/res/android

3つめの数字は最後のタグのID

0x100100 全体の開始

# 0x100100,0x18,0x13,-1,android,http://schemas.android.com/apk/res/android

3つめの数字は最初のタグのID

参考URL

http://d.hatena.ne.jp/esmasui/20100410/1270920943

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/tateisu/20100709/1278680893