工具准備
apktool
-
附上Mac安裝說明:
- Download Mac wrapper script (Right click, Save Link As apktool)
- Download apktool-2 (find newest here)
- Rename downloaded jar to apktool.jar
- Move both files (apktool.jar & apktool) to /usr/local/bin (root needed)
- Make sure both files are executable (chmod +x)
- Try running apktool via cli
-
問題:生成的都是smail 文件,JD-GUI能查看jar文件。
dex2jar
- Tools to work with android .dex and java .class files
- 網址
JD-GUI
- Java Decompiler
- 網址
實驗步驟
提取資源
$apktool d xxx.apk
提取jar
-
將xxx.apk改名成xxx.apk.zip,用壓縮工具解壓文件,得到classes.dex文件。
-
運行d2j-dex2jar.sh classes.dex, 得到classes-dex2jar.jar
$cd dex2jar-2.0/ $chmod u+x *.sh $cd ../xxx.apk/ $../dex2jar-2.0/d2j-dex2jar.sh classes.dex
查看java代碼
使用JD-GUI打開classes-dex2jar.jar,界面中選擇class文件即可查看java代碼。
修改代碼
注意,修改代碼及資源,最好的方式是修改apktool反編譯后的資源級smali代碼。JD-GUI查看的java代碼不適宜修改,因為修改后還需要重新轉換成smali,才能重新編譯打包會apk。
至於smali的修改,則要學習smali語言的語法了,smali是一種類似匯編語言的語言,具體語法可自行上網學習。
重新打包
這個簡單,直接使用以下命令即可。
apktool b xxx
如代碼沒問題,則能正常編譯,生成的apk在dist子目錄里。
重新簽名
以上打包的apk是無簽名的,是不能安裝運行的,需要重新簽名。
簽名第一步是生產密鑰,命令是
keytool -genkey -alias demo -keyalg RSA -validity 40000 -keystore demo.keystore
第二步就是簽名了,命令是:
jarsigner -verbose -digestalg SHA1 -sigalg MD5withRSA -tsa http://timestamp.digicert.com -keystore demo.keystore -signedjar xxx_signed.apk xxx.apk demo
其中http://timestamp.digicert.com是時間戳認證網站,如失效需另外找。
