反编译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/downloads/jdeclipse_update_site.zip

插件在线安装地址:http://jd.benow.ca/jd-eclipse/update

我们这里推荐使用在线安装插件的方法。具体步骤如下:点击Eclipse上的“Help”——>“Install New Software”——>"Add",在弹出的窗口中填入上面插件在线安装的链接:

接下来一直“Next”下去。最后需要同意一个协议条款:

最后安装完毕之后,重启一下Eclipse,这时就可以查看源码了。

是不是很方便啊,试试吧!

dex2jar工具的使用

下载地址:https://code.google.com/p/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源代码。这使APK的classes.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资源里了(免积分)。

JD-GUI下载

dex2jar下载

android-apktool下载

时间: 2024-12-25 01:16:43

反编译Android应用的相关文章

反编译Android APK及防止APK程序被反编译

原文出处 反编译Android APK及防止APK程序被反编译 怎么逆向工程对Android Apk 进行反编译 google Android开发是开源的,开发过程中有些时候会遇到一些功能,自己不知道该怎么做,然而别的软件里面已经有了,这个时候可以采用反编译的方式,解开其他的程序,来了解一些它 的做法,同时啊,还可以借鉴别人的软件结构,资源文件:作为一个开发者,你可能会很想知道这些效果界面是怎么去实现的,这时,你便可以对改应用的APK进行反编译查看.此方式主要目的是为了促进开发者学习,借鉴好的代

实例详解:反编译Android APK,修改字节码后再回编译成APK

本文详细介绍了如何反编译一个未被混淆过的Android APK,修改smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk无论输入什么样的用户名和密码都可以成功进入到第二个Activity. 有时难免要反编译一个APK,修改其中的若干关键判断点,然后再回编译成一个全新的可用的apk,这完全是可实现的.若要完成上述工作,需要以下工具,杂家后面会把下载链接也附上.这些软件截止本文发布时,经过杂家确认都是最新的版本. 1.APK-Multi-Toolv1.0.11.zip 用它

反编译android应用,降低权限去广告及重新签名

功能:反编译apk降低权限及重新签名 场景:很多软件,申请了一些可能会导致付费(如,发短信,呼叫号码)或者泄漏隐私(如:读取通讯录)的权限,让人很不放心.比如:飞信.墨迹天气.iReader等都在此列.为了让自己能放心使用,需要做一些破解工作,减少该应用程序的权限,限制其操作. 工具:apktool-install-windows-2.2_r01-3.tar.bz2 (http://code.google.com/p/android-apktool/downloads/list) 工具:(JDK

利用开源项目jadx反编译Android应用

利用开源项目jadx反编译Android应用 利用Github开源项目jadx可以直接对 .dex, .apk, .jar, .class 类型的文件进行直接反编译 对比之前 apktool(解包apk) + dex2jar(将.dex转换成.jar) + jd-gui (查看.jar文件)反编译三件套, jadx的优点在于: 1. 可以一行命令直接反编译恢复出.java文件 命令: jadx -d out calc.apk 需要先把apk拷贝到bin目录下, 如图:  2. 可以一行命令直接以

Android - 使用JD-GUI反编译Android代码

使用JD-GUI反编译Android代码 本文地址: http://blog.csdn.net/caroline_wendy Android程序出现Bug时,需要根据Bug寻找问题出错的地方; 需要使用工具dex2jar.sh和JD-GUI,并把dex2jar.sh添加进系统路径; 把需要反编译的apk包修改为zip文件, 解压, 找到".dex"文件, "classes.dex"; 使用命令: sh dex2jar.sh ~/Desktop/ChunyuDocto

MAC上反编译android apk---apktool, dex2jar, jd-jui安装使用(含手动签名)

前文 介绍了在Windows平台利用强大的APK-Multi-Tool进行反编译apk,修改smali源码后再回编译成apk的流程,最近受人之托,破解个apk,所幸的是所用到的这三个软件都是跨平台的,mac上也妥妥的.这里记录下在mac上所用的东西和流程. 总共需要三个软件,为了便于找到最新的版本,把官网也放后面: Apktool:http://ibotpeaches.github.io/Apktool/install/ 最新版本2.0.1 dex2jar: https://github.com

反编译Android的apk包得到源码(使用工具:dex2jar和jd-gui)

1. 先从 http://download.csdn.net/detail/dingyuming1991/9618125 下载反编译工具dex2jar和jd-gui(当然也可以google搜索下载): 2. 将要反编译的apk包改扩展名为zip(apk包实则为zip压缩包),解压zip文件: 3. 在解压出来的文件夹中会有个classes.dex文件(程序的二进制文件),在下载dex2jar和jd-gui中找到dex2jar程序,在cmd窗 口中运行  dex2jar classes.dex ,

『原』在Linux下反编译Android .apk文件 使用apktool dex2jar JD-eclipse

一.使用apktool 将 apk反编译生成程序的源代码和图片.XML配置.语言资源等文件 具体步骤: (1)下载反编译工具包:apktool 官方的打不开 http://apktool.shoujifans.com/2014/12/21.html 里有网盘下载 需要下载下边两个文件 apktool1.5.2.tar.bz2 apktool-install-linux-r05-ibot.tar.bz2 (2)将下载好的两个包解压到“同一个”文件夹apktool里面. 注意是同一个 (3)在命令行

实例具体解释:反编译Android APK,改动字节码后再回编译成APK

本文具体介绍了怎样反编译一个未被混淆过的Android APK,改动smali字节码后,再回编译成APK并更新签名,使之可正常安装.破译后的apk不管输入什么样的username和password都能够成功进入到第二个Activity. 有时难免要反编译一个APK.改动当中的若干关键推断点,然后再回编译成一个全新的可用的apk,这全然是可实现的. 若要完毕上述工作,须要以下工具,杂家后面会把下载链接也附上.这些软件截止本文公布时,经过杂家确认都是最新的版本号. 1.APK-Multi-Toolv