简介android apk 反编译有2种方式,一种是直接通过 apktool 反编译,一种是通过 dex2jar 反编译。 apktool 反编译后没有dex文件,而是smali文件;一般使用这种方式获取apk的资源文件。而通过dex2jar返回的会有dex文件;一般通过这种方式获取java代码查看业务逻辑。

apktool反编译

apktool

通过apktool将apk初步反编译

  1. apktool下载地址apktool官网
    里面有详细的安装方法,mac 的推荐使用brew。

    1
    2
    brew install apktool

  2. apktool使用
    反编译出来后会得到一个类似android的原始项目目录,但是里面不是javad而是smali文件,需要jd-gui工具转换。

    1
    2
    // 反编译
    apktool d xxx.apk
  3. apktool其他命令

    1
    2
    // 通过 apktool 编译修改的 apk
    apktool b in.apk ou.apk

apksigner

使用 apksigner 将apk重新签名打包。 apksigner 是android adktools提供的一个签名工具。使用前需要先下载android sdk。

  1. apksigner下载地址apksigner官网

  2. apksigner使用

    1
    2
    // 通过 apksigner 对apk签名
    apksigner sign --ks whh.keystore --ks-key-alias whh --ks-pass pass:123456 app.apk
  3. apksigner 其他命令

    1
    2
    // 通过 apksigner 查看apk是否签名
    apksigner verify -verbose -print-certs app.apk

keytool

如果apk签名时没有证书,可以通过jdk 自带的keytool生成证书。使用前需要先安装jdk。

  1. keytool下载。keytool官网

  2. keytool使用

    1
    2
    // 通过 keytool 生产证书
    keytool -genkey -alias whh -keyalg RSA -keysize 2048 -validity 36500 -keystore whh.keystore
1
2
// 通过 keytool 查看证书
keytool -list -keystore whh.keystore -storepass 123456

dex2jar 反编译

将apk解压

  1. 将xxx.apk 改为xxx.zip,然后直接解压

dex2jar 反编译 dex文件

  1. 下载 dex2jar 工具,下载地址dex2jar官网

  2. dex2jar使用

    1
    2
    // 将dex发编译成jar文件
    d2j-dex2jar.sh xxx.dex
  3. 一般我们解压的.zip文件会有多个dex文件,需要一个一个的解压。便捷的方式是合成一个dex,然后通过dex2jar反编译。
    方式就是指直接通过d2j-dex2jar.sh 反编译xxx.apk

    1
    2
    // 通过 d2j-dex2jar.sh 反编译 apk,得到 xxx-dex2jar.jar
    d2j-dex2jar.sh xxx.apk

jd-gui 反编译成 java文件

  1. 下载jd-gui,下载地址jd-gui官网

  2. jd-gui使用
    直接通过 jd-gui 打开 xxx.jar 文件,然后 选择save all sources 将java 文件保存。

  3. 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。