详解android应用程序的反编译
来源:互联网 发布:移动硬盘与mac不兼容 编辑:程序博客网 时间:2024/05/21 11:31
毕业设计不小心选了智能手机开发方向,而平台选择了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=
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。如图:
其实还是很羡慕那些自己写一堆代码的人,昨天史玉柱在自己的微博上说:
20年前创业初期,我是本公司的唯一研发人员(公司总人数才4人),编写文字处理软件,我一人写了50万行代码,关键模块都是使用极枯燥的汇编语言。公司很快就赚了数千万元,但那时我似乎并没想买豪宅买宝马,和现在一些85后研发人员有区别。究竟是时代不同了,还是因我是老板呢?思考中。。。
可能这辈子我也写不了50万行的代码,甚至十分之一都不太可能了。业内有句话说:珍爱生命,远离IT。
出自:http://www.lvleaf.com/windson/?p=977
Android APK反编译得到Java源代码和资源文件
发现很多人都在关心apk的反编译,上传一个可视化的工具吧,原理和下面说的差不多,就是封装了一下。点我下载Android反编译工具
另外,作为应用开发者,肯定不希望自己的代码被反编译的,另外写了篇文章,讲述如何通过混淆代码放在反编译:《如何防止Android应用被反编译》
这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程。在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件。
一.反编译Apk得到Java源代码
首先要下载两个工具:dex2jar和JD-GUI,前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码。以下是下载地址:dex2jar:http://laichao.googlecode.com/files/dex2jar-0.0.7-SNAPSHOT.zip JD-GUI:http://laichao.googlecode.com/files/jdgui.zip
具体步骤:
- 首先将apk文件,将后缀改为zip,解压,得到其中的classes.dex,它就是java文件编译再通过dx工具打包而成的;
- 解压下载的dex2jar,将classes.dex复制到dex2jar.bat所在目录。在命令行下定位到dex2jar.bat所在目录,运行
dex2jar.bat classes.dex
生成classes.dex.dex2jar.jar
- 运行JD-GUI,打开上面生成的jar包,即可看到源代码了。
二.反编译apk生成程序的源代码和图片、XML配置、语言资源等文件
如果是只是汉化软件,这将特别有用。首先还是下载工具,这次用到的是apktool,下载地址:
http://code.google.com/p/android-apktool/,apktool-1.0.0.tar.bz2和apktool-install-windows-2.1_r01-1.zip两个包都要下。
具体步骤:
- 将下载的两个包解压到同一个文件夹下,应该会有三个文件:aapt.exe,apktool.bat,apktool.jar;
- 在命令行下定位到apktool.bat文件夹,输入以下命令:
apktool d C:\***.apk C:\***文件夹
命令行解释:apktool d [要反编译的apk文件 ] [输出文件夹],特别注意:你要反编译的文件一定要放在C盘的根目录里;
- 将反编译完的文件重新打包成apk,很简单,输入apktool b c:\***文件夹(你编译出来文件夹)即可。
- 出自:http://www.maxhis.info/androiding/android-apk-decompile/
Android反编译方法
反编译主要的目的在于学习,利用反编译进行相关的汉化或修改,还是尽量不要吧,毕竟人家写个程序不容易啊!参考内容如下。
AD:
对于软件开发人员来说,保护代码安全也是比较重要的因素之一,不过目前来说Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK文件其实就是一个MIME为ZIP的压缩包,我们修改ZIP后缀名方式可以看到内部的文件结构,类似Sun JavaMe的Jar压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。Google最然在Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。
具体方法如下:
一:所需工具(点击各自连接进入下载页面):
AXMLPrinter2.jar
dex2jar:
查看Jar包的GUI工具
二,开始行动
1.用AXMLPrinter2.jar查看apk中的布局xml文件:
将apk文件(为了方便起见放到tools目录里)用WinRAR等工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦)
打开main.xml文件,内容如下(一堆天文):
这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令:
java -jar AXMLPrinter2.jar main.xml > main.txt. (如下图所示)
2:通过dex2jar工具进行反编译。
把apk中的class.dex拷贝到dex2jar.bat所在目录。运行dex2jar.bat class.dex,将会在其文件夹下生成classes.dex.dex2jar.jar。
3、可以将jar文件重新命名后拷贝到GUI文件夹下,运行JD-GUI工具(它是绿色无须安装的),打开上面的jar文件,即可看到源代码。
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="vertical"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <WebView
- android:id="@+id/apk_web"
- android:layout_height="wrap_content"
- android:layout_width="fill_parent"
- />
- </LinearLayout>
- <?xml version="1.0" encoding="utf-8"?>
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:orientation="1"
- android:layout_width="-1"
- android:layout_height="-1"
- >
- <WebView
- android:id="@7F050000"
- android:layout_width="-1"
- android:layout_height="-2"
- >
- </WebView>
- </LinearLayout>
出自 :http://mobile.51cto.com/android-265964.htm
- 详解android应用程序的反编译
- Android-APK反编译的详解
- 如何反编译 Android 应用程序
- Android应用程序反编译
- Android应用程序反编译
- Android应用程序反编译
- Android应用程序反编译
- Android应用程序破解(反编译)
- Android APK反编译详解
- Android APK反编译详解
- Android APK反编译详解
- Android APK反编译详解
- Android APK反编译详解
- Android APK反编译详解
- android apk 反编译详解
- Android APK反编译详解
- Android APK反编译详解
- Android APK反编译详解
- 真戏假做
- TableCellRenderer的一个例子
- java 调用 .net webservic
- restlet overview 1
- POJ 1426
- 详解android应用程序的反编译
- restlet overview 2
- NumberFormat 类
- restlet getting start 1
- 在eclipse中引入jdom
- 为CSDN添加友情链接
- do...while(0)的妙用
- Windows 8 VS Windows 7:开发团队对比
- 【转】Lifehacker 2011 最佳Android应用软件