Date Modified Tags android

Introduction

本文简单介绍了如果使用dex2jar和jd-gui来反编译apk,查看其源码。

补充了jadx工具的使用

1. 工具和环境

本文的环境为Debian 9 x86_64,使用的工具:

dex2jar 作用:将apk反编译成java源码(classes.dex转化成jar文件)

JD GUI 作用:查看APK中classes.dex转化成出的jar文件,即源码文件

jadx:综合上面两个工具的作用,可以直接拖进apk,然后查看其源码,但是功能不如jdgui完善。

2. apk分析

apk文件的本质是压缩文件,可直接用解压缩软件以zip的形式解压。

文件、文件夹 内容
assets文件夹 原始资源文件夹,对应着Android工程的assets文件夹,一般用于存放原始的图片、txt、css等资源文件。
lib 存放应用需要的引用第三方SDK的so库。比如一些底层实现的图片处理、音视频处理、数据加密的库等。而该文件夹下有时会多一个层级,这是根据不同CPU 型号而划分的,如 ARM,ARM-v7a,x86等。
META-INF 保存apk签名信息,保证apk的完整性和安全性。
res 资源文件夹,其中的资源文件包括了布局(layout),常量值(values),颜色值(colors),尺寸值(dimens),字符串(strings),自定义样式(styles)等。
AndroidManifest.xml文件 全局配置文件,里面包含了版本信息、activity、broadcasts等基本配置。不过这里的是二进制的xml文件,无法直接查看,需要反编译后才能查看。
classes.dex文件 这是安卓代码的核心部分,,dex是在Dalvik虚拟机上可以执行的文件。这里有classes.dex和classes2.dex两个文件,说明工程的方法数较多,进行了dex拆分。
resources.arsc文件 记录资源文件和资源id的映射关系。

3. 将dex文件转换成jar包

下载的dex工具包直接解压即可,处理上一步解压出来的classes.dex文件

./dex2jar-2.1-SNAPSHOT/d2j-dex2jar.sh  ./classes.dex

将生成一个classes-dex2jar.jar文件,用java -jar jd-gui.jar classes-dex2jar.jar打开jar包,即可看到反编译后的源码:

这里会看到大量的a.a,b.b等无意义命名,代码及其难懂。。不过好在jdgui可以点击类名进行跳转,一定程度上减少了工作量。

4. jd gui的使用

jdgui可用的功能比较简单,但都很实用。

search里可以对整个项目的代码进行搜索,但是他搜索的功能有限,最好搜索单词,不要搜索net.findhao等带标点符号的关键词,如要搜索带标点符号的关键词,先用jd导出源码,会生成源码文件夹,然后用vscode or sublime等打开文件夹进行搜索。

5. jadx

https://github.com/skylot/jadx

直接将apk拖入即可自动打开并完成前面的dex2jar和jdgui的功能。

但是一些小功能不如jdgui完善。

Reference

Android APK反编译就这么简单 详解(附图)

Android APK 反编译实践


文章版权归 FindHao 所有丨本站默认采用CC-BY-NC-SA 4.0协议进行授权|
转载必须包含本声明,并以超链接形式注明作者 FindHao 和本文原始地址:
https://findhao.net/easycoding/2182.html

Comments