Android 反编译

Android 反编译

Apk文件结构图

1. 原理
反编译的是Apk文件,所以需要知道Android打包的过程原理,以及Apk文件目录,以及文件是怎么生成的。

推荐两篇文章

首先看一下基本的Apk结构目录
Android 反编译

  1. asses文件:原始资资源文件,存放原始的网页,音频等。
  2. lib:相关第三方的so文件。
  3. META-INF:签名文。
  4. r文件:一般解压后应该是res文件,包含布局,图片等信息。
  5. AndroidManifest.xml:全局配置文件。
  6. classes.dex类似文件:源码编译成class文件,在转成jar文件,在yasuo压缩成dex文件。dex文件可以直接运行在Android虚拟机上。
  7. resources.arsc:资源文件和资源id的映射关系。

经过解压后的文件是经过打包处理的,无法阅读
所以需要相关工具进行反编译,得到AndroidManifest.xml文件,res文件,java源码。

反编译相关工具

反编译步骤

1.ApkTool拆包,得到AndroidManifest和res等资源

Android 反编译
进入当前目录,运行命令

apktool d guanwangbtn.apk 

回车,会在当前面目录生成一个guanwangbtn的文件夹。
Android 反编译

这是我们可以得到可阅读的AndroidManifest.xml文件,assets文件夹,res文件夹,smali类似文件夹。

  1. smali文件是反编译出来的代码,目录结构和源代码的package一模一样,只是语言使用的是smali语言。
  2. original文件夹是原始的AndroidManifest.xml文件。

2.dex2jar反编译dex文件,得到java源代码

如果还想得到源代码,工具dex2jar。

  • 功能:将dex格式文件转成jar文件。
  1. 将压缩得到的dex文件放进dex2jar-2.0文件夹中。
  2. 当前目录,运行命令d2j-dexjar.bat classes.dex
  3. 目录会多出一个jar文件
    Android 反编译

3.jd-gui查看Java源代码

下载工具,直接点击打开,classes-dex2jar.jar拖入界面打开。
Android 反编译

Android 反编译