APK 反编译笔记

反编译软件

首先是很多人在用的三个:

  • **apktool **,获取资源文件
  • dex2jar,获取 jar。
  • jd-gui , 查看 jar 文件源码。

这三个通常是配合使用的,下载后只要解压即可使用。
然后还有一些更为易用一些,可以一步到位的软件:

  • android-classyshark
  • jadx (推荐)
  • APK Analyzer (Android Studio 2.2 以上版本自带插件 - 推荐

我建议可以直接用上 jadx 和 APK Analyzer 这两个插件,其他的了解一下就可以了,因为很多时候反编译的帮助并没有想象的大,混淆过的代码如果不深入研究也很难看出所以然。

软件的实践

  • Apktool

首先将下载的压缩包解压,然后将需要反编译的 Apk 放到解压后的文件夹内,


APK 反编译笔记_第1张图片
F:\apktool2.2

在 cmd 转到该文件夹目录下,或者在文件夹下 shift + 右键选择在此处打开命令行窗口
输入命令:

apktool d .apk
APK 反编译笔记_第2张图片
apktool 2.2

这就生成了一个以 apk 名字命名的文件夹 base 里面就有该 apk 包含的资源文件:

APK 反编译笔记_第3张图片
base
  • dex2jar + jd-gui 查看源码

先用 dex2jar 将 apk 转换成 jar 文件。
首先,将 apk 的后缀改成 zip 或者 rar,然后用压缩软件打开:

APK 反编译笔记_第4张图片
base.zip

classes.dex 文件放到 dex2jar 根目录下。
(其实放不放都行,不放到根目录下需要在文件名前面加上路径):

APK 反编译笔记_第5张图片
F:\dex2jar-2.0

在该目录下打开 cmd 输入命令:

d2j-dex2jar classes.dex
APK 反编译笔记_第6张图片
image.png

这样就生成了文件 classes-dex2jar

然后打开 jd-gui ,将 jar 文件拖动到窗口即可:

APK 反编译笔记_第7张图片
jd-gui

这里的这个 apk 是未混淆的 debug 版本,所以文件被完整的反编译出来了,然而正式版的 apk 被混淆后,即使反编译出了 java 文件,它的可读性也是非常差的。

  • android-classyshark

GitHub 上的开源软件,使用是真的简单,双击下载下来的 jar 文件就会弹出软件的窗口,把 apk 拖到窗口就完成了上面的操作:

APK 反编译笔记_第8张图片
classyshark

但是这个反编译出来的源码很少,基本看不到相应的逻辑。所以还不是特别的好用。然后我就继续找,找到了 jadx,应该就是这一篇的 mvp 了。

  • jadx

同样是 GitHub 上的,可以在这里 直接下载 zip 文件,解压后找到\jadx-0.6.1\bin 中的 jadx-gui 文件:

APK 反编译笔记_第9张图片
jadx-0.6.1\bin

点击打开就是 jadx 的图形界面了,然后把 apk 拖到窗口:

APK 反编译笔记_第10张图片
jadx

和 dex2jar + jd-gui 反编译出来的文件对比差不多,但是易用很多。

  • APK Analyzer

现在 Android 应该绝大大大部分都是在 Android Studio 上开发了,所以自带的反编译插件也该一提。

可以在 Build -> Analyzer APK... 打开:

APK 反编译笔记_第11张图片
APK Analyzer

然后选择路径即可。
也可以直接将 apk 拖到 AS 的窗口直接打开:

APK 反编译笔记_第12张图片
Analyzer APK

可以查看资源文件,也可以查看源码,可以说也是很好用的插件,只是面对未混淆过的 apk ,反编译出来的源码可读性也不高。

后记

其实这也是最简单的反编译实践,和一开始想的不太一样。比如一开始我可能是对市面上的一些 APP 某些功能感兴趣,在不知道怎么实现的清空下希望能通过反编译查看源码来学习。

但上面说过了这并非易事,反而在查资料的时候发现反编译和查看资源文件的用处可大了,而不仅是查看源码而已。

比如为 APK 瘦身的时候,可以在 APK Analyzer 查看源码和各文件的大小、方法数和引用的库等信息。

你可能感兴趣的:(APK 反编译笔记)