这里拿testapp.apk为例,如下图所示,左图为直接解压apk得到的文件,右图为apktool反编译得到的文件(反编译的使用在下一篇重点介绍)
图1 解压apk和反编译apk得到的文件目录对比
一.直接解压apk
将apk文件当做zip文件,可用winrar或好压之类工具直接打开。
AndroidManifest.xml是每一个应用必须定义和包含的,它描述了应用的名字、版本、权限、引用的库文件等信息。
META-INF目录下存放的是签名信息,用来保证apk包的完整性和系统的安全。在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。同样在Android平台安装apk时,应用管理器会对按照同样的算法对包里的文件做校验,如果校验结果与META-INF下的内容不一致,系统就不会安装这个apk。这就保证了apk包里的文件不能被随意替换。
classes.dex是java源码编译生成的java字节码文件。
res目录存放资源文件。
resource.arsc是编译后的二进制资源文件。
二.反编译apk
smali目录下存放了程序所有反汇编代码。
res目录则是程序中所有的资源文件,这些目录的子目录和文件与开发时的源码目录结构是一致的。跟直接解压apk得到的文件并不完全相同,该目录还包含了加密的resource.arsc被反编译出来的内容。
参考文献:
1.Android篡改apk文件的可行性分析:http://blog.csdn.net/zengyangtech/article/details/5735071
2.《Android软件安全与逆向分析》,作者:丰生强