工具准备
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是时间戳认证网站,如失效需另外找。