反编译APK方法

【转】Android笔记-反编译APK方法
2011-05-25 14:31
转载自 Edgarcai
最终编辑 Edgarcai
啊菜 写本篇文章的目的是为了总结,而反编译APK的主要目的在于学习,通过反编译,我们可以养眼下一些优秀的Android应用程序代码。
啊菜 在这儿热情提示下:还是尽量不要利用反编译进行汉化或修改,毕竟程序员写个程序不容易啊,多少个奋斗的星夜里才出炉这么个优秀的产品!
网络上有很多反编译android APK的方法,先从反编译的原理讲起:
目前Google Android平台选择Java Dalvik VM的方式编译打包APK的方式是很容易破解和被修改。
首先APK文件的本质就是一个MIME为ZIP的压缩包,我们修改ZIP或RAR后缀名方式就可以看到内部的文件结构,类似 Sun JavaMe的Jar压缩格式一样,不同的是Android上的二进制代码被编译成为Dex的字节码,所有的Java文件最终会编译进DEX文件中,作为托管代码让Android 虚拟机可以识别,同时我们也可以很轻松的进行反编译。所有的类调用、涉及到的方法都在里面体现到,至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些跟踪工具。
开始
反编译之旅
一、
winrar或zip软件打开apk文件
,得到文档结构图
反编译APK方法_第1张图片
二、classes.dex文件解压出来,然后使用工具反编译成.jar文件,再进一步反编译出java文件
1.cmd下进入dex2jar.bat(http://dex2jar.googlecode.com/files/dex2jar-0.0.7.3-SNAPSHOT.zip)所在路径,然后输入“dex2jar.bat XXX”XXX指的是你要反编译的apk中的classes.dex
文件所在路径及名称.
反编译APK方法_第2张图片
比如:
我的
dex2jar.bat路径为D:/Android/apk_decode/dex2jar/dex2jar.bat
,
classes.dex
路径为D:/Android/apk_decode/dex2jar/apk/classes.dex

命令为:
你进入dex2jar.bat路径下后,输入dex2jar.bat apk/classes.dex这样会生成一个jar
文件。
反编译APK方法_第3张图片
2.用WinRAR软件解压出jar文件中的class文件,然后用jadDJ Java Decompiler反编译工具将.class文件反编译成.java文件

3.不解压出jar中的class文件,直接用JD GUI工具打开jar文件

反编译APK方法_第4张图片


4.步骤23选择其中一个即可,建议用步骤2,步骤3可能出现乱码

三、上面操作只能得到class文件,下面利用Google提供的apktool得到xml文件

1.下载apktool,可以去Google官方下载apktool-1.3.2.tar.bz2apktool-install-windows-2.2_r01-3.zip.解压apktool-install-windows.zip到任意文件夹(例如D盘根目录),解压apktool.jarapktool-install-windows同目录下。

2. Win+R运行CMD,用cd命令转到apktool-install-windows所在文件夹,输入apktool看看
会列出一些帮助的话就成功了(解释
d为加压第一个路径为你的apk所在的位置。第二个是要输出的位置)

apktool d XXX.apk ABC反编译XXX.apk到文件夹ABC

反编译APK方法_第5张图片


3.在解压后的文件夹中可以得到apkxml配置文件

四、将中得到的class文件和中得到的xml文件组合成一个android工程,即可得到完整的apk源码。
转载请注明来源:
啊菜's BLOGhttp://hi.baidu.com/edgarcai

专业名词解释:
APK
APK是
AndroidPackage的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通过将APK文件直接传到Android模拟器或Android手机中执行即可安装。
apk文件和sis一样最终把android sdk编译的工程打包成一个安装程序文件格式为apk。 APK文件其实是zip格式,但后缀名被修改为apk,通过UnZip解压后,可以看到Dex文件,Dex是Dalvik VM executes的全称,即Android Dalvik执行程序,并非Java ME的字节码而是Dalvik字节码。一个APK文件结构为: META-INF/ Jar文件中常可以看到 res/ 存放资源文件的目录 AndroidManifest.xml 程序全局配置文件 classes.dex Dalvik字节码 resources.arsc 编译后的二进制资源文件总结下我们发现Android在运行一个程序时首先需要UnZip,然后类似Symbian那样直接,和Windows Mobile中的PE文件有区别,这样做对于程序的保密性和可靠性不是很高,通过dexdump命令可以反编译,但这样做符合发展规律,微软的 Windows Gadgets或者说WPF也采用了这种构架方式。在Android平台中dalvik vm的执行文件被打包为apk格式,最终运行时加载器会解压然后获取编译后的androidmanifest.xml文件中的permission分支相关的安全访问,但仍然存在很多安全限制,如果你将apk文件传到/system/app文件夹下会发现执行是不受限制的。最终我们平时安装的文件可能不是这个文件夹,而在android rom中系统的apk文件默认会放入这个文件夹,它们拥有着root权限。

原文地址:http://hi.baidu.com/spiderjun/blog/item/ae795a5994f0233d2934f02d.html

你可能感兴趣的:(apk)