文字总数:3234字17张图片
预计阅读时间:9 分钟
一、简介
今天给大家介绍一款非常好用的Android反编译工具jadx。 jadx的功能非常强大。 对于我来说,基本满足了我日常的反编译需求。
jadx的优点:
图形界面。
拖放操作。
反编译并输出Java代码。
导出 Gradle 项目。
这些优点使jadx成为我反编译的首选。 它可以处理大部分的反编译需求,基本上是我反编译工具的首选。
接下来我们看看jadx的使用方法。
2.使用jadx2.1安装jadx
jadx本身是一个开源项目,源码已经在Github上开源。
贾德克斯Github:
如果有兴趣,可以直接clone源码并在本地编译。 但大多数情况下,我们需要一个编译版本。 编译后的版本可以从sourceforge下载。
sourceforge 下载 jadx。
直接下载最新版本即可。 现在最新版本是jadx-0.6.1。 下载并解压后,你会得到这样的目录结构:
对于 Mac 或 Linux,请使用 jadx-gui。 Windows下,需要使用jadx-gui.bat。 双击即可直接运行。 如果有安全警告,请忽略它。 (以下文章主要以Mac环境进行说明,Windows下大部分操作类似)
2.2 使用jadx
前面提到过,双击 jadx-gui 就可以直接运行它。 运行后会启动一个终端,在这里你可以看到你所有操作的输出,错误日志也会在这里输出。
打开后,您可以选择 apk、dex、jar、zip、class 或 aar 文件。 可以看到jadx支持的格式非常多。 基本上,它被编译成Java虚拟机可以识别的字节码,并且可以用于所有这些。 反编译。 除了选择文件之外,还可以直接将apk文件拖拽进去,非常实用。
手上随机找了一个Apk扔进去看看反编译效果。
这是反编译的代码。 对于apk来说,一些xml资源也被反编译恢复,非常方便。
3、jadx的优点
jadx使用起来非常方便,而且提供的gui程序也非常好用。 我们首先介绍一下jadx-gui程序的一些有用的技术。
3.1 强大的搜索功能
jadx提供的搜索功能非常强大,而且搜索速度也不慢。
您可以单击“导航”->“文本搜索”或“导航”->“类搜索”来激活它。 更方便的是快捷键。 我的本地快捷键是control + shift + f。 这因人而异。
Jadx的搜索支持四个维度,Class、Method、Field、Code。 我们可以根据我们搜索到的内容进行检查。 最大的范围是Code,它基本上是文本匹配搜索。 这里反编译出来的Apk集成了支付宝支付,所以可以搜索到支付宝内容。
3.2 直接搜索引用代码
有时我找到关键代码并想看看它在哪里被调用或引用。
jadx 也提供这方面的支持。 找到我们需要查看的类或方法,右键单击它并选择“查找用法”。
之后,它将帮助您搜索该项目中引用它的位置。
点击就可以直接跳转到,非常方便。
3.3 反混淆
一般Apk在发布之前都会混乱,这基本上是国内app的标准。 这样的类最终会被混淆为abc,方法也会变成abca(),这其实对我们的阅读是非常不利的。 我们很难看到 a.java 文件并确定它是哪一个。 我们还需要根据包名来区分。
反混淆函数可以给它们起一个特殊的名称,使其在本项目中具有唯一的名称,方便我们识别和查找。
可以在“工具”->“反混淆”中激活此功能。
接下来我们看看它是如何工作的。
开启去混淆后的效果如下:
如您所见,a 变为 p003a。 不知道大家觉得这样看是否更方便呢?
3.4 一键导出Gradle项目
虽然,jadx-gui可以直接读取代码,但是还是很方便的。 但毕竟不如我们常见的编辑器方便。 而恰巧 jadx 也支持将反编译的项目直接导出到 Gradle 编译的项目中。
可以通过文件 -> 另存为 gradle 项目来激活此功能。
最终的输出目录可以直接通过Android Studio打开。
然而,虽然AS可以直接打开它,但大多数情况下你无法编译它。 但这样的功能主要是利用AS强大的IDE功能,比如方法跳转、引用搜索等,让我们阅读起来更加方便。
4. jadx的错误处理
jadx在使用过程中也会出现一些错误。 以下是一些常见错误的总结。
4.1 代码不一致
有时,有些代码未完全反编译,您会看到带有 JADX 警告:不一致代码标志的错误。
这段代码已经不再是Java代码了,不利于我们阅读。 为了处理这种情况,jadx可以尝试打开Show不一致代码开关。 您可以在“文件”->“首选项”中找到它。
开启不一致代码后,我们再看一下这段代码,会感觉很熟悉。
这样处理的代码大部分都是伪代码,可能会出现错误。 下面我们就具体问题具体分析一下。
首选项中有很多开关。 如果您有兴趣,可以自行探索。
4.2 反编译错误或滞后
jadx反编译一些小Apks毫无压力。 但对于一些较重的Apk,一般是大于50MB的Apk,使用jadx反编译时可能会遇到卡顿的问题。
如果你查看终端中的Log输出,应该能够发现其实是OOM导致的。
针对内存不足引起的问题,官方也提供了一些解决方案。
1.减少处理线程数。
为了加快编译效率,jadx使用了多线程,多个线程会消耗更多的内存。 因此,减少反编译时的线程数是一个有效的方法。
如果使用命令行,可以使用-j 1参数将线程数配置为1。如果不配置,则默认线程数为4。
如果您使用 jadx-gui,您可以通过在 Preferences 中配置处理线程计数来配置线程数。
2.修改jadx脚本
直接编辑./bin目录下的jadx脚本,在配置中找到DEFAULT_JVM_OPTS,设置为DEFAULT_JVM_OPTS="-Xmx2500M"即可配置当前使用的内存大小。
如果是Windows系统,则需要编辑jadx.bat文件。
3.使用命令行命令
如果以上方法都不起作用,并且没有更好的办法,可以直接使用命令行,通过jadx命令进行编译。 并将线程数配置为1。虽然速度较慢,但大多数情况下都可以正常输出反编译代码。
例如:
jadx -d 输出 -j 1 类.dex
要更改命令,可以通过 jadx -h 命令查看。
仔细看看jadx命令配置的参数。 基本上你可以在Preferences中找到对应的配置项。 相互对比了解一下,应该不难发现如何使用。
5. 总结
jadx确实非常好用。 到这里它的使用基本上已经解释清楚了,还有一些小技巧。 自己尝试一下吧。
您在反编译过程中使用jadx有遇到什么问题吗? 如果大家有更好的工具推荐,可以在留言区给我留言apk反编译软件,我们一起讨论。
今天apk反编译软件,我在城厢墨影公众号后台回复了“成长”。 我会把我整理的一些学习资料发给大家,包括:Android反编译、算法、设计模式、虚拟机、Linux、Web项目源码。