天天看点

Android 反编译Android 反编译

文章目录

  • Android 反编译
    • Apk文件结构图
    • 反编译相关工具
    • 反编译步骤
      • 1.ApkTool拆包,得到AndroidManifest和res等资源
      • 2.dex2jar反编译dex文件,得到java源代码
      • 3.jd-gui查看Java源代码

Android 反编译

Apk文件结构图

1. 原理

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

推荐两篇文章

  • 浅析Android打包流程
  • Android构建过程分析

首先看一下基本的Apk结构目录

Android 反编译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源码。

反编译相关工具

  • apktool:https://ibotpeaches.github.io/Apktool/
  • dex2jar:https://github.com/pxb1988/dex2jar
  • jd-jui:http://jd.benow.ca/

反编译步骤

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

Android 反编译Android 反编译

进入当前目录,运行命令

apktool d guanwangbtn.apk 
           

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

Android 反编译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-dex2jar.bat classes.dex

  3. 目录会多出一个jar文件
    Android 反编译Android 反编译

3.jd-gui查看Java源代码

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

Android 反编译Android 反编译
Android 反编译Android 反编译