Android 反编译利器,jadx 的高级技巧

article/2025/10/14 22:26:13

一、前言

今天介绍一个非常好用的反编译的工具 jadx(Java,Dex反编译器) 。jadx 的功能非常的强大,对我而言,基本上满足日常反编译需求。

jadx 优点:

  1. 图形化的界面。
  2. 拖拽式的操作。
  3. 反编译输出 Java 代码。
  4. 导出 Gradle 工程。

这些优点都让 jadx 成为我反编译的第一选择,它可以处理大部分反编译的需求,基本上是我反编译工具的首选。

接下来我们就来看看,jadx 如何使用吧。

二、使用 jadx

2.1 安装 jadx

jadx 本身就是一个开源项目,源代码已经在 Github 上开源了。

Jadx Github :

https://github.com/skylot/jadx

有兴趣可以直接 clone 源代码,然后本地自己编译。但是多数情况下,我们是需要一个编译好的版本。编译好的版本,可以在 sourceforge 上下载到。

sourceforge 下载 jadx。

https://sourceforge.net/projects/jadx/files/

直接下载最新版就可以了,现在的最新版是 jadx-0.6.1 。下载好解压之后,你会获得这样的目录结构:

jadx-path

对于 Mac 或者 Linux,使用 jadx-gui ,Windows 下就需要使用 jadx-gui.bat 了,双击可以直接运行,如果有安全警告,忽略它就可以了。(后文主要以 Mac 环境为讲解,Windows 下的大部分操作都是类似的)

2.2 使用 jadx

前面提到,直接双击 jadx-gui 就可以直接运行。运行之后,会启动一个 terminal ,在这里你可以看到你所有操作的输出,错误日志也会输出在这里。

打开之后,你可以选择一个 apk(AndroidPackage)、dex、jar、zip、class、aar(Android Archive) 文件,可以看到 jadx 支持的格式还是挺多的,基本上编译成 Java 虚拟机能识别的字节码,它都可以进行反编译。除了选择一个文件,还可以直接将 apk 文件,拖拽进去,这一点非常好用。

我随便找了一个手边的 Apk ,丢进去,看看反编译后的效果。

jadx-run

这里面就是反编译后的代码了,对于 apk 而言,一些 xml 的资源,也一并被反编译还原回来了,非常的方便。

三、jadx 的优点

jadx 使用起来非常的方便,而提供的 gui 程序,也很好用。下面开始介绍 jadx-gui 程序的一些好用的技巧。

3.1 强大的搜索功能

jadx 提供的搜索功能,非常强大,而且搜索速度也不慢。

你可以点击 Navigation -> Text Search 或者 Navigation -> Class Search 激活它,更方便的还是快捷键,我本机的快捷键是 control + shift + f,这个就因人而异了。

text-search

jadx 的搜索,支持四种维度,Class、Method、Field、Code,我们可以根据我们搜索的内容进行勾选,范围最大的就是 Code ,基本上就是文本匹配搜索。这里反编译的 Apk 集成了支付宝支付,所以能搜到 alipay 的内容。

3.2 直接搜索到引用的代码

有时候找到关键代码了,还想看看在哪些地方调用或者引用了它。

jadx 也提供了这方面的支持,找到我们需要查看的类或者方法,选中点击右键,选择 Find Usage。

find-Usage

之后,它就会帮你搜索出,在这个项目中,哪些地方引用了它。

usage-search

点击就可以直接跳转过去,非常的方便。

3.3 deobfuscation

一般 Apk 在发布出去之前,都是会被混淆的,这基本上国内 App 的标配。这样一个类,最终会被混淆成 a.b.c ,方法也会变成 a.b.c.a() ,这样其实非常不利于我们阅读。我们很难看到一个 a.java 的文件,就确定它是哪一个,还需要根据包名来区分。

而 deobfusation 功能,可以为它们其一个特殊的名字,这样它在这个项目中,名字就唯一了,方便我们识别和搜索。

这个功能可以在 Tools -> deobfusation 中激活。

接下来来看看它的效果。

deo-before

开启 deobfusation 之后的效果如下:

deo-after

可以看到,a 变成了 p003a。不知道这样看你觉得有方便一些吗?

3.4 一键导出 Gradle 工程

虽然,jadx-gui 可以直接阅读代码,还是很方便的。但是毕竟没有我们常见的编辑器来的方便。而正好 jadx 还支持将反编译后的项目,直接导出成一个 Gradle 编译的工程。

可以通过 File -> Save as gradle project 来激活这个功能。

save-gradle

最终输出的目录,是可以直接通过 Android Studio 打开的。

gradle-project

不过虽然 AS 可以直接打开它,但是大多数情况下你是编译不起来的。但是这样的功能,主要是为了借助 AS 强大的 IDE 功能,例如方法跳转、引用搜索等等,让我们阅读起来更方便。

四、jadx 的错误处理

