APK 文件其实是 zip 格式,但后缀名被修改为 apk,通过 UnZip 览压后,可以看到 Dex 文件,Dex 是 Dalvik VM executes 的全称,即 Android Dalvik 执行程序,并非 Java ME 的字节码而是Dalvik 字节码。
一个 APK 文件结构为:
mete-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权限。