返回介绍

16.6 Jadx 源码分析

发布于 2024-10-10 22:32:20 字数 1701 浏览 0 评论 0 收藏 0

下面介绍反编译的另外一个神器 Jadx,这个工具也是开源的,可以直接去 GitHub 上搜索: https://github.com/skylot/jadx 。这个工具其实和 apktool 反编译的功能差不多,但是有一个特色,就是可视化功能,能够高效地分析 apk 的结构。下面来看一个例子,如图 16-14 所示。

图 16-14 Jadx 工具效果图

可以看到结构很清晰,分析起来会比较方便,感觉它是集成了 apktool+jd-gui 的功能,但是和 apktool 相比的话,它还是有点缺陷的。首先反编译会比较耗时,其次它不能修改代码,进行回编译,这里为什么分析它呢?因为它是开源的,又借助了 asm 工具来生成 class 文件,实现 Java 代码的可视化。下面就来说说 asm 这个工具类的用途。这里写了一个 demo 来看看效果:

运行结果如图 16-15 所示。

图 16-15 asm 案例运行结果

这里没有打印“Hello world!的代码”,但是结果却打印了,这就是 asm 功能,即能够手动构造一个 class 文件,如图 16-16 所示。

图 16-16 asm 运行产生的 class 文件

大家是否联想到了动态代理模式,会产生一个动态代理类,而且还会生成一个 Proxy.class 文件?JavaWeb 的 Spring 框架中 Cglib 也是采用这个功能来实现 AOP 编程的,它可以通过输入一个字符串来定义类,给这个类添加方法、字段等信息,然后生成类的字节码数组。可以保存成 class 文件,同时也可以使用 ClassLoader 来加载字节码数据,然后再反射调用指定的方法。Jadx 的可视化功能就是借助这个功能,同时著名的 dex2jar 工具也是这样的,可以去 dex2jar 工具的 lib 目录看看,如图 16-17 所示。

图 16-17 asm 工具包

Jadx 的反编译步骤是这样的:解析 dex 文件→smali 源码→解析 smali 指令→借助 asm 生成 class 文件→解析 class 文件得到 Java 源码。

提示:Apktool+Jadx 源码下载地址为 http://pan.baidu.com/s/1cHU30M

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文