Android apk反编译

article/2025/11/7 6:54:25

学习和开发Android应用有一段时间了,今天写一篇博客总结一下Android的apk文件反编译。我们知道,Android应用开发完成之后,我们最终都会将应用打包成一个apk文件,然后让用户通过手机或者平板电脑下载下来进行安装。正常情况下,Android应用打包成apk之后,就无法再看到开发这个应用时使用的资源文件以及代码了。但是我们通过网上提供了一些工具,还是可以将apk进行反编译的,apk反编译之后,我们就可以看到开发这个应用使用的资源文件(图片)、layout、样式、相关的实现代码等,apk反编译也算是Android开发中一个比较实用的技巧吧,当我们对别人开发好的应用感兴趣时,我们就可以通过这种技术手段将别人打包好的apk进行反编译,继而可以看到我们感兴趣的内容,(注:反编译不是让各位开发者去对一个应用破解搞重装什么的,主要目的是为了促进开发者学习,借鉴好的代码,提升自我开发水平。)下面就来说说如何将一个apk反编译出来。

一、准备必要工具

  工欲善其事,必先利其器,首先我们要下载好反编译apk时需要的相关工具

1.1、使用工具

  1. apktool (资源文件获取) 
  2. dex2jar(源码文件获取)
  3. jd-gui  (源码查看)

1.2、工具介绍

  apktool  

         作用:资源文件获取,可以提取出图片文件和布局文件进行使用查看

  dex2jar

         作用:将apk反编译成java源码(classes.dex转化成jar文件)

  jd-gui

         作用:查看APK中classes.dex转化成出的jar文件,即源码文件

1.3工具下载

  apktool下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads

  

  下载好之后得到一个如下图所示的jar文件

  

  dex2jar下载地址:http://sourceforge.net/projects/dex2jar/files/

  

  

  下载完成之后,得到一个如下图所示的压缩包

  

  jd-gui下载地址:http://jd.benow.ca/

  

  下载完成之后,得到一个如下图所示的压缩包:

  

  到此,需要使用到的3个相关工具都下载好了,在这里说明一下jd-gui的下载,我从官方网站上点击 下载时会经常出现如下图所示的问题

  

  但是多试几次又可以下载了,所以如果有遇到这个问题的朋友们不妨多试几次,或者从别的地方下载jd-gui,jd-gui算是做Java开发的一个必备工具了,用它来将class反编译成java源代码是非常方便的,网上搜索一下一般都可以下载到,只不过版本不一定是最新的。

二、Apk反编译流程

  为了方便进行反编译,我们将上述下载好的3个工具统一放到一个文件夹中,例如:

  

  然后将【dex2jar-2.0.zip】和【jd-gui-windows-1.3.0.zip】分别解压到当前文件夹,如下图所示:

  

2.1、使用apktool反编译apk得到图片、XML配置、语言资源等文件

  进入CMD命令行,如下:

  

  切换到上述的3个工具的所在目录,如:E:\AndroidDevelopTool\Android反编译工具包

  

  接下来我们要做的就是运行apktool_2.0.1.jar这个jar文件来将apk文件进行反编译,在java中,运行可执行jar包的命令是:

java -jar jar包名.jar

  使用如下的命令运行apktool_2.0.1.jar反编译MMTS-release-1.0.2.apk

java -jar apktool_2.0.1.jar d -f E:\AndroidDevelopTool\Android反编译工具包\测试apk\MMTS-release-1.0.2.apk -o MMTS

  这个命令是启动apktool_2.0.1.jar将位于【E:\AndroidDevelopTool\Android反编译工具包\测试apk\】目录下的"MMTS-release-1.0.2.apk"这个apk反编译,然后将反编译生成的文件存放到当前目录(apktool_2.0.1.jar所在的目录,也就是"E:\AndroidDevelopTool\Android反编译工具包"目录)下的一个【MMTS】文件夹中。这个文件夹的名字是可以随便取的,喜欢叫啥都行。

  执行反编译操作:

  

  反编译成功后,会在当前目录(E:\AndroidDevelopTool\Android反编译工具包)下生成一个MMTS文件夹,打开MMTS里面就有反编译后生成的文件,如下图所示:

  

  打开MMTS文件夹,就可以看到反编译后的生成的文件,如下图所示:

  

  生成的文件和文件夹当中,我们关心的是【res】文件夹中和AndroidManifest.xml文件,打开res文件夹,里面就有我们想要看到的东西了,如下图所示:

  

  

  

  

  想查看哪个xml文件就使用文本编辑器打开看看吧,反正全部都可以看到了。以上就是使用apktool这个工具将一个apk反编译得到图片、XML配置、语言资源等文件的过程。

