文章目录

  • JADX 介绍
  • JADX 安装
  • JADX 使用
  • 补充
    • APK 目录结构含义
    • APK 打包流程

JADX 介绍

GitHub 地址:https://github.com/skylot/jadx

JADX 支持将 APK, dex, aar, zip 中的 dalvik 字节码反编译为 Java 代码,也支持反编译 AndroidManifest.xml 和 resources.arsc 资源。

JADX 安装

首先安装 JDK1.8 或以上版本,Git,以及 Android 开发环境。

创建要下载的 JADX 存储文件路径,然后在命令行切换到该目录,执行以下命令:

git clone https://github.com/skylot/jadx.git
cd jadx
./gradlew dist 这个操作可能需要一段时间

如果 执行 ./gradlew dist 遇到错误:

PKIX path building failed...省略
注意查看是连接哪个网址发生错误。

这里从连接哪个网址发现是 gradle 的错误,解决办法:

1.在 chrome 中输入 gradle 网址:https://gradle.org/

2.点击网址输入栏的锁标识

3. 点击证书查看详情

4. 然后将证书拖到要存储的目录

5.查看 cacerts 列表,切换到 JAVA 的 security 路径(本机路径是:/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/jre/lib/security/ ),命令行执行:keytool -list -keystore cacerts 路径,本机是:

keytool -list -keystore  /Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/jre/lib/security/cacerts

默认密码为 changeit

6.导入证书,命令执行命令(还是在路径:/Library/Java/JavaVirtualMachines/jdk1.8.0_271.jdk/Contents/Home/jre/lib/security/):

keytool  -importcert  -file 第4步存储的证书路径地址

默认密码为 changeit

如果这里遇到没有权限,在 Mac 系统下,这里需要:sudo keytool -importcert -file 第4步存储的证书路径地址

7.再切换到 JADX 存储文件路径,命令行执行:

cd jadx
./gradlew dist 这个操作可能需要一段时间

JADX 使用

进入 JADX 存储文件路径,进入 jadx/build/jadx/bin 目录,命令行执行:

cd jadx/build/jadx/bin

双击 gadx-gui,如下图:

然后点击 左上角菜单 文件,选择要打开的文件: APK 或 dex 或 arr 或 zip。

这里在网上下载了喜马拉雅的 Android APK,导入后如下图:

到这里, JADX 工具的简单介绍就完了。可以说这个工具:易用,简洁,强大,非常适合用来反编译。

平时,反编译 APK 作用:

  1. 代码是否符合预期,也就是经过压缩(shrinker), 优化(optimizer), 混淆(obfuscator)后,Java 代码(数据模型类)是否符合预期,R.java 代码中的资源 ID 是否符合预期,AndroidManifest.xml 文件的引用的类有没有错误 ,资源图片是否显示异常等。
  2. 要发热修复时,查看 修复后的 APK 中的代码 和 原 APK 中的代码 diff,看修复是否符合期望。
  3. 检查 APK 是否有安全性问题,源码是否易被解读,源码中的关键性代码或重要私密 KEY(RSA,AES 等密钥,用户信息等)是否容易被拿到等。

补充

反编译 Android APK 至少需要了解 APK 目录结构含义和 APK 打包流程,这里简单介绍下。

APK 目录结构含义

这里还是以 喜马拉雅的 Android APK 为例子,直接将 APK 拖入 AndroidStudio :

  1. res:存在资源的文件,drawable, anim, layout 等;
  2. lib:支持CPU架构对应一个ABI(armeabi,armeabi-v7a,x86,mips,arm64- v8a,mips64,x86_64)相关的 so 库;
  3. assets:资源文件,但文件不会被压缩或编译成二进制;
  4. META-INF :签名文件;
  5. AndroidManifest.xml:清单列表文件,四大组件,权限,元数据等配置信息;
  6. classes.dex:编写的Java代码,R.java, aidl 相关 Java 代码经过虚拟机编译后产生的 dex 文件;
  7. resources.arsc:建立 res文件 与R.java文件之间的映射关系;
  8. 其它:各种配置文件。

APK 打包流程

  1. aapt 工具打包资源文件,生成 R.java 文件;
  2. aidl 工具处理 AIDL 文件,生成对应的 .java 文件;
  3. javac 工具编译 Java 文件,生成对应的 .class 文件;
  4. 把 .class 文件转化成 Davik VM 支持的 .dex 文件;
  5. apkbuilder 工具打包生成未签名的 .apk 文件;
  6. jarsigner 或 apksigner 对未签名 .apk 文件进行签名;
  7. zipalign 工具对签名后的 .apk 文件进行对齐处理;

zipalign 工具对签名后的 .apk 文件进行对齐处理的原因:目的是确保所有未压缩数据以相对于文件开头的特定对齐开始。具体来说,它会导致APK中的所有未压缩数据(如图像或原始文件)在4字节边界上对齐。对齐以后,系统就能更加快速的调用APP内的资源。

