Android 反编译apk

学习和开发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

Android 反编译 APK 是指将已打包的 APK 文件解包,提取出其中的源代码、资源文件等信息进行分析和修改的过程。在实际开发和研究中,反编译 APK 可以帮助开发者了解其他应用程序的实现逻辑、修改应用程序的功能或者进行安全评估。 反编译 APK 可以通过教程和工具来完成。首先,需要下载并安装一个专门用于反编译 APK 的工具,比如 Apktool、dex2jar 等。接下来,可以通过搜索引擎或者查找相关教程来学习如何使用这些工具进行反编译。 具体来说,使用 Apktool 可以将 APK 解包成对应的 smali 代码文件和资源文件,而使用 dex2jar 可以将 APK 中的 dex 文件转换为 jar 文件。 在进行反编译 APK 之前,我们需要了解一些基本的 Android 开发知识,比如 Java 编程语言、Android 开发框架、AndroidManifest.xml 配置文件等。只有对这些知识有一定的了解,才能更好地理解和修改反编译后的代码。 需要注意的是,反编译 APK 是一种合法的行为,但在修改他人应用程序时需要遵守法律法规,避免侵权和非法行为。同时,也要强调,反编译 APK 只是为了学习和研究目的,对于商业应用的源代码和资源文件进行非法的使用和传播是不道德和不合法的。 总之,Android 反编译 APK 是一个有用的技术,在开发和研究中有着重要的作用。通过教程和工具,我们可以将 APK 解包,获取源代码和资源文件,进行分析和修改,但使用反编译的成果需要遵守法律法规,并避免侵权和非法行为。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值