LoginSignup
29
30

More than 5 years have passed since last update.

APKファイルから一発でソースコードとリソースファイルを抽出するシェルスクリプト

Last updated at Posted at 2015-05-21

APKファイルの中身をのぞいてみたいこともあります。
でも手順が面倒だとやる気がうせるので一発で逆コンパイルできるようにしてみました。

事前準備

必要なツールのインストール(Macならどれもbrewでインストールできます。)

  • dex2jarのインストール
  • jadのインストール
  • apktoolのインストール

必要なAPKの抽出

  • adb pullすればぶっこ抜きできます
# APKの一覧を表示
$ adb shell pm list packages -f
# APKを指定して取得
$ adb pull /data/app/xxxxx.apk

シェルスクリプトの流れ

  1. 環境チェック(必要なツールがインスト−ルされているか)
  2. カレントディレクトリのAPKファイルを取得
    • 各APKファイルに対して以下を実施
      • apktoolでリソースファイルを逆コンパイル
      • APKファイルを解凍
      • dex2jarでclasses.dexをjarに変換
      • jarファイルを解凍
      • jadでソースファイルを逆コンパイル
  3. APKファイルと同階層に逆コンパイル済みのディレクトリを配置
  4. 作業ディレクトリを削除

スクリプト

#!/bin/sh

function checkEnvironment() {
  if [[ ! `which d2j-dex2jar` ]]; then
    echo 'ERROR: COMMAND d2j-dex2jar does not exist'
    exit 1
  fi

  if [[ ! `which jad` ]]; then
    echo 'ERROR: COMMAND jad does not exist'
    exit 1
  fi

  if [[ ! `which apktool` ]]; then
    echo 'ERROR: COMMAND apktool does not exist'
    exit 1
  fi

  if [[ -e $WORK_DIR ]]; then
    echo "ERROR: WORK_DIR ${WORK_DIR} already exists"
    exit 1
  fi
}

WORK_DIR=tmp/
APK_FILES=$(find *.apk 2> /dev/null)
JAR_FILE=classes-dex2jar.jar

# 環境チェック
checkEnvironment

# カレントディレクトリのapkファイル毎に逆コンパイル
for APK_FILE in $APK_FILES
do
  echo $APK_FILE
  #OUTPUT_FOLDER=${APK_FILE:r}_output
  OUTPUT_FOLDER=$(basename ${APK_FILE} .apk)

  # リソースファイルを逆コンパイル
  apktool -s d $APK_FILE -o $OUTPUT_FOLDER

  mkdir $WORK_DIR
  # apkファイルを解凍 
  unzip -d $WORK_DIR $APK_FILE

  cd $WORK_DIR
  # dexをjarに変換 
  d2j-dex2jar classes.dex

  mkdir $WORK_DIR
  # jarを解凍
  unzip -d $WORK_DIR $JAR_FILE
  # ソースファイルを逆コンパイル
  jad -8 -d ../$OUTPUT_FOLDER/java -s .java -r $WORK_DIR/**/*.class

  cd ../
  # 作業ディレクトリ削除
  rm -rf $WORK_DIR

done

29
30
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
29
30