jadx 在使用过程中,也会有一些错误情况,这里总结一些比较常见的错误。

4.1 inconsistent code

有时候有代码,反编译的不完整,你会看到 JADX WARNING : inconsistent code 标志的错误。

incon-before

这一段代码,就已经不是 Java 的代码了,不利于我们的阅读。而 jadx 为了应对这样的情况,可以尝试开启 Show inconsistent code 开关。你可以在 File -> Preferences 中找到它。

show-pre

开启 inconsistent code 之后,我们再来看看这段代码,就感觉亲切了。

code2

这样处理的代码,大部分为伪代码,可能会有错误的地方,具体问题具体分析吧。

Preferences 中,还有很多开关,有兴趣的可以自行摸索一下。

4.2 反编译错误或者卡顿

jadx 反编译一些小的 Apk,一点压力都没有,但是对于一些比较重的 Apk,一般 Apk 大于 50MB 的,你都可能遇到使用 jadx 反编译的时候卡死的问题。

如果你看了 terminal 中 Log 输出,你应该可以发现,实际上它是因为 OOM 引起的。

oom

官方对于这样因为内存不足引发的问题,也提供了一些解决方案。

1、减少处理的线程数。

jadx 为了加快编译的效率,所以是使用多线程处理的,而多个线程会耗费跟多的内存。所以减小反编译时候的线程数,是一个有效的方法。

如果使用命令行的话,可以使用 -j 1 参数,配置线程数为 1,不配置的话,默认线程数为 4。

而使用 jadx-gui 的话,可以在 Preferences 中,通过配置 Processing threads count 来配置线程数。

2、修改 jadx 脚本

直接编辑 ./bin 目录下的 jadx 脚本,配置找到 DEFAULT_JVM_OPTS ,将它设置为 DEFAULT_JVM_OPTS="-Xmx2500M" ,就可以配置当前使用的内存大小。

如果是 Windows 系统,你需要编辑 jadx.bat 文件。

3、使用命令行命令

如果以上方式都不好用,在没有更好的办法的情况下,你可以直接使用命令行,通过 jadx 的命令进行放编译。并将线程数配置为 1 ,这样虽然慢一些,但是多数情况下,是可以正常输出反编译后的代码的。

举个例子:

jadx -d out -j 1 classes.dex

更过命令,可以通过 jadx -h 命令进行查看。

jadx-help

仔细看看 jadx 命令配置的参数,基本上都可以在 Preferences 中,找到对应的配置项,相互对照理解一下,应该不难发现它的使用方式。

五、总结

jadx 确实非常的好用,到这里基本上已经把它的使用,都讲解清楚了。

你在反编译的过程中,使用 jadx 有没有碰到什么问题?还有什么更好的工具推荐,可以在留言区给我留言,我们一起讨论一下。

今天在承香墨影公众号的后台,回复『成长』。我会送你一些我整理的学习资料,包含:Android反编译、算法、设计模式、kotlin、虚拟机、Linux、Web项目源码。

六、原文地址


作者:承香墨影
链接:https://www.jianshu.com/p/e5b021df2170
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。


http://chatgpt.dhexx.cn/article/1ScmlGgL.shtml

相关文章

app逆向(11)| jadx反编译工具的安装

文章目录 一、什么是jadx二、安装一、什么是jadx JADX是一款优秀的Android反编译工具,支持命令行和图形化界面,能为我们省下大量的反编译时间。 二、安装 前提首先需要安装java的jdkjadx的github地址:https://github.com/skylot/jadx 进入,下载压缩包。 解压压缩包后,…

jadx:好用的反编译工具

最近换了新公司,新公司比较高大上都是用的mac电脑开发Android,让我这个window党情何以堪, 任务:我的导师给了我们的一个开发的apk,他让我看打包混淆了没,我就翻一下我以前的工具,尼玛&#xff…

Android反编译——jadx工具

Android反编译工具——jadx 介绍反编译jar包反编译apk文件jadx下载jadx使用反编译文件搜索功能查看类、变量或者方法使用情况添加注释反混淆 本篇博文为转载原创作者公众号:JavaGuide 介绍 jadx 是一款功能强大的反编译工具,使用起来简单方便&#xff08…

决策树原理总结(ID3、C4.5、CART)+ 常见面试问题

系统梳理树类型算法原理加常见面试问题 类容按照决策树、Adaboost、GBDT、XGBoost、LightGBM 顺序进行梳理 本次的重点类容是决策树的CART树 ID3、C4.5介绍请转移到:ID3、C4.5的原理与案例介绍 1. CART树 ID3与C4.5虽然可以通过多叉树尽可能的挖掘特征信息&#…

机器学习之决策树算法

1-1 基本流程 决策树是一个有监督分类与回归算法。 决策树的生成只考虑局部最优,相对的,决策树剪枝则考虑全局最优。 一、概念: 决策树:是一种树形结构,其中每个内部节点表示一个属性上的判断,每个分支代表…

