Android反编译工具及使用

文章目录

  • 1. 工具
  • 2. 步骤
  • 3. 资源反编译
  • 4 反编译出来的APK重新打包
  • 5. 反编译工具jadx

1. 工具

Android反编译需要以下两款工具

dex2jar—— 这个工具用于将 dex 文件转换成 jar 文件
jd-gui ——这个工具用于将 jar 文件转换成 java 代码

2. 步骤

  1. 将xxx.apk解压获取classes.dex文件;
  2. 使用dex2jar工具将classes.dex文件转成java 字节码文件,命令如下:
dex2jar.sh  xxx.dex
  1. 使用 jd-gui 工具打开 classes-dex2jar.jar

如下图所示

3. 资源反编译

资源反编译主要用到apktool工具

这个工具用于最大幅度地还原 APK 文件中的 9-patch 图片、布局、字符串等等一系列的资源。

步骤如下:

  1. 将 xxx.apk拷贝到和apktool同一个目录下;
  2. 执行以下命令:
apktool.sh -d xxx.apk

如下图是apktool帮助功能打印出来的功能选项。

其中 d 是 decode 的意思,表示我们要对 xx.apk 这个文件进行解码。那除了这个基本用法之外,我们还可以再加上一些附加参数来控制 decode的更多行为:

-f 如果目标文件夹已存在,则强制删除现有文件夹(默认如果目标文件夹已存在,
则解码失败)。

-o 指定解码目标文件夹的名称(默认使用 APK 文件的名字来命名目标文件夹)。

-s 不反编译 dex 文件,也就是说 classes.dex 文件会被保留(默认会将 dex 文件解
码成 smali 文件)。

-r 不反编译资源文件,也就是说 resources.arsc 文件会被保留(默认会将resources.arsc 解码成具体的资源文件)。

4 反编译出来的APK重新打包

original 文件夹下存放的是未经反编译过、原始的 AndroidManifest.xml 文件,res 文件夹下存放的是反编译出来的所有资源,smali 文件夹下存放的是反编译出来的所有代码, AndroidManifest.xml 则是经过反编译还原后的 manifest 文件。

这里值得一提的是smali文件夹,如果你进入到这个文件夹中你会发现它的目录结构和我们源码中 src 的目录结构是几乎一样的,主要的区别就是所有的
java 文件都变成了 smali文件。

smali文件其实也是真正的源代码,只不过它的语法和 java 完全不同,它有点类似于汇编的语法,是 Android 虚拟机所使用的寄存器语言如果懂 smali 的语法的话,就可以修改其中的代码,并且重新打包,生成一个盗版的 APP,不过这个APP需要重新签名,否则不能用。

apktool.sh -b Demo -o New_Demo.apk

5. 反编译工具jadx

这是一个开源工具,可以直接将apk反编译出java源码

github地址:

https://github.com/skylot/jadx.git

具体使用请参考工程下的ReadMe.md文件

你可能感兴趣的:(Android开发工具)