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

在开始讲解反编译之前呢,我们先来扫个盲:

什么是APK?

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

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

了解过,APK的之后,接下来就给大家介绍反编译一个APK所需要那些工具:

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

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

  • 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

大家可以从https://ibotpeaches.github.io/Apktool/install/上下载ApkTool,也可以下载我为大家准备好的链接:https://pan.baidu.com/s/1DJ7duyv7nDZJ2VnGPhRDeg 
提取码:w73v   。

安装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命令会看到如下输出:

dex2jar

下载dex2jar

大家可以从https://sourceforge.net/projects/dex2jar/files/上下载dex2jar,也可以下载我为大家准备好的链接:https://pan.baidu.com/s/1DJ7duyv7nDZJ2VnGPhRDeg 
提取码:w73v   。
下载后直接解压即可。

JD-GUI

下载JD-GUI

大家可以从http://jd.benow.ca/上下载JD-GUI,也可以下载我为大家准备好的链接:https://pan.baidu.com/s/1DJ7duyv7nDZJ2VnGPhRDeg 
提取码:w73v    。

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

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

通过上述命令就可以反编译apk了。

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

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

dex2jar将dex反编译成jar

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

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

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

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

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

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

然后执行如下代码进行反编译:

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

通过上述命令会得到两个.jar文件:

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

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

操作步骤很简单,只需双击运行jd-gui-1.4.0.jar,然后将classes-dex2jar.jar拖拽到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”

参考

  • Android开发之反编译与防止反编译
  • 下载ApkTool、dex2jar、JD-GUI

反编译Android APK详细操作指南相关推荐

  1. 反编译android apk工具下载,apktool下载-apktool官方下载「APK反编译工具」-华军软件园...

    ApkTool是用于逆向工程Android APK文件的反编译工具,是一个免费的开源工具.Android开发人员有了ApkTool就可以解码来自第三方,封闭和二进制APK的资源.apktool可支持编 ...

  2. ApkTool 反编译Android apk (加固逆向)

    GitHub 源码地址(其实刚开始不必关注源码的实现,我们只需知道如何完成apk的反编译) https://github.com/iBotPeaches/Apktool 我们主要需要一个jar包和 . ...

  3. Mac OS X 10.8.3反编译Android apk

    http://blog.csdn.net/duanyipeng/article/details/9075163 参考:http://linuxzone.diandian.com/post/2011-1 ...

  4. 使用dex2jar + XJad 方法反编译 Android APK

    http://www.blogjava.net/gaolei-xj/archive/2012/12/23/393371.html   工具下载:需用到dex2jar和 XJad这2个工具 该方法是使用 ...

  5. 教你用最新工具反编译android apk

    所谓工欲善其事必先利其器,首先从官网拿到最新的反编译工具: APK反编译工具: dex2jar:https://github.com/pxb1988/dex2jar(原网址:http://code.g ...

  6. 反编译Android将状态栏高度,反编译SystemUI.apk 实现状态栏时间居中

    本帖最后由 好奇害死猫咪啊 于 2017-5-6 21:48 编辑 本教程为长期更新贴,有问题请及时反馈. 如有更新请恕不另行通知. [前言] 闲来无事水一贴... 今天写个教程吧,反编译 Syste ...

  7. Android反编译软件(附图详细教程)

    在学习Android开发的过程你,你往往会去借鉴别人的应用是怎么开发的,那些漂亮的动画和精致的布局可能会让你爱不释手,作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用 ...

  8. 反编译android的apk

    将要反编译的APK后缀名改为.rar或 .zip,并解压 得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),将获取到的classes.dex放到之前解压出来的工具 ...

  9. Android反编译修改apk并重新打包

    Apktool 是反编译Apk的第三方工具,它可以反编译资源,并在修改之后重新生成Apk 注意:apktool 依赖 Java1.8.请使用 java -version 查看,是否为1.8或更高版本. ...

最新文章

  1. 公开课报名 | 深入浅出理解A3C强化学习
  2. ASP.NET中前台javascript与后台代码调用
  3. NodeJS学习日记--VSCode下调试
  4. sql的加减乘除运算_SQL简单查询语、运算符学习和练习
  5. mysql connector配置_mysql connector odbc配置注意事项
  6. navicat 官方使用手册,中文版,快捷键大全
  7. 收集灵感必备|文字这样组合排版那才叫设计
  8. mybatis where、set、trim、sql、foreach标签的使用
  9. jsf tree组件_JSF文本组件–标签,文本字段,文本区域和密码
  10. HP数组转JSON函数json_encode和JSON转数组json_decode函数的使用方法
  11. iOS 使用CocoaPods
  12. c语言怎么添加搜索功能,C语言实现二叉搜索树的创建、插入、删除和查找
  13. 如何使用pytorch下载MNIST数据集
  14. gp338信令_细说GP338GP328对讲机编程
  15. 百度大脑大升级:各种算法并驾齐驱
  16. 三星三防s8计算机功能在哪里,三星s8三防版怎么样 三防版三星s8配置参数介绍...
  17. OpenResty 在又拍云容器平台中的应用
  18. 【K8S实战】-超详细教程(二)
  19. 如何删除oracle 的用户及其数据
  20. 语音识别发展史与入门书籍简介

热门文章

  1. GO编程程序员修炼秘籍:十本经典书单
  2. Git基础知识教程整理(Git基本操作)
  3. [转]Paul Adams:为社交设计
  4. linux代码、数据库备份
  5. OpenSSL加密与证书
  6. if语句写阶跃函数C语言,C语言第四章分支语句.ppt
  7. Springboot 多线程的使用
  8. Git 少用 Pull 多用 Fetch 和 Merge
  9. Hadoop运行任务时一直卡在: INFO mapreduce.Job: Running job
  10. 城轨的两类时钟系统均同步于_基于两台SDS3000示波器同步产生“8通道”示波器...