决策树挑出好西瓜

一、决策树 1、基本介绍 决策树(decision tree)是一种基本的分类与回归方法。其主要算法有:ID3、C4.5、CART。以及进化后的C4.5算法C5.0、分类有极大提升的Tsallis等算法。这些算法的区别就在于选择最优特征的方式。但C5.0的核心原理与C4.5…

1.决策树C4.5算法

文章目录 一、概述二、改进表现三、优缺点四、决策树1.特征选择2.决策树的生成3.决策树的剪枝 一、概述 C4.5是一系列用在机器学习和数据挖掘的分类问题中的算法。它的目标是监督学习:给定一个数据集,其中的每一个元组都能用一组属性值来描述&#xff0c…

python实现三种经典决策树算法

决策树实现ID3、C4.5、CART算法 Author: 浅若清风cyfDate: 2020/12/15 一、创建数据集 手动 def createDataSet():"""创建测试的数据集:return:"""dataSet [# 1[青绿, 蜷缩, 浊响, 清晰, 凹陷, 硬滑, 好瓜],# 2[乌黑, 蜷缩, 沉闷, 清晰, 凹…

数据挖掘--决策树C4.5算法(例题)

C4.5算法与ID3算法的不同点: (1)分支指标采用增益比例 (2)数值属性的处理 (3)处理缺少属性值的训练样本 (4)使用K次迭代交叉验证,评估模型的优劣程度&#xf…

决策树算法总结(上:ID3,C4.5决策树)

文章目录 一、决策树原理1.1 决策树简介1.2 基本概念 二、数学知识2.1 信息熵2.2 条件熵:2.3 信息增益 三、ID3决策树3.1 特征选择3.2 算法思路3.3 算法不足 四、C4.5决策树算法4.1 处理连续特征4.2 C4.5决策树特征选取4.3 处理缺失值4.4 过拟合问题 五、决策树C4.5算法的不足 …

决策树分类算法的案例(代码实现及运行测试)

1 案例需求 我们的任务就是训练一个决策树分类器,输入身高和体重,分类器能给出这个人是胖子还是瘦子。 所用的训练数据如下,这个数据一共有10个样本,每个样本有2个属性,分别为身高和体重,第三列为类别标签…

决策树cart算法实战

1、使用决策树预测隐形眼镜类型,隐形眼镜数据集(lenses.csv)是非常著名的数据集,它包含很多患者眼部状况的观察 条件以及医生推荐的隐形眼镜类型。隐形眼镜类型包括硬材质、软材质以及不适合佩戴隐形眼镜。 要求:读取lenses.csv中的隐形眼镜数…

人工智能决策树大作业

人工智能技术: 机器学习之决策树大作业 以西瓜集 2.0 为建模数据,采用交叉验证方法进行数据训练集和验证集的划分,实现决策树 “预剪枝”算法,要求:尽可能充分利用有限的西瓜集 2.0 数据所提供信息,建立泛化能力强的 决策树模型。…

决策树算法:原理与python实现案例

文章目录 决策树算法浅析决策树的介绍决策树最佳划分的度量问题决策树python案例 决策树算法浅析 决策树的介绍 决策树的定义: 决策树是一种逼近离散值目标函数的方法,学习到的函数使用树结构进行表示,完成决策任务。这里决策树可以是分类树…

决策树实例-ID3

决策树-ID3实例 参考书籍: 《机器学习》周志华,第1版 《统计学习方法》李航,第2版 用来记录自己对书中知识的理解,加强自己的理解和记忆,同时提出自己迷惑不解的地方,提高自己编辑的表达能力。 代码参考博…

决策树算法及Python 代码示例

决策树是一种基于树形结构的算法,用于在一系列决策和结果之间建立模型。它通过对特征和目标变量之间的关系进行划分,来预测目标变量的值。 决策树算法示例: 假设我们有一组数据,其中包含天气,温度,湿度和是否出门的特…

决策树一CART算法(第四部分)

决策树一CART算法(第四部分) CART树的剪枝:算法步骤 输入:CART算法生成的决策树。 输出:最优决策树T 设 K 0 , T T 0 K0,TT_0 K0,TT0​ ,从完整的决策树出发 ​ k代表迭代次数,先…

决策树算法

决策树 决策树(Decision Tree)首先对数据进行处理,利用归纳算法生成可读的规则和决策树,然后使用决策对新数据进行分析,本质上是通过一系列规则对数据进行分类的过程 决策树是一种典型的分类方法。其中: 每个内部结点表示一个属性上的判断每个分支代表一个判断结果的输出每…

决策树ID3、C4.5和CART算法例子详解

决策树 决策树是附加概率结果的一个树状的决策图,是直观的运用统计概率分析的图法。机器学习中决策树是一个预测模型,它表示对象属性和对象值之间的一种映射,树中的每一个节点表示对象属性的判断条件,其分支表示符合节点条件的对…