什么是APK
APK是Android Package 的缩写,即Android安装包。APK是类似Symbian Sis或Sisx的文件格式。通:过将APK文件直接传到Android模拟器或Android手机中执行即可安装。APK文件和Sis-样最终被androidsdk编译的工具打包成一-个为apk的安装程序文件格式, apk文件其实是zip格式,只是后缀名被修改为apk
apk的文件结构

assets目录
此目录包含应用程序资产, -般存放的是不会被编译器处理的文件,一般是一一些资源性质的文件或配置文件, asset目录和res目录都可以存放资源,只是前者不被编译器处理,后者会被编译器再转化一次。

META-INF/
存放的是签名验证文件,用来保证apk包的完整性和系统的安全性,比如在eclipse编译生成一个apk包时,会对所有要打包的文件做一个校验计算,并把计算结果放在META-INF目录下。这就保证了apk文件里的文件不能被随意替换。比如拿到一个APK包后,如果想要替换里面的一幅图片,一段代码,或-段版权信息,想直接解压缩,替换再重新打包,基本是不可能的。如此一来就给病毒感染和恶意修改增加了难度,有利于保护系统的安全,一般会有以下三个文件
➢MANIFEST.MF: 清单文件
➢CERT.RSA: 记录应用程序的证书信息
➢CERT.SF: 记录资源列表和其SHA-1摘要信息,存放的信息和MANIFEST.MF中文件信息基本一致,第一行的值是MANIFEST.Mf文件SHA-1使用BASE64的值

libs/
此目录包含针对特定处理器软件层的编译代码
➢armeabi :针对所有基于ARM处理器的编译代码
➢armeabi-v7a :针对所有基于ARMv7及以上处理器的编译代码
➢arm64-v8a :针对所有基于ARMv8 arm64及以上处理器的编译代码➢x86 :针对所有基于x86处理器的编译代码
➢x86 64 :针对所有基于x86 64位处理器的编译代码
➢mips :针对所有基于MIPS处理器的编译代码

res/
此目录包含未被编译进resources.arsc文件的资源
➢layout开头的目录存放的都是界面布局的xmI文件
➢drawable开头的目录存放的是图片信息
➢color开头的目录存放的是颜色列表资源的xml文件
➢anim开头的目录存放的是动画对象。
➢mipmap开头的目录存放的是Android应用的图标

AndroidManifest.xml
用于描述该应用程序的名字、版本号、所需权限、注册的服务、链接的其他应用程序
➢声明了包名等信息
➢声明了应用权限和测试的信息➢声明了程序的入口
➢声明了四大组件以及调用信息等➢逆向中需要重点关注的文件之一

classes.dex
它是Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据,由于dalvik是一种针对嵌入式设备而特殊设计的java虚拟机,所以dex文件与标准的class文件在结构设计上有着本质的区别。同样也是逆向中关注的重要文件之一。

resources.arsc
App资源能根据配置的变化,索引|到相应的资源都要依赖它。例如Android设备语言,屏幕设备尺寸不同时, app通过同样的ID但却能找到不同的资源进行显示。同样是逆向中重要文件之一。
