APK--structure

在遇到QQ上传播的3.99mb的恶搞apk之后,算是分析的第一个正儿八经的小程序,趁此学习一下基本的apk的文件结构。

基本结构

apk实质上也是一个压缩包,解压之后得到如下文件:

image-20220304195529813

  • lib:是动态库目录 一般存放so文件
  • META-INF目录:签名文件目录,只存在于签名后的apk文件中
  • res目录:资源库目录 ,一般存放xml布局文件和图标
  • AndroidMainifest.xml :配置清单(二进制格式),每个应用程序都必须定义和包含的全局配置文件,它描述了应用程序的名称、版本、权限、引用的库文件等信息。如果动调java层的话会需要。
  • classes.dex:安卓系统上的可执行文件,也是我们逆向的主要的文件,源码都被编译在里面,如有多个是因为每个dex里最多存放65535个方法,而项目的方法数超出了这个数量,所以被分成多个保存
  • resources.arsc:资源索引文件,包含语言包,汉化的话一般是反编译这个文件
  • assets :资源目录,一般存放图片

lib

1.在该目录下会存放着一些so文件,apk为了安全,会将一些关键代码放到底层而不是java层,该层也是最容易被加密的,有时里会有不同的so文件,可能是同一文件对应的不同架构的平台,也可能是不同的so文件

2.市场上使用的移动终端大多是基于ARM或者ARM-V7a架构的,X86和MIPS架构的移动智能终端比较少,所以有些应用程序lib目录下只包含armeabi目录或者armeabi-v7a目录