详解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。如图: