IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Android 反编译利器,jadx 的高级技巧,卧槽 -> 正文阅读

[移动开发]Android 反编译利器,jadx 的高级技巧,卧槽

jadx-run

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

三、jadx 的优点

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

3.1 强大的搜索功能

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ba69rtQC-1630138514313)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc9518b108cca?imageView2/0/w/1280/h/960/ignore-error/1)]

text-search

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

3.2 直接搜索到引用的代码

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-T3MngVl1-1630138514315)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc9518b3cf082?imageView2/0/w/1280/h/960/ignore-error/1)]

find-Usage

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-D4A5nO5L-1630138514315)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc9518b99c473?imageView2/0/w/1280/h/960/ignore-error/1)]

usage-search

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

3.3 deobfuscation

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

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

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

接下来来看看它的效果。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-weu9HegK-1630138514317)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951b022aa8e?imageView2/0/w/1280/h/960/ignore-error/1)]

deo-before

开启 deobfusation 之后的效果如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JzrBP6Kw-1630138514318)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951b037108c?imageView2/0/w/1280/h/960/ignore-error/1)]

deo-after

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

3.4 一键导出 Gradle 工程

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fRmKJfmu-1630138514319)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951b5dd109f?imageView2/0/w/1280/h/960/ignore-error/1)]

save-gradle

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1ycAi1PY-1630138514320)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951b2ddc5b4?imageView2/0/w/1280/h/960/ignore-error/1)]

gradle-project

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

四、jadx 的错误处理

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

4.1 inconsistent code

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1v6CzFKX-1630138514320)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951b9543a93?imageView2/0/w/1280/h/960/ignore-error/1)]

incon-before

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VoXD1n0w-1630138514321)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951b69e6a25?imageView2/0/w/1280/h/960/ignore-error/1)]

show-pre

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YaGjlX0h-1630138514322)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951d9872c89?imageView2/0/w/1280/h/960/ignore-error/1)]

code2

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

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

4.2 反编译错误或者卡顿

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jEl8FETF-1630138514322)(https://user-gold-cdn.xitu.io/2017/11/27/15ffc951dd8e8e0f?imageView2/0/w/1280/h/960/ignore-error/1)]

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 文件。

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

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

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-29 09:28:21  更:2021-08-29 09:29:38 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2025年1日历 -2025/1/31 6:22:07-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码