Android应用软件反编译还原工程全解打赏

android
众所周知,Android应用层软件是使用Java语言开发的,而Android的安装文件*.apk则是将Java编译后的*.class文件打包成*.Jar后再打包classes.dex文件,最后打包成*.apk发布。找到封装步骤,想反编译应该不难。这里介绍Windows环境下进行反编译的全过程。

说明:反编译不是为了破解,而是为了更好的学习,通过反编译可以更好的借鉴成熟软件的可取之处。

反编译Android应用来还原Android工程,其实很简单,这里分为两个步骤。

第一步:获取Java文件

首先需要两个工具软件,分别为dex2jar和JD-GUI,下载地址如下:
dex2jar:http://dex2jar.googlecode.com/files/dex2jar-0.0.9.9.zip
JD-GUI:http://innlab.googlecode.com/files/jd-gui-0.3.3.windows.zip
前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。

工具准备妥当,保证Java环境已经配置好,然后使用解压工具,解压apk文件,可以直接修改扩展名为.zip,然后解压,获得classes.dex文件,这个就是打包后的class文件。

再使用下载好的dex2jar,为了方便,将classes.dex文件复制到dex2jar文件夹,使用Windows的命令提示符切换到dex2jar所在目录,执行命令

dex2jar.bat classes.dex

会生成classes.dex.dex2jar.jar文件,当然,如果有需要,你也可以将classes.dex.dex2jar.jar再次转为class文件或java文件(可使用Jad,与普通java反编译一样,这里不再赘述),生成后文件如图所示。
dex2jar
这时候我们需要上面提及的JD-GUI来查看jar文件了,JD-GUI界面是Windows窗口模式,直接选择路径打开classes.dex.dex2jar.jar文件即可查看原java源代码,如图。
JD-GUI
HelloAndroid源码(编译前的apk源码对照)如下。
helloandroid

第二步:获取资源文件、xml、smali等

一样很简单,因为Android的图片等资源文件都做了二进制压缩,直接解压的xml以及图片文件都是乱码,为了得到资源,我们需要一个工具,名为apktool,下载地址如下:
apktool需要两个文件:
http://android-apktool.googlecode.com/files/apktool-install-windows-r04-brut1.tar.bz2
http://android-apktool.googlecode.com/files/apktool1.4.3.tar.bz2
为便于操作,我们需要三个文件同时放到同一目录下,分别为apktool.jar、apktool.bat、aapt.exe。
准备妥当,即可直接反编译apk文件。为方便操作,将要进行反编译的apk文件与以上列出的三个文件放置同一文件夹下,打开命令提示符,输入命令即可自动进行反编译,如图所示。
apktool
其中,所用命令如下。

apktool d MusicPlayer.apk MusicPlayer

apktool是命令,d是反编译(如果是做软件汉化等,可以这里可以使用b来重新打包,不在本文讨论范围内,故不做过多解释),MusicPlayer.apk和MusicPlayer分别为要反编译的文件名和反编译后资源存放的文件夹名,前者需要跟文件一致,后者可任意命名(最好使用英文)。
下面是得到资源的文件夹,实际上可能不止这些,但都大同小异,其中res文件是资源文件,smali是程序对应的smali文件,类似于class文件(关于smali这里也不再多说,有兴趣的朋友可以自己了解)。xml文件就是对应的xml配置。这样,再进行些简单的复制粘贴,整个项目工程就基本还原了。
apktoolfd

补充

有网友已经把以上两个工具集成到一个批处理安装包,喜欢简单一点的朋友可以下载“APK反编译工具包v1.6.rar”
地址是:http://innlab.googlecode.com/files/APK反编译工具包v1.6.rar
下载后运行界面如下:
apktoolspack
按任意键安装即可,之后使用的话直接在需要反编译的文件上右击选择相应功能即可(关于工具的详细用法见工具的说明文档,这里只做推荐)。

Android应用软件反编译还原工程全解
文章《Android应用软件反编译还原工程全解》二维码
  • 微信打赏
  • 支付宝打赏