jadx 反编译apk

作者: tcsp | 来源:发表于2016-05-05 00:46 被阅读2350次

    引子

    承接我的上一篇文章Android ClassyShark vs ApkTool,感谢读者@weishu的提醒,jadx是我遗漏的一个非常好用的android反编译gui工具。下面就来介绍下jadx工具。

    首先给出jadx的github地址

    使用方式

    其实github上已经给出了很详细的使用说明。但是作者这里形式性地解读下吧(- -|)。

    1.安装

    依次运行以下命令:

    git clone https://github.com/skylot/jadx.git
    cd jadx
    ./gradlew dist
    

    主要是拉下来jadx的git主工程,然后跑对应的gradle task。之后会生成运行脚本,大概就是多出了这个目录

    jadx脚本目录

    1.运行

    cd build/jadx/
    bin/jadx -d out lib/jadx-core-*.jar
    #or
    bin/jadx-gui lib/jadx-core-*.jar
    

    以上命令是git给出的运行示例,主要就是反编译jadx源码的一个jar包。

    由于之前文章对比classyShark 和apktool时用的是淘宝apk,那么这里继续用淘宝apk,便于三者的横向比较。

    bin/jadx-gui taobao.apk
    

    当然如果你不喜欢使用命令行外加找文件路径,你可以直接双击下图脚本文件即可


    jadx-gui脚本文件

    会弹出以下界面,对应选中你想反编译的.dex, .apk, .jar or .class即可(可以看到支持的格式还是很丰富的,赞)。

    选中taobao.apk

    选中淘宝apk,并且反编译完成后,结果如下:

    反编译taobao.apk结果

    可以看到结果中即反编译了资源文件和源码,这个效果对比,apktool+dex2jar+jd-gui这三个工具集来说操作简便了太多。

    结果横向对比(classyshark,apktool+dex2jar+jd-gui)

    主要就是来对比下反编译后源码的可读性。同样选用com.taobao.allspark包下的AllsparkLoader来进行对比,用jadx反编译后的结果为:

    AllsparkLoader反编译结果

    我们可以看到可读性非常高,要是去掉混淆的影响,已经很接近源码了!!!(细心的读者可以发现该gui还包含了一部分编译器的功能,很实用)

    另外几个很赞的功能介绍

    1.支持全局class查询

    全局class查询

    2.支持全局text查询

    全局text查询

    3.支持导出gradle工程(你可以用as直接看反编译的工程了)

    导出gradle工程

    那么我们最终看看在as中打开导出工程后的结果:

    as中打开导出工程

    很赞对不对

    总结

    看了以上之后,我们就来说下jadx对比classyshark和(apktool+dex2jar+jd-gui工具集)的优劣势吧。

    优点:
    1.操作方便快捷,一步到位
    2.有较为完善的gui界面,带有较多实用功能
    3.反编译代码可读性高

    缺点:
    1.没有classyshark类似的方法总数统计以及图形化分布界面
    2.对比apktool直接反编译出来的资源文件有相应的缺失(这个有心的童鞋可以自己尝试下,这里就不给截图了)

    总体来说jadx还是你反编译工具的最佳选择,当然有些时候可能还是需要你去配合使用,毕竟现在看来三者还是各有优劣的。

    相关文章

      网友评论

      • taketake:jadx有个问题就是,jar包太大,无法查看。不知道你们有这个问题吗?
      • liangqibin:支持作者原创文章

      本文标题:jadx 反编译apk

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