安卓逆向之APK的基本结构

APK:Android application package
一般包含以下内容:
[文件夹]assets:静态资源文件
存放未经编译的资源文件
一般是Apk中的静态文件,配置文件,原始数据及其他不常改变的文件,不会被解压缩,访问速度较快但空间占用较大
[文件夹]lib:库文件
存放运行App所需要的动态链接库(*.so)
内部分文件夹存放用于适配不同系统及处理器的版本
关于库文件:安卓系统中库文件分为以下两种
1.SharedLibraries:共享库文件
存放于系统目录中,为可供多个应用程序使用的库
2.NativeLibraries:本地库文件
存放于Apk中的lib文件夹中(APP安装后会被放到私有目录中),为应用程序特有的库文件,不会被其他应用程序使用
[文件夹]META-INF:签名文件
存放签名证书,App安装时作为校验的凭据(防止Apk被篡改)以及作为Apk著作权和所有权的声明
在打包Apk文件的时候会自动生成这些文件,若更改包内文件,签名会更改
CERT.RSA
CERT.SF
#App签名信息,安装时会检查这两个文件
MANIFEST.MF
#存放应用程序所有文件的清单信息
...
[文件夹]res:编译资源文件
存放编译后的资源文件
drawable
#存放图片资源文件(位图,矢量图)
layout
#存放布局文件(描述应用程序界面结构)
values
#存放值资源文件(存放App中使用的常量值和颜色信息)
...
[文件]AndroidManifest.xml:配置清单文件
描述应用程序的清单信息(包名,应用名,权限,安卓四大组件,版本等信息)
声明应用程序的主要组件-安卓四大组件(活动Activity,服务Service,广播接收器BroadcastReceiver等)
打包apk时该文件自动生成
[文件]classes.dex:核心代码文件
为Dalvik虚拟机的可执行文件,内部存放java字节码,可反编译为smail代码
因单个dex文件有大小限制,较大的apk会存在多个dex文件,运行时合并为一个dex文件运行
安装Apk后会被解压到私有目录中,然后被Dalvik虚拟机加载并运行
优点:可以使得应用程序的下载包变小
缺点:访问速度略慢于共享库文件
打包apk时该文件自动生成
[文件]resources.arsc:资源映射文件
辅助文件,存放应用程序的资源表
(资源表:存放应用程序的资源ID和类型的映射关系)
优点:可以使应用程序的资源文件变小
缺点:访问速度略慢于文本文件