KATOエンジニヤリング開発日誌

「アウトプット無きエンジニアにインプットもチャンスも無い」の精神で書いています

apkファイルからAndroidアプリを解析する準備

前回は脆弱性を探すためのツールとしてBurp Suiteのダウンロードと設定を行いました。

www.kato-eng.info

今回はAndroidアプリを解析する手法としてapkファイルからJavaコードを復元するツールの準備を行いました。

dex2jarを利用してapkファイルをJARファイルに変換する

Mac PCでapkファイルをJARファイルに変換するには次の手順で行う。

  1. dex2jarをダウンロードする
  2. ダウンロードしたファイルを展開し、ターミナルで展開したフォルダへ移動する
  3. 「chmod +x *」コマンドを実行
  4. 「./d2j-dex2jar.sh [apkファイルのPATH]」コマンドを実行

dex2jarをダウンロードする

Mac PCでdex2jarをダウンロードする方法はいくつかあるみたいですが、私は下記URLのサイトからダウンロードしました。

https://sourceforge.net/projects/dex2jar/

ダウンロード後、zipファイルを展開し、ターミナルで展開したフォルダへ移動します。

私は今回の演習で使用しているディレクトリにdex2jarを移動してからファイルを展開しました。

dex2jar-2.0 $pwd
${HOME}/Practice/BadSNS/badsns-master/dex2jar-2.0
dex2jar-2.0 $ll
total 160
drwx------@ 23 masayuki_kato  staff   736 10 27  2014 .
drwxr-xr-x   8 masayuki_kato  staff   256  4  3 23:48 ..
-rw-rw-r--@  1 masayuki_kato  staff   834 10 27  2014 d2j-baksmali.bat
-rw-rw-r--@  1 masayuki_kato  staff  1086 10 27  2014 d2j-baksmali.sh
-rw-rw-r--@  1 masayuki_kato  staff   847 10 27  2014 d2j-dex-recompute-checksum.bat
-rw-rw-r--@  1 masayuki_kato  staff  1099 10 27  2014 d2j-dex-recompute-checksum.sh
-rw-rw-r--@  1 masayuki_kato  staff   837 10 27  2014 d2j-dex2jar.bat
-rw-rw-r--@  1 masayuki_kato  staff  1089 10 27  2014 d2j-dex2jar.sh
-rw-rw-r--@  1 masayuki_kato  staff   834 10 27  2014 d2j-dex2smali.bat
-rw-rw-r--@  1 masayuki_kato  staff  1086 10 27  2014 d2j-dex2smali.sh
-rw-rw-r--@  1 masayuki_kato  staff   834 10 27  2014 d2j-jar2dex.bat
-rw-rw-r--@  1 masayuki_kato  staff  1086 10 27  2014 d2j-jar2dex.sh
-rw-rw-r--@  1 masayuki_kato  staff   837 10 27  2014 d2j-jar2jasmin.bat
-rw-rw-r--@  1 masayuki_kato  staff  1089 10 27  2014 d2j-jar2jasmin.sh
-rw-rw-r--@  1 masayuki_kato  staff   837 10 27  2014 d2j-jasmin2jar.bat
-rw-rw-r--@  1 masayuki_kato  staff  1089 10 27  2014 d2j-jasmin2jar.sh
-rw-rw-r--@  1 masayuki_kato  staff   831 10 27  2014 d2j-smali.bat
-rw-rw-r--@  1 masayuki_kato  staff  1083 10 27  2014 d2j-smali.sh
-rw-rw-r--@  1 masayuki_kato  staff   836 10 27  2014 d2j-std-apk.bat
-rw-rw-r--@  1 masayuki_kato  staff  1088 10 27  2014 d2j-std-apk.sh
-rw-rw-r--@  1 masayuki_kato  staff   326 10 27  2014 d2j_invoke.bat
-rw-rw-r--@  1 masayuki_kato  staff  1321 10 27  2014 d2j_invoke.sh
drwx------@ 14 masayuki_kato  staff   448 10 27  2014 lib
dex2jar-2.0 $

「chmod +x *」コマンド実行

chmodコマンドでファイルの実行権限を付与します。

