视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Androidapk反编译
2025-09-29 02:24:23 责编:小OO
文档
Android笔记-反编译APK方法 

       啊菜写本篇文章的目的是为了总结,而反编译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文件,得到文档结构图

        二、将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文件所在路径及名称.

        比如:

         我的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文件。

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

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

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

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

1. 下载apktool,可以去Google官方下载apktool-1.3.2.tar.bz2和apktool-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

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

       四、将“二”中得到的class文件和“三”中得到的xml文件组合成一个android工程,即可得到完整的apk源码。

      

专业名词解释:

        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权限。下载本文

显示全文
专题