反编译APK方法

反编译APK方法【转】 Android笔记-反编译APK方法2011-05-2514:31转载自 Edgarcai最终编辑 Edgarcai      啊菜写本篇文章的目的是为了总结,而反编译APK的主要目的在于学习,通过反编译,我们可以养眼下一些优秀的Android应用程序代码。       啊菜在这儿热情提示下:还是尽量不要利用反编译进行汉化或修改,毕竟程序员写个程

【转】 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方法

        二、将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方法

        比如:
         我的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方法

       2.用WinRAR软件解压出jar文件中的class文件,然后用jad或DJ Java Decompiler反编译工具将.class文件反编译成.java文件

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

反编译APK方法


4.步骤2和3选择其中一个即可,建议用步骤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.jar到apktool-install-windows同目录下。

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

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

反编译APK方法


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

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

专业名词解释:
        APK
        APK是
Android Package的缩写,即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

 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/35603.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注