2.2、使用dex2jar反编译apk得到Java源代码

  将要反编译的APK后缀名改为.rar或者 .zip,并解压,得到其中的classes.dex文件(它就是java文件编译再通过dx工具打包而成的),如下图所示:

  

  将获取到的classes.dex放到之前解压出来的工具【dex2jar-2.0】文件夹内,如下图所示:

  

  在命令行下定位到dex2jar.bat所在目录,输入"d2j-dex2jar classes.dex",效果如下:

  

  命令执行完成之后,在当前目录下就可以看到生成的Jar文件了,如下图所示:

  

  反编译classes.dex得到classes-dex2jar.jar文件之后,就可以使用【jd-gui】工具将class文件反编译成java源代码了

  

  使用jd-gui打开classes-dex2jar.jar就可以看到源代码了,如下图所示:

  

  JD-GUI虽然可以将class反编译成java源代码,但是对于一些被混淆过的class,反编译的效果就不是那么理想了,被混淆过的class反编译后的效果图(类文件名称以及里面的方法名称都会以a,b,c....之类的样式命名):

  

  以上步骤是我亲自实践过之后一步步整理出来的,对照着做应该不会有太大问题。

三、Apk反编译注意问题

3.1、apktool版本太旧导致反编译失败的问题

  之前用过了apktool这个工具的一些旧版本,发现总是反编译不成功,在执行反编译时会出现如下错误:

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

  

  这个问题是因为apktool版本过低导致,而解决这个问题的办法就是使用最新版本的apktool就可以了,最新版本的下载地址:https://bitbucket.org/iBotPeaches/apktool/downloads

3.2、apktool执行反编译命令出现”Input file was not found or was not readable"的问题

  这个问题是因为apktool升级到2.0以上时,使用方式已经替换,格式为:apktool d [-s] -f <apkPath> -o <folderPath>

  好了,关于反编译apk的内容就这么多了。
  最后,给大家分享我下载好的那三个相关工具,下载地址:http://pan.baidu.com/s/1jGKSQyU


http://chatgpt.dhexx.cn/article/Ox5bgTlr.shtml

相关文章

AVD创建与使用

一、创建虚拟设备&#xff08;AVD&#xff09; AVD链接地址>>手机安卓自动化环境配置 操作程序&#xff1a; D:\tool\adt4_2_32bit\eclipse-eclipse.exe&#xff08;双击启动&#xff09;–开发工具 创建AVD&#xff08;虚拟设备&#xff09;&#xff1a; 1)点击Window…

关于AVOD, 你需要知道的事

翻译、编辑&#xff1a;Alex 本文来自OTTVerse&#xff0c;作者为Krishna Rao Vijayanagar。 ▲扫描图中__二维码了解音视频技术大会更多信息▲ Easy-Tech #026# AVOD&#xff08;Advertising-based Video On Demand&#xff09;是一种视频点播商业模式&#xff1a;通过在视频…

AVOD:Aggregate View Object Detection跑通(官方README小补充)

本地环境 Ubuntu20.04 anaconda tensorflow-gpu1.3.0 cudatookit8.0 cudnn6.0 protobuf3.14.0(protobuf用3.2.0会报错) 1. protobuf文件解释 protobuf是google的一个开源的用来做数据通信的库&#xff0c;在avod/protos文件中有很多.proto文件&#xff0c;这些文件定义了…

AVA

声明&#xff1a;作者翻译论文仅为学习&#xff0c;如有侵权请联系作者删除博文&#xff0c;谢谢&#xff01; 论文链接&#xff1a;arXiv:1705.08421 [cs.CV] 《AVA: A Video Dataset of Spatio-temporally Localized Atomic Visual Actions》论文翻译 摘要介绍相关工作数据收…

avod论文理解与代码解读

AVOD 论文理解与代码解读 论文简析概述网络结构BEV map特征提取rpn 网络特征融合 第二阶段检测网络box 编码方向确定 代码解读anchor 的产生mini batch的产生与作用rpn modelavod modelloss不足 论文简析 参考文章&#xff1a; csdn 代码&#xff1a; 代码 文献&#xff1a; …

AVOD、SVOD、TVOD、PVOD:视频点播商业模式

翻译、编辑&#xff1a;Alex 本文来自OTTVerse&#xff0c;作者为Krishna Rao Vijayanagar。 ▲扫描图中二维码了解音视频技术大会更多信息▲ Easy-Tech #025# 什么是视频点播&#xff08;VOD&#xff09;&#xff1f; 当我向流媒体业内人士问到&#xff0c;视频点播&#x…

【综述】MV3D-Net、AVOD-Net 用于自动驾驶的多视图3D目标检测网络

点击上方“3D视觉工坊”&#xff0c;选择“星标” 干货第一时间送达 前言 MV3D-Net 融合了视觉图像和激光雷达点云信息&#xff1b;输入数据有三种&#xff0c;分别是点云俯视图、点云前视图和RGB图像。通过特征提取、特征整合和特征融合&#xff0c;最终得到类别标签、3D边界框…

AVOD、SVOD、TVOD、PVOD:揭秘视频点播商业模式

点击上方“LiveVideoStack”关注我们 翻译、编辑&#xff1a;Alex 本文来自OTTVerse&#xff0c;作者为Krishna Rao Vijayanagar。 ▲扫描图中二维码或点击阅读原文▲ 了解音视频技术大会更多信息 商业模式 Easy-Tech #025# 什么是视频点播&#xff08;VOD&#xff09;&#xf…

