apk から dex を取り出して dex から class を取り出して class から jad に変換するサンプルは数あれど、誰も自動化したりしないのはなんでなんだぜ?
みんな毎回手でやってるのかしら?
jar の解凍オプションすら2日で忘れる貧弱スペックの私の脳みそでは難易度が高いです。
と、いうわけで書きました。用途は自分アプリで proguard の変換結果を確認するためです、念のため。
他人の apk をリバエンするのは法律に抵触する可能性があります。
利用は自己責任でお願いします。
jar はパスが通っている前提です。
要 dex2jar, jad
@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 がどんな変換カマしたかを、ざっとでいいから見ておきたい。リリース前は特に。