- 对本书的赞誉
- 前言
- 基础篇
- 第 1 章 Android 中锁屏密码加密算法分析
- 第 2 章 Android 中 NDK 开发
- 第 3 章 Android 中开发与逆向常用命令总结
- 第 4 章 so 文件格式解析
- 第 5 章 AndroidManifest.xml 文件格式解析
- 第 6 章 resource.arsc 文件格式解析
- 第 7 章 dex 文件格式解析
- 防护篇
- 第 8 章 Android 应用安全防护的基本策略
- 第 9 章 Android 中常用权限分析
- 第 10 章 Android 中的 run-as 命令
- 第 11 章 Android 中的 allowBackup 属性
- 第 12 章 Android 中的签名机制
- 第 13 章 Android 应用加固原理
- 第 14 章 Android 中的 so 加固原理
- 工具篇
- 第 15 章 Android 逆向分析基础
- 第 16 章 反编译神器 apktool 和 Jadx
- 第 17 章 Hook 神器 Xposed
- 第 18 章 脱壳神器 ZjDroid
- 第 19 章 Native 层 Hook 神器 Cydia Substrate
- 操作篇
- 第 20 章 静态方式逆向应用
- 第 21 章 动态调试 smali 源码
- 第 22 章 IDA 工具调试 so 源码
- 第 23 章 逆向加固应用
- 第 24 章 逆向应用经典案例分析
- 第 25 章 Android 中常见漏洞分析
- 第 26 章 文件加密病毒 Wannacry 样本分析
16.6 Jadx 源码分析
下面介绍反编译的另外一个神器 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论