详解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)

更多相关文章

  1. 关于获取Android中文件内容有感
  2. iOS开发-Android 录制的mp4视频文件在IOS中无法播放问题
  3. Android代码混淆
  4. Android通过HttpURLConnection上传多个文件至服务器 - 流传输
  5. Android源代码下载过程及遇到的问题
  6. 史上最全!最经典!最无私的Android资料(书籍+代码)分享
  7. android计时demo源代码
  8. Android写文件到SDCard的一般过程和代码

随机推荐

  1. Android中的共享设置(SharedPreferences)
  2. Android:res之shape制作圆角、虚线、渐变
  3. Android 建造者(Builder)模式
  4. MTK Android Driver:PMIC
  5. Android 远程监控摄像头 移动端+PC端 旧
  6. Android : Android Studio 3.4更新至grad
  7. android:clipChildren属性的分析——是否
  8. ArcGIS Runtime SDK for Android 100.x系
  9. Android studio gradle 无法获取 pom文件
  10. Android 的布局