home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

技術/Android/ReverseEngineering (v1)

技術/Android/ReverseEngineering (v1)

技術 / Android / ReverseEngineering (v1)
id: 972 所有者: msakamoto-sf    作成日: 2011-05-30 08:03:25
カテゴリ: Android 

Androidのリバースエンジニアリング関連メモ。

参考:



.apkファイルからのリバースエンジニアリング

.apkファイルはネット上、あるいはファイルバックアップツールなどでAndroid実機上から入手できる。
使用しているツールはJUMPERZ.NETで紹介されているリンクから入手できる。

1. 拡張子をzipに変更し展開する

.apkのファイルはzipフォーマットなので、拡張子を.zipにして(まぁUnix上であれば拡張子はどうでもいいけど)、展開する。

中身:署名済みのapkの場合。署名していないapkの場合、"META-INF"が無い。

│  AndroidManifest.xml
│  classes.dex
│  resources.arsc
│
├─META-INF
│      CERT.RSA
│      CERT.SF
│      MANIFEST.MF
│
└─res/ "res/" 以下の各種リソースファイル・XMLリソース

2. AndroidManifest.xmlの復元

バイナリ形式に変換されているAndroidManifest.xmlを復元する。AXMLPrinter2.jarを使う。

> java -jar AXMLPrinter2.jar AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest
        xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.isecpartners.android.packageplay"
        >
...

復元されたAndroidManifest.xmlが標準出力に出力される。
他のXMLリソースファイルについてもAXMLPrinter2.jarでテキスト形式に変換できる。

3. Dalvik用バイトコードを逆アセンブル

Dalvik用バイトコードはclasses.dexにひとまとめにされている。これをbaksmaliを使って逆アセンブルする。
カレントディレクトリに"out"フォルダが作成され、その中の拡張子 ".smali" が逆アセンブルされたクラスファイルとなる。

> java -jar baksmali-1.2.6.jar classes.dex

> tree /f out

C:\...\OUT
└─foo
    └─bar
        └─baz
            └─testpkc
                    Main$1.smali
                    Main.smali
                    R$attr.smali
                    R$drawable.smali
                    R$id.smali
                    R$layout.smali
                    R$string.smali
                    R.smali
                    ...

4. Dalvik用バイトコードをJavaソースに逆コンパイル

dex2jarを使うと、classes.dexをjarファイルに復元できる。JDなどのJava逆コンパイル用ツールを使うことで、jarファイルをJavaのソースコードに逆コンパイル出来る。

> dex2jar.bat ..\..\re\PackagePlay\classes.dex

classes.dexと同じフォルダに

classes.dex.dex2jar.jar

が生成される。これをJDなどで開けば、Javaソースコードを確認できる。

なお "3." で紹介したsmaliもそうだが、Android SDKに含まれるProGuardなどで最適化・難読化が施されている場合、人間にはかなり読みづらい逆アセンブルや逆コンパイル結果となる。

5. リソースファイルの復元とDalvikバイトコードの逆アセンブルを一度に実行

JUMPERZ.NETでは紹介されていないが、android-apktoolを使うとapkファイルからXMLの復元+Dalvikバイトコードの逆アセンブルまでを一つのコマンドで実行出来る。GoogleCodeで公開されており、本記事冒頭の参考リンクより入手先できる。

> (...)\apktool.bat decode foo.apk out

outフォルダが作成され、その中にファイルが生成される。strings.xmlなど各種XMLリソースファイルまで抽出・復元されている。

out
│  AndroidManifest.xml
│  apktool.yml
│
├─res
│  ├─drawable
│  │      icon.png
│  │
│  ├─layout
│  │      main.xml
│  │      textdesc.xml
│  │
│  └─values
│          ids.xml
│          public.xml
│          strings.xml
│
└─smali
    └─com
        └─isecpartners
            └─android
                └─packageplay
                        Main$1.smali
                        Main.smali
                        R$attr.smali
                        R$drawable.smali
                        R$id.smali
                        R$layout.smali
                        R$string.smali
                        R.smali
                        ...


プレーンテキスト形式でダウンロード
表示中のバージョン : 1
現在のバージョン : 3
更新者: msakamoto-sf
更新日: 2011-09-18 18:00:16
md5:a578368eace3804926857dbf44e602a0
sha1:fe97e5b26cb2411580d2e707ef97ff86cd313929
コメント
コメントを投稿するにはログインして下さい。