反编译Android应用

转载请注明出处:http://blog.csdn.net/allen315410/article/details/44018747

Android反编译介绍

        我们在开发Android应用的时候,常常会“参考”“借鉴”一下别人“想法”,你们懂的!然而,很多时候我们是看不见别人的源码的,这时候唯一解决的方法就是反编译apk,我们知道,当一个Android应用开发好了以后,会打包生成apk文件,然而Android打包工具会将java源码编译成.class字节码文件,将布局文件做乱码处理,还会将Nine Patch图片做特殊处理,如果不经过反编译而直接加压看其源码或者使用其资源文件,是很不理想的,下面我将记录下常见Android反编译工具的使用方法。

JD-GUI工具的使用

JD Project官方地址:

http://jd.benow.ca/

http://java.decompiler.free.fr (这是官网, 目前貌似已经不提供了)

读者可以进入官网看一下说明,虽然是英文的,但是不算难懂,往往官网首页会给我们提供一下比较有用的信息。例如:

引用:The “Java Decompiler project” aims to develop tools in order to decompile and analyze Java 5 “byte code” and the later versions.

译:“Java编译器的项目”旨在开发工具以反编译和分析Java 5字节代码”及以上版本。

引用:JD-GUI is a standalone graphical utility that displays Java source codes of “.class” files. You can browse the reconstructed source code with the JD-GUI for instant access to methods and fields.

译:JD-GUI是一个独立的图形工具,它显示的Java源代码”。阶级”文件。你可以浏览重建源代码JD-GUI即时访问方法和字段。


JD-GUI的使用

接下来,我们就要下载JD-GUI工具了,JD-GUI是JD Project的UI客户端,我们使用该工具可以很方便的将.class字节码文件反编译成.java源码文件,也可以用来反编译.jar文件。

技术分享

        如图所示,大家可以点击上面的链接下载jd-gui,由于我使用的是windows,所以我下载Windows版本的了,如果您使用的平台是Linux或者Mac,你就要下载另外两个版本了。下载好了之后,用解压缩工具解压压缩包,然后会看见压缩包中包含jd-gui.exe和readme.txt文件。按照惯例,我们需要阅读一下readme文件,里面有一些相关信息值得我们去注意,例如使用方法:

 How to use JD-GUI

For example, to decompile "Object.class", you can :

译:例如,反编译“Object.class”文件时,你可以:
- execute the following command line : "jd-gui.exe Object.class".

译:在命令行中执行“jd-gui.exe Object.class”命令
- select "Open File ..." in "File" menu and browse to "Object.class".

译:在“File”菜单列表中选择“Open File...”,浏览到打开“Object.class”
- drag and drop "Object.class" onto "jd-gui".

译:直接拖拽“Object.class”到“jd-gui”上

综上,第三种拖拽的方式是最方便的,我们在使用的时候,最好使用这种,事实上至少我个人是这么个习惯的,你说呢?!


JD-Eclipse的使用

      JD-Eclipse是Eclipse平台的插件。它允许您显示所有Java源在调试过程中,即使你没有。当我们想在Eclipse中查看某个jar包源码的时候,有时候并不能关联到源码的,例如Google的gson.jar是不包含源码的,如下图:
技术分享
插件在线安装地址:http://jd.benow.ca/jd-eclipse/update
我们这里推荐使用在线安装插件的方法。具体步骤如下:点击Eclipse上的“Help”——>“Install New Software”——>"Add",在弹出的窗口中填入上面插件在线安装的链接:
技术分享
接下来一直“Next”下去。最后需要同意一个协议条款:
技术分享
最后安装完毕之后,重启一下Eclipse,这时就可以查看源码了。
技术分享
是不是很方便啊,试试吧!


dex2jar工具的使用


官方User-Guide

这个工具的使用非常简单,它可以把Android  APK中的classes.dex解码为jar文件,使用方法可以参考官网上的User-Guide如下:

  1. 下载dex2jar最新版http://code.google.com/p/dex2jar/downloads/list
  2. 解压dex2jar-version.zip文件到一个目录. 比方说 /home/panxiaobo/C:\
    unzip -x dex2jar-version.zip -d /home/panxiaobo
  3. 使用 dex2jar 来生成 .jar 文件. dex2jar会在工作目录下生成一个someApk-dex2jar.jar文件.
       linux sh /home/panxiaobo/dex2jar-version/d2j-dex2jar.sh /home/panxiaobo/someApk.apk
       windows C:\dex2jar-version\d2j-dex2jar.bat someApk.apk
  4. 使用反编译工具获取查看源代码

