反编译Android APK详细操作指南

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

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

什么是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所需要那些工具:

反编译一个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反编译

由于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目录下:

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

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界面上即可:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/547418.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Ext.grid.CheckboxSelectionModel状态设置

直接上代码: var model grid.getSelectionModel();model.selectAll();//选择所有行model.selectFirstRow();//选择第一行model.selectLastRow([flag]);//选择最后一行,flag为正的话保持当前已经选中的行数,不填则默认falsemodel.selectNext();//选择下一行model.se…

MySql PreparedStatement用法 及 Transaction处理

import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.SQLException;public class TestJDBC {/*** 当银行转账时,需要在汇款人账户上扣除汇款金额,同时在收款人账户上存入汇款金额&#xff…

计算机硬件维修所需技能实习报告,计算机软硬件及网络维护技能实习报告.doc...

计算机软硬件及网络维护技能实习报告计软络维护主板硬盘内存CPU,光驱显卡声卡网卡主板,又叫主机板、系统板和母板;它安装在机箱内,是微机最基本的也是最重要的部件之一。光驱就是播放光盘的,一下安装程序,游戏程序的都是放在光盘里…

用idea新建springboot项目遇到的@Restcontroller不能导入的问题

我个人的解决方法如下&#xff1a; 1.springboot默认有 <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>o…

Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案

Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案&#xff0c;ext 的CheckboxSelectionModel在后台默认选中之后&#xff0c;前台就不允许编辑的bug是存在的&#xff0c;因为CheckboxSelectionModel没有Disabled"true"的设置&#xff0c;只能想办…

广州海珠区计算机学校,2019广州海珠区电脑派位和对口直升表

点击即可领取期末各科试卷预约课程还可获赠免费的学习复习诊断— — 学而思爱智康课程优势 — —12年本地化教研沉淀个性化学习方式专属教学服务优质的教学系统2019广州海珠区电脑派位和对口直升表&#xff0c;各位的爸爸妈妈们看过来&#xff01;&#xff01;看看目标学校都招…

android的消息队列机制

android下的线程&#xff0c;Looper线程&#xff0c;MessageQueue&#xff0c;Handler&#xff0c;Message等之间的关系&#xff0c;以及Message的send/post及Message dispatch的过程。 Looper线程 我们知道&#xff0c;线程是进程中某个单一顺序的控制流&#xff0c;它是内核…

KNN算法检测手势动作

KNN算法原理&#xff1a; KNN&#xff08;k-nearest neighbor&#xff09;是一个简单而经典的机器学习分类算法&#xff0c;通过度量”待分类数据”和”类别已知的样本”的距离&#xff08;通常是欧氏距离&#xff09;对样本进行分类。 这话说得有些绕口&#xff0c;且来分解…

IIS负载均衡(转)

在大型Web应用系统中&#xff0c;由于请求的数据量过大以及并发的因素&#xff0c;导致Web系统会出现宕机的现象&#xff0c;解决这一类问题的方法我个人觉得主要在以下几个方面&#xff1a; 1.IIS 负载均衡。 2.数据库 负载均衡。 3.系统架构优化&#xff0c;比如报表服务器…

maven报错Non-resolvable parent POM for com.wpbxin:springboot2-first-example:0.0.1-SNAPSHOT: Could not

文章目录 一、maven报错二、一些说明三、出现问题的原因和几种解决方法 忽略SSL证书检查生成证书并导入到 JRE security 中使用默认的 maven 中央仓库使用 http 的镜像库四、参考链接 记录使用 maven 时遇到的问题。第一种方法最方便&#xff0c;亲测能用。 一、maven报错 mav…

计算机科技与技术对应岗位,计算机技术与软件专业技术资格名称及岗位基本任职条件...

超越梦想&#xff1a;计算机技术与软件专业技术资格名称及岗位基本任职条件专业资格名称对应专业技术职务等级学位或学历要求资历要求信息系统项目管理师、系统分析师、系统架构设计师、网络规划设计师、系统规划与管理师高级博士学位聘任工程师满2年硕士学位聘任工程师满4年本…

ASP.NET将Session保存到数据库中

因为ASP.NET中Session的存取机制与ASP相同&#xff0c;都是保存在进行中&#xff0c; 一旦进程崩溃&#xff0c;所有Session信息将会丢失&#xff0c;所以我采取了将Session信息保存到SQL Server中&#xff0c;尽管还有其它的几个方式&#xff08;本文不作介绍&#xff09;&…

临时表空间

Oracle临时表空间主要用来做查询和存放一些缓冲区数据。临时表空间消耗的主要原因是需要对查询的中间结果进行排序。重启数据库可以释放临时表空间&#xff0c;如果不能重启实例&#xff0c;而一直保持问题sql语句的执行&#xff0c;temp表空间会一直增长。直到耗尽硬盘空间。网…

Intellij idea 出现错误 error:java: 无效的源发行版: 11解决方法

Select the project, then File > ProjectStructure > ProjectSettings > Modules -> sources You probably have the Language Level set at 9: Just change it to 8 借用下别人的图片&#xff0c; 我的默认是11报的错&#xff0c; 改成8后就好了

JavaScript返回上一页代码区别

JavaScript返回上一页代码区别&#xff1a; window.history.go(-1); //返回上一页window.history.back(); //返回上一页//如果要强行刷新的话就是&#xff1a;window.history.back();location.reload();window.location.go(-1); //刷新上一页

计算机房机柜标准尺寸,有哪些参数和尺寸符合机房机柜的安装要求

现如今服务器机房越来越多&#xff0c;不管是自己托管服务器还是租用服务器&#xff0c;机房机柜的选择是很重要的。机房机柜也会跟其高度厚度尺寸等相关。对于需要运行环境和要求高的机房&#xff0c;还需要选择有智能系统的机柜才行。还需要根据一些机房机柜的参数来考虑是否…

9月第1周国内IT技术类网站:CSDN覆盖数持续走低

根据国际统计机构Alexa公布的最新数据显示&#xff0c;9月第1周&#xff08;2013-09-02至2013-09-08&#xff09;&#xff0c;国内IT技术类网站排行榜中&#xff0c;CSDN以1710居于榜首&#xff0c;第二位是1170的博客园&#xff0c;第三位是670的51CTO。下面是具体情况&#x…

Unity3D默认的快捷键

shift 方向键 向“向方向键前进” Windows系统Unity3D中的快捷键 组合键键功能File 文件Ctrl NNew Scene 新建场景Ctrl OOpen Scene 打开场景Ctrl SSave Scene 保存CtrlShiftSSave Scene as 保存场景为CtrlShiftBBuild Settings... 编译设置...Ctrl BBuild and r…

计算机辅助设计教案板书,计算机辅助设计教案计机辅助设计教案.doc

计算机辅助设计教案计机辅助设计教案院 系&#xff1a; 机械工程系教研室&#xff1a; 机械设计及理论教 师&#xff1a; 杨晓红计算机辅助设计课程教案课程名称计算机辅助设计课程学分 2课程属性必修课( ∨ ) 专业选修课() 校定公共选修课( )课程总学时32学时其中&#xff1a;…

YOLOv3改进方法增加特征尺度和训练层数

YOLOv3改进方法 YOLOv3的改进方法有很多&#xff0c;本文讲述的是增加一个特征尺度。 以YOLOv3-darknet53&#xff08;ALexeyAB版本&#xff09;为基础&#xff0c;增加了第4个特征尺度&#xff1a;104*104。原版YOLOv3网络结构&#xff1a; YOLOv3-4l网络结构&#xff1a; 即…