dex2jar-2.0 $chmod +x *
dex2jar-2.0 $ll
total 160
drwx------@ 23 masayuki_kato  staff   736 10 27  2014 .
drwxr-xr-x   8 masayuki_kato  staff   256  4  3 23:48 ..
-rwxrwxr-x@  1 masayuki_kato  staff   834 10 27  2014 d2j-baksmali.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1086 10 27  2014 d2j-baksmali.sh
-rwxrwxr-x@  1 masayuki_kato  staff   847 10 27  2014 d2j-dex-recompute-checksum.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1099 10 27  2014 d2j-dex-recompute-checksum.sh
-rwxrwxr-x@  1 masayuki_kato  staff   837 10 27  2014 d2j-dex2jar.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1089 10 27  2014 d2j-dex2jar.sh
-rwxrwxr-x@  1 masayuki_kato  staff   834 10 27  2014 d2j-dex2smali.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1086 10 27  2014 d2j-dex2smali.sh
-rwxrwxr-x@  1 masayuki_kato  staff   834 10 27  2014 d2j-jar2dex.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1086 10 27  2014 d2j-jar2dex.sh
-rwxrwxr-x@  1 masayuki_kato  staff   837 10 27  2014 d2j-jar2jasmin.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1089 10 27  2014 d2j-jar2jasmin.sh
-rwxrwxr-x@  1 masayuki_kato  staff   837 10 27  2014 d2j-jasmin2jar.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1089 10 27  2014 d2j-jasmin2jar.sh
-rwxrwxr-x@  1 masayuki_kato  staff   831 10 27  2014 d2j-smali.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1083 10 27  2014 d2j-smali.sh
-rwxrwxr-x@  1 masayuki_kato  staff   836 10 27  2014 d2j-std-apk.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1088 10 27  2014 d2j-std-apk.sh
-rwxrwxr-x@  1 masayuki_kato  staff   326 10 27  2014 d2j_invoke.bat
-rwxrwxr-x@  1 masayuki_kato  staff  1321 10 27  2014 d2j_invoke.sh
drwx--x--x@ 14 masayuki_kato  staff   448 10 27  2014 lib
dex2jar-2.0 $

「./d2j-dex2jar.sh [apkファイルのPATH]」コマンド実行

「badsns-android_v1.0.apk」ファイルに対してd2j-dex2jar.shスクリプトを実行します。

dex2jar-2.0 $./d2j-dex2jar.sh ../badsns-android_v1.0.apk
dex2jar ../badsns-android_v1.0.apk -> ./badsns-android_v1.0-dex2jar.jar
dex2jar-2.0 $ll
total 6080
drwx------@ 24 masayuki_kato  staff      768  4  3 23:59 .
drwxr-xr-x   8 masayuki_kato  staff      256  4  3 23:48 ..
-rw-------   1 masayuki_kato  staff  3030526  4  3 23:59 badsns-android_v1.0-dex2jar.jar
-rwxrwxr-x@  1 masayuki_kato  staff      834 10 27  2014 d2j-baksmali.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1086 10 27  2014 d2j-baksmali.sh
-rwxrwxr-x@  1 masayuki_kato  staff      847 10 27  2014 d2j-dex-recompute-checksum.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1099 10 27  2014 d2j-dex-recompute-checksum.sh
-rwxrwxr-x@  1 masayuki_kato  staff      837 10 27  2014 d2j-dex2jar.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1089 10 27  2014 d2j-dex2jar.sh
-rwxrwxr-x@  1 masayuki_kato  staff      834 10 27  2014 d2j-dex2smali.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1086 10 27  2014 d2j-dex2smali.sh
-rwxrwxr-x@  1 masayuki_kato  staff      834 10 27  2014 d2j-jar2dex.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1086 10 27  2014 d2j-jar2dex.sh
-rwxrwxr-x@  1 masayuki_kato  staff      837 10 27  2014 d2j-jar2jasmin.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1089 10 27  2014 d2j-jar2jasmin.sh
-rwxrwxr-x@  1 masayuki_kato  staff      837 10 27  2014 d2j-jasmin2jar.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1089 10 27  2014 d2j-jasmin2jar.sh
-rwxrwxr-x@  1 masayuki_kato  staff      831 10 27  2014 d2j-smali.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1083 10 27  2014 d2j-smali.sh
-rwxrwxr-x@  1 masayuki_kato  staff      836 10 27  2014 d2j-std-apk.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1088 10 27  2014 d2j-std-apk.sh
-rwxrwxr-x@  1 masayuki_kato  staff      326 10 27  2014 d2j_invoke.bat
-rwxrwxr-x@  1 masayuki_kato  staff     1321 10 27  2014 d2j_invoke.sh
drwx--x--x@ 14 masayuki_kato  staff      448 10 27  2014 lib
dex2jar-2.0 $

コマンドを実行したディレクトリにJARファイルが生成されているのを確認できました。

JADでJARファイルをデコンパイルする

dex2jarによって生成されたJARファイルをJADというツールでデコンパイルします。

Mac PCの手順は次の通り。

  1. JADをダウンロードする
  2. ダウンロードしたファイルを展開し、ターミナルで展開したフォルダへ移動する
  3. 「unzip [JARファイルのPATH] -d test」コマンドを実行する
  4. 「./jad -r ./test/com/example/bootcampsns//.class」コマンドを実行する

