一発でAndroidアプリをリバースエンジニアリングする

  • 88
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

概要

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で書いてる場合に関してもノータッチです。
自己責任で活用しておくれやす。