Android 反编译
文章目录
Android 反编译
Apk文件结构图
1. 原理
反编译的是Apk文件,所以需要知道Android打包的过程原理,以及Apk文件目录,以及文件是怎么生成的。
推荐两篇文章
首先看一下基本的Apk结构目录
- asses文件:原始资资源文件,存放原始的网页,音频等。
- lib:相关第三方的so文件。
- META-INF:签名文。
- r文件:一般解压后应该是res文件,包含布局,图片等信息。
- AndroidManifest.xml:全局配置文件。
- classes.dex类似文件:源码编译成class文件,在转成jar文件,在yasuo压缩成dex文件。dex文件可以直接运行在Android虚拟机上。
- resources.arsc:资源文件和资源id的映射关系。
经过解压后的文件是经过打包处理的,无法阅读。
所以需要相关工具进行反编译,得到AndroidManifest.xml文件,res文件,java源码。
反编译相关工具
- apktool:https://ibotpeaches.github.io/Apktool/
- dex2jar:https://github.com/pxb1988/dex2jar
- jd-jui:http://jd.benow.ca/
反编译步骤
1.ApkTool拆包,得到AndroidManifest和res等资源
进入当前目录,运行命令
apktool d guanwangbtn.apk
回车,会在当前面目录生成一个guanwangbtn的文件夹。
这是我们可以得到可阅读的AndroidManifest.xml文件,assets文件夹,res文件夹,smali类似文件夹。
- smali文件是反编译出来的代码,目录结构和源代码的package一模一样,只是语言使用的是smali语言。
- original文件夹是原始的AndroidManifest.xml文件。
2.dex2jar反编译dex文件,得到java源代码
如果还想得到源代码,工具dex2jar。
- 功能:将dex格式文件转成jar文件。
- 将压缩得到的dex文件放进dex2jar-2.0文件夹中。
- 当前目录,运行命令
d2j-dexjar.bat classes.dex
- 目录会多出一个jar文件
3.jd-gui查看Java源代码
下载工具,直接点击打开,classes-dex2jar.jar拖入界面打开。