AVOD:点云数据与BEV图的处理及可视化

文章目录 前言1. 点云数据可视化2. 点云数据校准3. 转为BEV图4. 补充&#xff1a;点云坐标系与相机坐标系结束语 前言 本篇主要记录对AVOD代码的学习与理解&#xff0c;主要是KITTI数据集中3D Object Detection任务中的点云数据和BEV图的处理&#xff0c;为方面理解其中的操作&…

视觉与激光雷达融合3D检测(一)AVOD

1.概述 AVOD&#xff08;Aggregate View Object Detection&#xff09;和MV3D类似,是一种融合3维点云和相机RGB图像的三维目标检测算法. 不同的是: MV3D中融合了相机RGB图像,点云BEV映射和FrontView映射,而AVOD则只融合相机RGB图像和点云BEV映射. 从网络结果来看,AVOD采用了基…

AVOD论文解读

AVOD论文解读 1.概述2.网络框架2.1 激光点云数据预处理2.2 特征提取2.3 降低数据量2.4 3D后选区域生成2.5 3D检测框编码2.6 朝向估计 论文地址&#xff1a;[1712.02294] Joint 3D Proposal Generation and Object Detection from View Aggregation (arxiv.org) 代码地址&#…

AVD的使用

前言&#xff1a;这个是AndroidStudio自带的模拟器&#xff0c;虽然功能强大&#xff0c;但是感觉不太好用&#xff0c;安装和使用都比较卡。 个人推荐使用夜神模拟器。 1.打开AndroidStudio&#xff0c;并新建一个工程 2.在菜单栏选择Tools-Android-AVDManager--Create Virt…

复现AVOD

复现过程主要参考https://zhuanlan.zhihu.com/p/87136172 这位博主 之前跟着官方github&#xff08;https://github.com/kujason/avod&#xff09; 环境一直配置不好&#xff0c;之后直接使用博主提供的yaml配置文件&#xff0c;之后进行略微调整即可 与博主不同的是&#xf…

AVOD-理解系列(一)

AVOD-理解 本篇用于记载之前阅读的论文avod及其代码&#xff0c;纯属个人个人理解&#xff0e;有误之处欢迎指正&#xff01; 网络结构 代码流程 1&#xff1a;Feed_dict: feed_dict: 主要就是确定每一个mini_batch里输入图像的各种信息,包括图像的名字,图像的标签文件,图像…

AVOD代码复现

参考文献&#xff1a; https://zhuanlan.zhihu.com/p/86340957 https://zhuanlan.zhihu.com/p/354842740 https://www.guyuehome.com/39798 https://zhuanlan.zhihu.com/p/40271319 1&#xff0c;配置环境 conda create -n avod python3.5 conda install tensorflow-gpu1.3.0…

三十三.智能驾驶之多传感器融合技术: AVOD融合方法

AVOD&#xff08;Aggregate View Object Detection&#xff09;和MV3D类似,是一种融合3维点云和相机RGB图像的三维目标检测算法. 不同的是: MV3D中融合了相机RGB图像,点云BEV映射和FrontView映射,而AVOD则只融合相机RGB图像和点云BEV映射. 从网络结果来看,AVOD采用了基于两阶的…

AVOD论文和代码解析

1.介绍 AVOD&#xff08;Aggregate View Object Detection&#xff09;算法和MV3D算法在思路上非常相似&#xff0c;甚至可以说&#xff0c;AVOD是MV3D的升级版本 总的来说&#xff0c;和MV3D相比&#xff0c;AVOD主要做了以下一些改进&#xff1a; &#xff08;1&#xff0…

论文阅读笔记 | 三维目标检测——AVOD算法

如有错误&#xff0c;恳请指出。 文章目录 1. 背景2. 网络结构3. 实验结果 paper&#xff1a;《Joint 3D Proposal Generation and Object Detection from View Aggregation》 1. 背景 AVOD同样是一个two-stage(使用了RPN提取候选框)、anchor-based网络结构。获得较高的召回率…

IC授权卡和复制卡的区别_信用卡小知识【芯片卡磁条卡的区别】

各位老板&#xff0c;企业家大家好&#xff0c;我是小胡&#xff0c;您身边的金融专家。 今天呢跟大家说一下信用卡芯片卡和磁条卡的区别&#xff1f; 信用卡呢&#xff0c;现在普及率非常高的。几乎是人手一张或者是多张。那么大家知道芯片卡和磁条卡的区别到底在哪里&#xf…

IC卡清卡软件的使用

IC卡清卡软件&#xff0c;可以在知道卡片密码的情况下&#xff0c;把卡片恢复出厂密码&#xff0c;清除卡片数据和密码。 如下图 然后读取卡片文件&#xff0c;即卡片dump文件&#xff0c; 然后把卡片放读写器上&#xff0c;点清卡按钮&#xff0c;开始清卡&#xff0c;将清除…