反编译Android APK详细操做指南[ApkTool,dex2jar,JD-GUI](Mac)

早在4年前我曾发表过一篇关于《Android开发之反编译与防止反编译》的文章,在该文章中我对如何在Windows平台反编译APK作了讲解,现在用Mac系统的同窗愈来愈多,也有不少朋友问我可否出一篇关于如何在Mac平台上反编译APK的文章,今天呢我就抽时间来写一下在Mac平台上如何反编译APK,但愿对感兴趣的同窗能有学帮助。git

在开始讲解反编译以前呢,咱们先来扫个盲:github

什么是APK?

APK的全程是Android application package,是Android的应用程序包,平时咱们安装Android应用的时候须要将APK文件下载到本地而后安装,Android系统会将其识别为Android应用包。另外,须要指出的是APK 实际上是一个基于 ZIP 文件格式的文件,因此支持你用解压软件将其解压,当你将APK文件解压以后你会看到以下文件:安全

APK文件结构

  • .dex代码文件:它是classes文件经过DEX编译后的文件格式,用于在Dalvik虚拟机上运行的主要代码部分;
  • resources 资源文件:以resources以及res目录为表明的Android程序中所须要的一些资源,如图片资源,颜色资源,字符串,布局等;
  • assets文件:assets目录下存放的是原生资源文件,好比在里面存放字体,铃声等;
  • manifest清单文件:以AndroidManifest.xml为表明的Android清单文件,清单文件向 Android 系统提供应用的必要信息,系统必须具备这些信息方可运行应用的任何代码。

了解过,APK的以后,接下来就给你们介绍反编译一个APK所须要那些工具:bash

反编译一个APK须要那些工具?

不管是在Windows平台仍是在Mac平台,反编译APK都离不了ApkTool、dex2jar、JD-GUI 这三种工具,那么这三种工具都是作什么用的呢?app

  • ApkTool:是一款应用在Apk上的逆向工程的工具,它有编译、反编译、签名等功能,在这篇文章中会讲解如何利用ApkTool查看apk的xml文件、AndroidManifest.xml和图片等。
  • dex2jar:顾名思义,这款工具的做用主要是将dex文件转换成jar文件,转换成jar后咱们才好借助JD-GUI来查看反编译dex后的代码;
  • JD-GUI:一款Java反编译器GUI,经过它咱们能查看到反编译后的dex的代码,一般须要配合dex2jar使用;

准备工做(安装ApkTool、dex2jar、JD-GUI的具体流程)

介绍过ApkTool、dex2jar、JD-GUI 的做用后,接下来咱们作一些反编译前的准备工做,首先呢咱们须要安装ApkTool。工具

ApkTool

下载ApkTool

你们能够从ibotpeaches.github.io/Apktool/ins…上下载ApkTool,也能够下载我为你们准备好的ApkTool、dex2jar、JD-GUI布局

安装ApkTool

  1. 将下载好的apktool文件与apktool_2.3.1.jar文件准备好,并将apktool_2.3.1.jar改名为apktool.jar
  2. apktool.jarapktool移动到/usr/local/bin目录下(能够经过在终端中输出命令open /usr/local/bin来打开这个目录);
  3. 为上述两个文件增长可执行权限,即在终端中输入并执行:
    chmod +x apktool.jar
    chmod +x apktool
    复制代码
  4. 在终端输入apktool看是否能够运行,若是不能够须要在系统偏好设置中打开安全与隐私中点击仍要运行apktool.jar;

至此ApkTool的安装便完成了,在终端运行apktool命令会看到以下输出:字体

apktool

dex2jar

下载dex2jar

你们能够从sourceforge.net/projects/de…上下载dex2jar,也能够下载我为你们准备好的ApkTool、dex2jar、JD-GUI。 下载后直接解压便可。ui

JD-GUI

下载JD-GUI

你们能够从jd.benow.ca/上下载JD-GUI,也能够下载我为你们准备好的ApkTool、dex2jar、JD-GUIspa

使用ApkTool反编译APK获得xml文件、AndroidManifest.xml和图片

cd /你存放apk的目录或在下面命令中使用xxx.apk文件的绝对路径
apktool d xxx.apk //该命令执行后会在同级目录下生成一个与你编译的apk同名的目录
复制代码

经过上述命令就能够反编译apk了。

apktool d

而后在反编译后生成的目录中你会看到相关的资源文件:

apktool反编译

因为APkTool只能将资源文件提取处理,对于.dex类型的文件是没法查看的,这里就须要用到dex2jar了。

dex2jar将dex反编译成jar

第一步,解压apk得到dex文件

使用解压软件将apk进行解压:

unzip-apk.png

也可将apk文件的后缀改成.rar而后双击进行快速解压。

使用解压软件打开apk 和使用apktool反编译出的apk不一样

  • 直接解压apk和使用apktool反编译apk都能得到AndroidManifest.xml,但直接解压得到的AndroidManifest.xml是乱码的,没法直接查看;
  • 直接解压apk得到res资源文件是不包含resources.arsc部分的,而使用apktool反编译出来的res是包含的;

apktool-unzip.png

从上图中能够看到有2个classes.dex文件(这是由于应用了MultiDex所致)这就是项目的源码 将这个两个文件拷贝到下载解压的dex2jar目录下:

classes.dex.png

而后执行以下代码进行反编译:

cd /你的dex2jar解压目录 也就是上面图中存放class.dex文件的目录
sh d2j-dex2jar.sh classes.dex
sh d2j-dex2jar.sh classes2.dex
复制代码

经过上述命令会获得两个.jar文件:

classes-dex2jar.jar

使用JD-GUI查看反编译后的程序源码

将dex转换成jar以后接下来咱们就可使用JD-GUI来查看反编译后的程序源码了:

操做步骤很简单,只需双击运行jd-gui-1.4.0.jar,而后将classes-dex2jar.jar拖拽到JD-GUI界面上便可:

jd-gui

FAQ

Permission denied d2j_invoke.sh

为d2j_invoke.sh增长权限:

sudo chmod +x d2j_invoke.sh //sudo chmod +取消权限
复制代码

Exception in thread "main" brut.androlib.AndrolibException: Could not decode arsc file

Apktool的bug使用其余版本的Apktool,我在使用apktool_2.3.3.jar中遇到了这个问题,使用如apktool_2.3.1.jar是好的,若是你也遇到了这个问题不妨换个Apktool版本试一下。

Exception in thread "main"

参考

相关文章
相关标签/搜索