探索Android APK反编译

4 阅读1分钟

什么是APK反编译?

想象一下:你拿到一个封装好的礼物盒(APK文件),里面藏着开发者精心编写的代码和资源。反编译就是拆开这个盒子,查看里面的内容(代码、图片、配置文件等)。

反编译工具三件套

  1. Apktool

  2. dex2jar

  3. JD-GUI

反编译四步流程(以demo.apk为例)

步骤1:用Apktool解包资源
# 命令示例(需提前安装Java环境)
apktool d demo.apk -o demo_folder
  • 得到什么

    • res/:图片、布局文件(XML)
    • AndroidManifest.xml:应用权限、入口页面配置
    • smali/:底层字节码(类似汇编,可修改后重打包)
步骤2:提取代码(dex → jar)
  1. 解压APK(可直接用压缩软件),取出classes.dex文件

  2. dex2jar转换:

    d2j-dex2jar.sh classes.dex  # 生成 classes-dex2jar.jar
    
步骤3:用JD-GUI查看Java代码
  • 打开JD-GUI,拖入classes-dex2jar.jar

  • 你能看到

    • 近似原始的Java代码(但变量名可能是ab这类无意义字符)
    • 核心逻辑(如登录验证、网络请求)
步骤4:进阶操作——修改并重打包
# 修改smali或资源后,重新打包
apktool b demo_folder -o modified.apk

# 对新APK签名(否则无法安装)
keytool -genkey -v -keystore mykey.keystore -alias mykey
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore mykey.keystore modified.apk mykey

总结

反编译APK = 拆解 + 转换 + 阅读,核心工具是Apktool + dex2jar + JD-GUI