LoginSignup
4
5

More than 5 years have passed since last update.

apk から dex を取り出して dex から class を取り出して class から jad に変換するサンプルは数あれど、誰も自動化したりしないのはなんでなんだぜ?
みんな毎回手でやってるのかしら?
jar の解凍オプションすら2日で忘れる貧弱スペックの私の脳みそでは難易度が高いです。

と、いうわけで書きました。用途は自分アプリで proguard の変換結果を確認するためです、念のため。
他人の apk をリバエンするのは法律に抵触する可能性があります。
利用は自己責任でお願いします。

jar はパスが通っている前提です。
要 dex2jar, jad

apk2jad.bat
@echo off

rem 実行ディレクトリと対象ファイル
set CURRENT=%~dp0
set TARGET=%1

rem dex2jar と jar へのパス
set DEXJAR=%CURRENT%\tool\dex2jar\d2j-dex2jar.bat
set JADEXE=%CURRENT%\tool\jad\jad.exe

rem 出力ディレクトリ
set OUTPUT=%~dp1\output
set APK=%OUTPUT%\apk
set DEX=%OUTPUT%\dex
set JAD=%OUTPUT%\jad

rem 出力ディレクトリ作成
mkdir %OUTPUT%
mkdir %APK%
mkdir %DEX%
mkdir %JAD%

rem %1.apk を解凍
cd %APK%
jar xvf %TARGET%

rem classes.dex を展開
cd %DEX%
call %DEXJAR% %APK%\classes.dex

rem classes-dex2jar.jar を解凍
cd %DEX%
jar xvf %DEX%\classes-dex2jar.jar
del %DEX%\classes-dex2jar.jar

rem *.class を jad
call %JADEXE% -o -r -d%JAD% %DEX%\**\*.class
rem 関連付けとか IDE のシンタックスハイライトの関係で拡張子 java がいいならこっち
rem call %JADEXE% -o -r -sjava -d%JAD% %DEX%\**\*.class

下記のように apk2jad.bat と同一階層の tool 以下に dex2jar と jad を解凍したものを配置します。

apk2jad
├── apk2jad.bat
└── tool
    ├── dex2jar
    │   ├── d2j-jar2dex.bat
    │   └── lib
    │       └── *
    └── jad
        └── jad.exe

apk2jad.bat に *.apk をドロップすれば同一ディレクトリに output が出来上がります。

output/
├── apk
│   ├── AndroidManifest.xml
│   ├── META-INF
│   ├── assets
│   ├── classes.dex
│   ├── res
│   └── resources.arsc
├── dex
│   └── package
│       └── Hoge.class
└── jad
    └── package
        └── Hoge.jad(java)

Windows でバッチファイルなんてほとんど書かないのでなにか間違ってたらご指摘お願いします。

ノリと勢いで書いたけど、app/build/intermediates/classes 辺りに class ファイルができるから不要なんですかね?(一発でカマせるから)
でも個人的には apk から逆順に辿って proguard がどんな変換カマしたかを、ざっとでいいから見ておきたい。リリース前は特に。

4
5
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
4
5