APK 反编译笔记

反编译软件

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

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

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

软件的实践

  • Apktool

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


F:\apktool2.2

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

apktool d <apkName>.apk
apktool 2.2

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

base
  • dex2jar + jd-gui 查看源码

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

base.zip

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

F:\dex2jar-2.0

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

d2j-dex2jar classes.dex
image.png

这样就生成了文件 classes-dex2jar

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

jd-gui

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

  • android-classyshark

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

classyshark

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

  • jadx

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

jadx-0.6.1\bin

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

jadx

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

  • APK Analyzer

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

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

APK Analyzer

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

Analyzer APK

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

后记

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 前言 处理反编译,首先先要了解apk文件的结构,然后是编译过程,最后是反编译。反编译Apk的目的就是Apk拆成我们...
    yzzCool阅读 5,785评论 0 8
  • apk是安卓工程打包的最终形式,将apk安装到手机或者模拟器上就可以使用APP。反编译apk则是将该安卓工程的源码...
    隋胖胖LoveFat阅读 66,758评论 6 56
  • 1. 为什么要反编译? 场景一 产品经理:xxx,反编译xxx的播放器,看看他们是怎么实现的? 场景二 测试:这个...
    伤口不该结疤阅读 12,203评论 7 51
  • 使用到的工具:Apktool:用来获取图片、xml等资源文件dex2jar:把dex文件转换成jar包JD-GUI...
    good_dev阅读 849评论 0 1
  • 我会祈祷,祈祷老天保佑善良的我们穿过黑暗,永远活在温暖的阳光下。 祈祷我们不会被恶俗的小人中伤,远离那些贪劣的坏人...
    驻足现在阅读 256评论 0 0