一. 常见工具
-
apk-tool
获取资源文件,主要是提取图片文件、布局文件等; 可以把反编译后的资源文件重新打包成二进制的apk/jar文件
# 提取apk中的资源文件 apktool d wechat.apk # 将反编译后的资源文件重新打包成apk或jar apktool b wechat -
jd-gui
查看把apk中classes.dex转化的jar文件中的源码,实际就是将jar文件里的.class文件转成.java文件,github.com/java-decomp…
-
dex2jar
将apk反编译成java源码(classes.dex转化成jar文件),github.com/pxb1988/dex…
-
jadx
用于从Android Dex和Apk文件生成Java源代码的命令行和GUI工具, github.com/skylot/jadx
- 从APK,dex,aar,aab和zip文件将Dalvik字节码反编译为Java类
- 从resources.arsc解码AndroidManifest.xml和其他资源
- 还原一些简单的混淆
Dalvik字节码
Dalvik是google专门为Android操作系统设计的一个虚拟机,经过深度的优化。虽然Android上的程序是使用java来开发的,但是Dalvik和标准的java虚拟机JVM还是两回事。Dalvik VM是基于寄存器的,而JVM是基于栈的;Dalvik有专属的文件执行格式dex(dalvik executable),而JVM则执行的是java字节码。Dalvik VM比JVM速度更快,占用空间更少。
- FDex2脱壳工具
大部分apk都用了第三方的加壳保护,在原有dex文件基础上,放上了一个壳文件,这个会先于本身文件运行,防止逆向、动态调试等,所以遇到这种,就需要进行脱壳,找到真正需要的dex;
二. 使用说明
-
apktool
apktool主要是提取资源文件及把反编译后的资源文件重新打包
-
dex2jar和jd-gui
一般使用jd-gui、dex2jar对apk反编译,一般的步骤为
a. 把目标apk文件转为.rar后缀的文件,比如 wechat.apk 转为 wechat.rar
b. 解压.rar文件,在解压后的目录里有两个文件,classes.dex,这是接下来反编译要用到的
c. cd到dex2jar 目录下,把上面的dex文件copy进来,然后执行
d2j-dex2jar.bat(d2j-dex2jar.sh) classes.dexd. 执行完后会在同目录下生成两个jar文件
classes-dex2jar.jar,接下来就是要查看这两个jar里的源码了,用jd-gui来浏览e. 打开jd-gui,然后把生成的jar文件拖到里边,会生成源码树,当然,源码基本都是混淆过的,方法名和类名比较反人类,要仔细看了
-
jadx 这个相当于上面的apktool(查看资源文件)+dex2jar+jd-gui,使用比较简单,安装后可以直接打开apk文件查看源码
【参考】
- wossoneri.github.io/2019/09/12/…][Security]Decompile-smali/
- crifan.github.io/android_app…
- blog.csdn.net/qq_39551311…