jadx初识_你我初识

jadx初识_你我初识一.jadx介绍一款相对流行的反编译工具下载:https://github.com/skylot/jadx/releases/tag/v1.0.0解压后得到这么几个文件:启动:(以下来两个文件

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一.jadx介绍

  一款相对流行的反编译工具

  下载:https://github.com/skylot/jadx/releases/tag/v1.0.0

  jadx初识_你我初识

jadx初识_你我初识

  解压后得到这么几个文件:

  jadx初识_你我初识

  启动:(以下来两个文件都可以)

  jadx初识_你我初识

  jadx初识_你我初识

   启动后的界面:

  jadx初识_你我初识

 

二.使用

  

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

·  jadx初识_你我初识

 

三、jadx 的优点

  1.强大搜索功能

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

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

jadx初识_你我初识

  

jadx 的搜索,支持四种维度,Class、Method、Field、Code,我们可以根据我们搜索的内容进行勾选,范围最大的就是 Code ,基本上就是文本匹配搜索。

  2.直接搜索到引用的代码

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

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

jadx初识_你我初识

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

`jadx初识_你我初识

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

  3.deobfuscation

一般 Apk 在发布出去之前,都是会被混淆的,这基本上国内 App 的标配。这样一个类,最终会被混淆成 a.b.c ,方法也会变成 a.b.c.a() 
,这样其实非常不利于我们阅读。我们很难看到一个 a.java 的文件,就确定它是哪一个,还需要根据包名来区分。 而 deobfusation 功能,可以为它们起一个特殊的名字,这样它在这个项目中,名字就唯一了,方便我们识别和搜索。 这个功能可以在 Tools
-> deobfusation 中激活。 接下来来看看它的效果。

  jadx初识_你我初识

    开启 deobfusation 之后的效果如下:

  jadx初识_你我初识

  4. 一键导出 Gradle 工程

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

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

  jadx初识_你我初识

这个文件是可以直接通过Android Studio编辑的

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

   5.修改内存

如果你的window系统是8G或者更高运行内存,我们可以修改参数进行扩容。文本模式打开jadx-gui.bat,将被框出的内容数值改为8g或者更大,如果电脑运行内存更大,也可以改成更高的数值。100M以内的App,8G内存足够了。

  jadx初识_你我初识

 

四.jadx 的错误处理

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

  1. inconsistent code

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

  jadx初识_你我初识

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

  jadx初识_你我初识

  jadx初识_你我初识

   

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

  jadx初识_你我初识

  

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

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

  2. 反编译错误或者卡顿

 

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

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

  jadx初识_你我初识

官方对于这样因为内存不足引发的问题,也提供了一些解决方案。
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初识_你我初识

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

 

 转载自:https://www.jianshu.com/p/e5b021df2170

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/167939.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • mysql如何优化慢查询_慢sql优化思路

    mysql如何优化慢查询_慢sql优化思路这篇文章主要是就在公司实习的时候,对SQL优化工作作出的一些整理。  在公司实习的时候,导师分配了SQL慢查询优化的任务,任务是这样的:每周从平台中导出生产数据库的慢查询文件进行分析。进行SQL优化的手段也主要是修改SQL写法,或者新增索引。  现在从记录项目中的一点点做起。  (1)数据库中设置SQL慢查询    一、第一步.开启mysql慢查询     方…

    2022年10月15日
  • 【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」

    【JAVA面试必会】JMM高并发详解(java内存模型、JMM三大特征、volatile关键字 )「建议收藏」volatile一定能保证线程安全吗?禁止指令重排序volatile禁止指令重排序的原理。JMM就是Java内存模型(javamemorymodel)。因为在不同的硬件生产商和不同的操作系统下,内存的访问有一定的差异,所以会造成相同的代码运行在不同的系统上会出现各种问题。所以java内存模型(JMM)屏蔽掉各种硬件和操作系统的内存访问差异,以实现让java程序在各种平台下都能达到……………

  • python之多线程

    python之多线程声明:示例来源《python核心编程》前言单线程处理多个外部输入源的任务只能使用I/O多路复用,如:select,poll,epoll。特别值得注意的是:由于一个串行程序需要从每个I/O终端

  • 越权漏洞详解

    越权漏洞详解OverPermission越权风险问题越权访问(BrokenAccessControl,简称BAC)是Web应用程序中一种常见的漏洞越权访问漏洞的产生比如,某个订单系统,用户可以查询自己的订单信息。A用户查询订单时,发送的HTTP请求中包含参数“orderid=A”,订单系统取得orderid后最终会查询数据库,查询语句类似于“select*fromtablenamewhereorderid=A”。B用户查询订单时,发送的HTTP请求中包含参数“orderid=B”,系统查询数

  • c语言与java哪个更好_c语言和java哪个好?[通俗易懂]

    c语言与java哪个更好_c语言和java哪个好?[通俗易懂]看到这个问题,一定要参与一下,这两个语言我都太熟悉了,也用了很长时间。关于程序设计语言,有这么两句话:C语言,神一样的语言。java语言是一个神话。所以说这是两个神级语言,到底哪个好?下面咱们逐个分析一下:1。C语言,C语言是计算机程序设计语言史上具有划时代意义的语言,到今天为止也依然是主力语言。最新的2017年语言排行榜以微弱的差距排在第二位,远远高于榜单中其他语言的使用率,而且C语言的一众小弟…

  • 线程池参数详解

    线程池参数详解转载来自:http://blog.csdn.net/zhouhl_cn/article/details/7392607JDK1.5中引入了强大的concurrent包,其中最常用的莫过了线程池的实现ThreadPoolExecutor,它给我们带来了极大的方便,但同时,对于该线程池不恰当的设置也可能使其效率并不能达到预期的效果,甚至仅相当于或低于单线程的效率。ThreadPoo

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号