Android APK 反编译工具 JADX相关推荐

  1. android apk 反编译 工具下载,android APK反编译工具Apktool

    这是android APK反编译工具Apktool下载,集成 jd-gui.jad.dex2jar.apktool.使用该工具可以反编译apk文件,查看xml以及java源代码,默认使用jad反编译, ...

  2. Android apk反编译工具介绍

    首先apk不能被代码混淆(或未经编译优化),如果混淆了,反编译出来的代号还是看不懂, 当然,在你没反编译出来之前,你也不知道有没有混淆. 网上各种反编译工具,眼花缭乱,本文是个人对这些工作做的一个简单 ...

  3. android apk 反编译工具,安卓apk反编译神器

    APK反编译神器安卓修改大师是一个解编APK文件的工具,使用它可以轻松地解编所有APK安装包,替换应用程序界面中的所有文本和图片,代码级别的修改可以增强中文.裂缝.功能等等. 软件说明 可以向所有界面 ...

  4. android apk 反编译工具及方法集锦

    本文主要集锦了网上多种反编译的工具和方法,希望给大家帮助, 一,反编译软件dex2jar和jdgui.exe 1. 测试的操作系统 Windows 7(安装好正常的java环境) 2. 下载反编译工具 ...

  5. android apk反编译工具下载,Android apk反编译工具下载与使用

    介绍 smali baksmali 2.1.3是一款非常好用的安卓apk反编译软件,它可以帮助我们去解读apk文件.下面就详细介绍一下它的使用方式.... 使用教程 1.首先点击立即下载,获取smal ...

  6. android apk反编译工具汇总(2017年10月)

    首先感谢其他人的总结 Android逆向工程用到的工具 手把手教你搞懂Android反编译 主要的步骤 1.apktool d -f xxxx.apk 2../d2j-dex2jar.sh class ...

  7. APK反编译工具推荐----Jadx

    经过测试Apktool,dex2jar,jd-gui,jadx等APK反编译工具发现,Jadx工具查看apk源码最为方便,当然前提是apk未经混淆或者加固(混淆后查看可读性非常差,加固后,基本看不到可 ...

  8. 三种常用的Apk反编译工具

    apk反编译工具: 1.apktool 利用命令行查看Java代码,需配合GUI 查看代码 缺点:查看Java代码时,需要先把apk文件变成zip文件,获取到dex文件,运行命令行d2j-dex2ja ...

  9. Android APK反编译

    转自:http://blog.csdn.net/ithomer/article/details/6727581 一.Apk反编译得到Java源代码 下载上述反编译工具包,打开apk2java目录下的d ...

  10. 【转】Android APK反编译就这么简单 详解(附图)

     转自:http://blog.csdn.net/vipzjyno1/article/details/21039349/ [置顶] Android APK反编译就这么简单 详解(附图) 分类: and ...

最新文章

  1. Objective C 链式调用
  2. java 不知道类名_Java 中获取类名的三种方法,你知道几种?
  3. 【干货】产品经理常忽略的用户研究的四大误区
  4. Java访问修饰符public,private,protected,以及不写(默认)时的区别?
  5. Mybatis注解实现一对多关联映射(@Many)
  6. 软件工程模块开发卷宗_软件智能化再进一步,未来人人都能开发软件?
  7. glVertexAttribPointer第一个参数理解
  8. 【资源】机器学习资料包来袭
  9. java学习(7):巩固练习
  10. 马尔科夫随机场之图像分割【二】
  11. supermap iserver端口介绍
  12. Java System.arraycopy()方法示例
  13. 三菱GXWorks2 绘制梯形图
  14. python config方法_Python config.Configuration方法代码示例
  15. Ubuntu 下安装Skype聊天工具
  16. 徐思/杨玲《面向对象程序设计(Java)》第十一周学习总结
  17. Apktool反编译
  18. win10安装centos子系统
  19. input type=button与asp:button的区别,以及runat=server的作用
  20. 求每个月的最后一天日期

热门文章

  1. R实战 Nomogram(诺莫图列线图)及其Calibration校准曲线绘制
  2. ubuntu16.04下笔记本自带摄像头编译运行PTAM
  3. 微信群发红包原理 计算机,微信红包实现原理探讨
  4. java定义一个getsize方法_java.util.zip.ZipEntry.getSize()方法示例
  5. 编译原理学习基本概念汇总
  6. 【Linux】Linux安装搜狗输入法
  7. SQL语句中查询数据
  8. 分享:Tuts4you社区,脱壳教程全集.1.5G
  9. 10款最佳SQL Server服务器监控工具
  10. 区块链开源代码什么意思_区块链可以从开源中学到什么