详解android应用程序的反编译

详解android应用程序的反编译

毕业设计不小心选了智能手机开发方向,而平台选择了 android,所以最近自学了不少android程序开发的知识。但是作为一个懒散不堪,容易半途而废的人,android所自带的体系还是有点庞大, 想要以此开发一个属于自己的独一无二的应用,难度对我这个小菜鸟来说实在大。所以难免生起“他山之石,可以攻玉”的想法。

毕设带队的老师说:代码都自己写的程序员不是好程序员。利用别人的代码,从中再修改一番变成自己的,这才是好的程序员。我不知道这话有没有道理,反正是说到了我的心坎了。懒人自有懒人的活法,天才是少数的,而懒惰的人是多数的。自然,我是多数人。

但是要修改别人的代码必须晓得他的代码,所以我们需要对android应用程序进行反编译。所幸andorid是个开放的平台,反编译比通常程序简单的多,下面就说说这个简单的过程。

基础知识

android 上安装的应用程序后缀都是apk(Android application package),每个要安装到android平台的应用都要被编译打包为一个单独的文件,后缀名为.apk。而实际上这个apk格式的文件是一种变相的 zip压缩包,你可以使用winrar打开看到里面的文件的结构。通常你可以看到这些内容:

|– AndroidManifest.xml
|– META-INF
|   |– CERT.RSA
|   |– CERT.SF
|   |– MANIFEST.MF
|– classes.dex
|– res
|   |– drawable
|   |   `– icon.png
|   |– layout
|       `– main.xml
|– resources.arsc

各个文件内容涵义不赘述了,可以看这篇文章http://www.ophonesdn.com/article/show/38

我们通常需要反编译出的有两部分:classes.dex和main.xml。一个是java经过google自制虚拟机dalvik编译出的字节码,一个是布局文件。大点的程序布局文件不止一个,我们这里只说只有一个的,其他类似。

需要的工具

1、把dex文件反编译为jar文件的工具。(dex2jar)
2、把jar反编译为java的工具。(JD-GUI)
3、AXMLPrinter2
三者下载链接分别是:
http://code.google.com/p/dex2jar/
http://java.decompiler.free.fr/?q=jdgui
http://code.google.com/p/android4me/downloads/detail?name=AXMLPrinter2.zip&can=2&q=(这个文件貌似已经不可用,有兴趣的童鞋可以去csdn下载)

XML文件的反编译

apk文件中的xml文件都是经过压缩的,所以如果直接打开会看到一些乱码,所以需要工具AXMLPrinter2。

安装完java环境,然后cmd进入你把apk文件解压到的文件目录内,使用命令(注意,AXMLPrinter2.jar文件也要):

java -jar AXMLPrinter2.jar main.xml

成功后会在cmd里出现xml反编译出的文件

classes.dex文件反编译

Android 模拟器中提供了一个dex文件的反编译工具,dexdump。用法为首先启动Android模拟器, 把要查看的dex文件用adb push上传的模拟器中,然后通过adb shell登录,找到要查看的dex文件,执行dexdump xxx.dex。但是这样得到的结果,其可读性是极差的。

所以我们使用了两个工具dex2jar和JD-GUI。

反编译的步骤:

1、从APK中提取classes.dex文件,对APK文件解压即可得到。 将其放到dex2jar的目录下,打开cmd,运行dex2jar.bat classes.dex,生成classes.dex.dex2jar.jar。

2、运行JD-GUI工具,打开上面的jar文件,即可看到源代码。

在JD-GUI上可以看到一堆a b c d ……的树形结构,这些都不是,真正要看的是activity。如图:

5356270065_997c64d080.jpg (500×334)

posted @ 2011-11-22 13:57  tokeep  阅读(326)  评论(0编辑  收藏  举报