JADをダウンロードする

下記URLサイトからJADをダウンロードします。

Mac OSX以外のプラットフォームも用意されているのでダウンロードするファイルに注意すること。

www.javadecompilers.com

※展開後のディレクトリ名がMacのコンソールで操作しづらい名前だったので「Jad1.5.8g」に改名しています

badsns-master $pwd
${HOME}/Practice/BadSNS/badsns-master
badsns-master $ll
total 4584
drwxr-xr-x   9 masayuki_kato  staff      288  4  4 00:11 .
drwxr-xr-x   4 masayuki_kato  staff      128  3 27 22:47 ..
-rw-r--r--   1 masayuki_kato  staff       10 12 25 15:09 .gitignore
-rw-r--r--   1 masayuki_kato  staff     1381 12 25 15:09 Dockerfile
drwx------@  5 masayuki_kato  staff      160  4  4 00:10 Jad1.5.8g
-rwxr-xr-x   1 masayuki_kato  staff      193 12 25 15:09 README.md
-rw-r--r--@  1 masayuki_kato  staff  2333301  1 10 15:13 badsns-android_v1.0.apk
drwx------@ 24 masayuki_kato  staff      768  4  3 23:59 dex2jar-2.0
drwxr-xr-x   7 masayuki_kato  staff      224 12 25 15:09 files
badsns-master $cd Jad1.5.8g/
Jad1.5.8g $ll
total 896
drwx------@ 5 masayuki_kato  staff     160  4  4 00:10 .
drwxr-xr-x  9 masayuki_kato  staff     288  4  4 00:11 ..
-rwxr-xr-x@ 1 masayuki_kato  staff    6677  5 21  2006 Readme.txt
-rwxr-xr-x@ 1 masayuki_kato  staff  435648  7  2  2006 jad
-rwxr-xr-x@ 1 masayuki_kato  staff   11376  6 18  2006 jad.1
Jad1.5.8g $;2A

unzip [JARファイルのPATH] -d test」コマンド実行

unzipコマンドを実行する。

「[JARファイルのPATH]」部分はdex2jarで作成したJARファイルを指定する。

Jad1.5.8g $unzip ../dex2jar-2.0/badsns-android_v1.0-dex2jar.jar -d test
...中略...
foApi22Impl.class
  inflating: test/android/support/v4/view/ViewCompat$ViewCompatApi26Impl.class
  inflating: test/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityNodeInfoApi23Impl.class
  inflating: test/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat$AccessibilityNodeInfoApi24Impl.class
Jad1.5.8g $ll
total 896
drwx------@ 6 masayuki_kato  staff     192  4  4 00:16 .
drwxr-xr-x  9 masayuki_kato  staff     288  4  4 00:11 ..
-rwxr-xr-x@ 1 masayuki_kato  staff    6677  5 21  2006 Readme.txt
-rwxr-xr-x@ 1 masayuki_kato  staff  435648  7  2  2006 jad
-rwxr-xr-x@ 1 masayuki_kato  staff   11376  6 18  2006 jad.1
drwxr-xr-x  8 masayuki_kato  staff     256  4  4 00:16 test

カレントディレクトリに「test」というディレクトリが作成される。

「./jad -r ./test/com/example/bootcampsns//.class」コマンド実行

jadコマンドでデコンパイルを行う。

Jad1.5.8g $./jad -r ./test/com/example/bootcampsns/*/*.class
Parsing ./test/com/example/bootcampsns/activity/BaseActivity.class... Generating com/example/bootcampsns/activity/BaseActivity.jad
...中略...
Parsing ./test/com/example/bootcampsns/util/UserSessionInfo.class... Generating com/example/bootcampsns/util/UserSessionInfo.jad
Parsing ./test/com/example/bootcampsns/util/Utils.class... Generating com/example/bootcampsns/util/Utils.jad
Jad1.5.8g $ll
total 896
drwx------@ 7 masayuki_kato  staff     224  4  4 00:20 .
drwxr-xr-x  9 masayuki_kato  staff     288  4  4 00:11 ..
-rwxr-xr-x@ 1 masayuki_kato  staff    6677  5 21  2006 Readme.txt
drwxr-xr-x  3 masayuki_kato  staff      96  4  4 00:20 com
-rwxr-xr-x@ 1 masayuki_kato  staff  435648  7  2  2006 jad
-rwxr-xr-x@ 1 masayuki_kato  staff   11376  6 18  2006 jad.1
drwxr-xr-x  8 masayuki_kato  staff     256  4  4 00:16 test

デコンパイルが成功すると「com」というディレクトリが作成される。

ディレクトリ内にはデコンパイルされたソースコードが格納されている。