一、反编译 APK 的主要步骤

  1. 解压 APK 文件

    • APK 本质上是一个 zip 压缩包,可以直接用 unzip 或者 7zip 打开。
    • 里面主要包含:
      • classes.dex:Dalvik/ART 字节码
      • AndroidManifest.xml:清单文件
      • res/:资源文件(布局、图片等)
      • META-INF/:签名信息
  2. 资源文件反编译

    • 工具:apktool

    • 命令示例:

      1
      apktool d app.apk -o app_decoded
    • 可以得到可读的 AndroidManifest.xmlres/values/strings.xml 等文件。

  3. 字节码转 Java 代码

    • classes.dex 转为 Java 源码:

      • 先用 dex2jar 转成 jar:

        1
        d2j-dex2jar.sh classes.dex -o classes.jar
      • 再用 JD-GUI / JADX 打开 jar,得到 Java 反编译代码。

    • 更简便的工具:

      • JADX:直接打开 APK,一键浏览 Java 源码和资源。
  4. Smali 代码查看

    • 如果需要精确分析,可以用 baksmalidex 文件转为 smali 汇编。
    • smali 更接近虚拟机字节码,适合研究底层逻辑或混淆后的代码。

二、常用工具

  • Apktool:资源文件反编译/回编译
  • dex2jar:DEX → JAR
  • JD-GUI / JADX:Java 代码反编译器
  • Baksmali/Smali:DEX ↔ smali 汇编
  • Android Studio + JADX 插件:方便调试

三、常见用途

  1. 学习他人 App 的实现思路
    • 例如查看某些 UI 布局、网络请求逻辑。
  2. 安全分析
    • 检查是否存在明文存储密码、未加密的 API Key。
  3. 二次开发 / 汉化
    • 修改资源文件,重新打包签名。

四、注意事项

  • 反编译仅用于 学习和安全研究
  • 大部分商业 App 都会用 混淆 / 加壳 技术,反编译代码可能会非常难读。