android反编译知识整理
简介android apk 反编译有2种方式,一种是直接通过 apktool 反编译,一种是通过 dex2jar 反编译。 apktool 反编译后没有dex文件,而是smali文件;一般使用这种方式获取apk的资源文件。而通过dex2jar返回的会有dex文件;一般通过这种方式获取java代码查看业务逻辑。
apktool反编译
apktool
通过apktool将apk初步反编译
apktool下载地址apktool官网
里面有详细的安装方法,mac 的推荐使用brew。1
2brew install apktool
apktool使用
反编译出来后会得到一个类似android的原始项目目录,但是里面不是javad而是smali文件,需要jd-gui工具转换。1
2// 反编译
apktool d xxx.apkapktool其他命令
1
2// 通过 apktool 编译修改的 apk
apktool b in.apk ou.apk
apksigner
使用 apksigner 将apk重新签名打包。 apksigner 是android adktools提供的一个签名工具。使用前需要先下载android sdk。
apksigner下载地址apksigner官网
apksigner使用
1
2// 通过 apksigner 对apk签名
apksigner sign --ks whh.keystore --ks-key-alias whh --ks-pass pass:123456 app.apkapksigner 其他命令
1
2// 通过 apksigner 查看apk是否签名
apksigner verify -verbose -print-certs app.apk
keytool
如果apk签名时没有证书,可以通过jdk 自带的keytool生成证书。使用前需要先安装jdk。
keytool下载。keytool官网
keytool使用
1
2// 通过 keytool 生产证书
keytool -genkey -alias whh -keyalg RSA -keysize 2048 -validity 36500 -keystore whh.keystore
1 | // 通过 keytool 查看证书 |
dex2jar 反编译
将apk解压
- 将xxx.apk 改为xxx.zip,然后直接解压
dex2jar 反编译 dex文件
下载 dex2jar 工具,下载地址dex2jar官网
dex2jar使用
1
2// 将dex发编译成jar文件
d2j-dex2jar.sh xxx.dex一般我们解压的.zip文件会有多个dex文件,需要一个一个的解压。便捷的方式是合成一个dex,然后通过dex2jar反编译。
方式就是指直接通过d2j-dex2jar.sh 反编译xxx.apk1
2// 通过 d2j-dex2jar.sh 反编译 apk,得到 xxx-dex2jar.jar
d2j-dex2jar.sh xxx.apk
jd-gui 反编译成 java文件
下载jd-gui,下载地址jd-gui官网
jd-gui使用
直接通过 jd-gui 打开 xxx.jar 文件,然后 选择save all sources 将java 文件保存。jd-gui运行错误处理
- 如果打开的时候报错“ERROR launching ‘JD-GUI’, No suitable Java version found on your system!This program requires Java 1.8+, Make sure you install the required Java version.”。可以进入JD-GUI.app/Contents/Info.plist文件将1.8+ 改为1.8。