什么是APK反编译?
想象一下:你拿到一个封装好的礼物盒(APK文件),里面藏着开发者精心编写的代码和资源。反编译就是拆开这个盒子,查看里面的内容(代码、图片、配置文件等)。
反编译工具三件套
-
Apktool
- 作用:拆解APK的资源文件(图片、布局、文本等)。
- 官网:ibotpeaches.github.io/Apktool/
-
dex2jar
- 作用:将APK中的代码文件(
.dex
)转换成Java可读的格式(.jar
)。 - 官网:github.com/pxb1988/dex…
- 作用:将APK中的代码文件(
-
JD-GUI
- 作用:可视化查看
.jar
文件中的Java代码(像看书一样浏览代码)。 - 官网:java-decompiler.github.io/
- 作用:可视化查看
反编译四步流程(以demo.apk
为例)
步骤1:用Apktool解包资源
# 命令示例(需提前安装Java环境)
apktool d demo.apk -o demo_folder
-
得到什么?
res/
:图片、布局文件(XML)AndroidManifest.xml
:应用权限、入口页面配置smali/
:底层字节码(类似汇编,可修改后重打包)
步骤2:提取代码(dex → jar)
-
解压APK(可直接用压缩软件),取出
classes.dex
文件 -
用
dex2jar
转换:d2j-dex2jar.sh classes.dex # 生成 classes-dex2jar.jar
步骤3:用JD-GUI查看Java代码
-
打开JD-GUI,拖入
classes-dex2jar.jar
-
你能看到:
- 近似原始的Java代码(但变量名可能是
a
、b
这类无意义字符) - 核心逻辑(如登录验证、网络请求)
- 近似原始的Java代码(但变量名可能是
步骤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