就这么简单


使用方法

如果上述官方文档中提供的User-Guide不好理解的话,就请看下面的使用方式吧,首先我们要保证dex2jar已经下载完好,并且解压完毕了。首先,由于dex2jar是基于命令行操作的,所以先打开windows命令窗口,并且将目录切换到dex2jar的加压目录下,因为dex2jar解压目录包含了dex2jar.bat批处理命令以及依附的其他文件,然后将需要反编译的apk文件也一同拷贝到这个dex2jar的解压目录下,执行命令“dex2jar xxx.apk”:
技术分享

如图所示,也许文字解释的不是很明确,看图效果会好点,完成上述工作后,说明反编译好了,会发现解压目录下多了这样的一个jar文件:
技术分享

其实这个jar文件就是dex2jar工具将apk包中的dex文件转换成了jar文件,有了jar文件就好办了,我们打开前面介绍的jd-gui工具,直接将jar文件拖动到jd-gui上面,就可以查看源码了。
技术分享

android-apktool工具的使用

android-apktool可以把AndroidManifest.xml文件和res目录下的xml文件和NinePatch图片反编译到接近原始状态,反编译后还可以重新编译回去

官方下载链接:https://code.google.com/p/android-apktool/

学习使用android-apktool之前,我建议先点如上链接查看一下重点的信息,例如最新版本、使用要求、使用方法等等,讲的很明晰的。由于android-apktool最新版本是2.x了,我们这里也将下载这个版本进行使用。


使用前要求

1,JDK(JRE)版本1.7及以上。
2,aapt命令必须添加在环境变量path中。
3,可能了解一些Android SDK、aapt、smali以及如何使用Google也是对学习很有帮助的。

安装Apktool 2.x(Windows环境)

1,下载Windows脚本命令(apktool.bat)
2,下载apktool 2.x版本
3,重新命名下载到的文件为“apktool.jar”。(有可能某些原因会导致下载到的文件名不是apktool.jar)
4,移动这两个文件(apktool.bat和apktool.jar)到Windows的同一个目录中。(我将其移动到桌面的一个新建文件夹中了)
技术分享
5,检查环境变量中是否包含aapt目录,和JDK版本。

常用命令

命令使用格式为:apktool d [选项] <file.apk>

-f    强制删除目标目录。如果试图使用反编译文件夹已经存在
-m 保持尽可能接近原始文件。防止重建,用于分析
-s   这将防止反编译java源代码。这使APKclasses.dex文件编译期间简单地移动它。如果你只编辑资源。这是推荐快反编译和重建。
经典使用如下:

apktool d -f -m -s abc.apk

更多的命令


使用方法

首先打开Windows命令行窗口,将当前目录切换到“apktool.bat”和“apktool.jar”所在的目录下,然后将需要反编译的apk文件复制到这个目录下,执行命令“apktool d -f -m -s abc.apk”,如下图所示:
技术分享
如图所示,说明反编译好了,然后会发现这个目录下多了一个apk同名的文件夹,该文件夹里包含了apktool反编译得到的所有文件,包括AndroidMinifest.xml和res目录下的所有子文件,以及图片,尤其是Nine Patch图片也被还原出来了。我们可以借助文本工具查看布局文件代码或其他资源代码了。
技术分享

总结:Android反编译常用的三大工具到这里就介绍完了,掌握这个三大工具基本上反编译没有问题了。关于三大工具的详细介绍请参考上面的链接,直接进入官网查看吧,会有很大的帮助的。要讲明的一点,根据我的经验,一是如果我们只想反编译Android APK的Java源代码时,我们只需要使用dex2jar将dex文件转换成jar文件,然后使用jd-gui进行源码解读。二是如果我们需要查看Android的资源文件时,我们就需要使用android-apktool工具进行反编译了,随便android-apktool工具也可以将Java源码反编译成smali文件,关于smali文件的编译又需要学习其他的工具,比较繁琐,不如就直接使用dex2jar好了。
        由于,我国特殊国情,导致这些工具官网不能直接访问,所以我在下面提供了这三大工具的下载地址,我已经上传到我的CSDN资源里了(免积分)。



郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。