APK 反编译笔记

作者: chauI | 来源:发表于2017-06-03 21:55 被阅读434次

    反编译软件

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

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

    我建议可以直接用上 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 反编译笔记

        本文链接:https://www.haomeiwen.com/subject/tatefxtx.html