概要
Androidアプリをコマンドラインで一発でリバースエンジニアリングする。これによって自分のアプリがどれだけ難読化されているかを手軽に確認できる。
難読化についてはProguardを利用すれば良い。
Proguardについては過去に記事を書きました。結構ハマりどころが多い気がしたので良かったら参考にしてください。
http://qiita.com/GeneralD/items/f12889c4ac9ddc22e41f
準備
jadとdex2jarを入れる。
Macユーザーはbrewで両方手に入る。
brew tap homebrew/binary
brew install jad
brew install dex2jar
スクリプト
お好みでスクリプトファイルにするなりシェル設定ファイルに関数として書くなりする。下記はzshell関数として書いた例。
# Decompile Java classes recursively keeping hierarchy
jadr() {
jad -8 -s java -d $2 -r $1/**/*.class
}
# Decompile Android application
deapk() {
local dst=${${1##*/}%%.*}
dst+='.depackaged'
unzip $1 -d $dst
dex2jar ${dst}/classes.dex
unzip ${dst}/classes_dex2jar.jar -d ${dst}/Classes
jadr ${dst} ${dst}/src
}
使用方法
上の例をshellの設定ファイルに関数として定義した場合
deapk アプリケーションファイル名.apk
で実行すると
作業ディレクトリに、アプリケーションファイル名.depackagedというディレクトリ名で出力します。
#もっと面倒臭がる
もっと面倒臭がるなら
alias -s apk=deapk
とかしておくといいのではないでしょうか。
注意事項
JNI使っているアプリの場合ネイティブ部分のリバースエンジニアリングに関しては今回はノータッチです。
Scalaで書いてる場合に関してもノータッチです。
自己責任で活用しておくれやす。