画竜点睛を衝く@mapyo

日々やった事をつらつらと書くブログです

アプリでどこまで難読化されてるか確認する

自分が作ったアプリを難読化した時に、どんな感じで難読化されるのか?というのを確認しないとちゃんと難読化出来てるのかわからないのでやってみる。

ぽちぽちコマンドもろもろ打って確認して。。というのをやるのめんどそうだなぁと思ったら、 コマンド一つでいい感じにやってるqiitaを見つけた。

qiita.com

brew周りとか違ってたり、コマンド周りとか改善ポイントがあったのでちょっと手順をまとめてみる

brewでインストール

dex2jar(名前の通りdexファイルからjarファイルを生成する)とjad(Javaにでコンパイルする)が必要なのでbrewで入れる

brew install dex2jar
brew cask install Caskroom/cask/jad

※ちょっとガチャガチャやりながら入れたので、他にもbrew周りで必要かもしれない

スクリプト作る

.zshrcとかに以下のように追加する。bashは普段使ってないのでわかりません。。。

# 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.`date +"%Y%m%d%H%M"`"
  unzip $1 -d $dst
  d2j-dex2jar -o ${dst}/classes-dex2jar.jar ${dst}/classes.dex
  mkdir -p ${dst}/classes
  unzip ${dst}/classes-dex2jar.jar -d ${dst}/classes
  jadr ${dst} ${dst}/src
}

以下のコマンドで実行できるようになる

deapk app-release.apk

これを実行すると

app-release.depackaged.201704022234

このフォルダが出来て、srcフォルダ配下にjavaデコンパイルされたコードが入ってる。 普段kotlinで書いてるのでkotlinバージョンとかあるのかなぁ。

参考元のqiitaとの変更点は以下の2つ

  • コマンド実行する度にフォルダの最後に日付が入るようにした
  • brewから入れた場合にコマンドがdex2jard2j-dex2jarになってたので修正

Gson周りで難読化するとどうなるか調べてみたかったのでこれでやりやすい感じになった。 そんな今日この頃。