安卓逆向002之APK的信息

APK文件结构

先用一些压缩软件打开任意一个apk,如图:

在这里插入图片描述

Assets中的文件资源是不会变的静态文件,如图片资源文件、JSON配置文件等等。


Res也是存放资源的文件夹,但是res中的资源都是程序运行所需要的一些文件,
与代码以及程序运行相关。即assets中,我们可以随意创建文件夹、文件等等,
但是res文件夹的内容尽量不要动


Lib文件夹代表的是当前app所用的到的so文件,so文件就是利用底层c,
c++代码实现的一些逻辑(依赖库)。即一个apk的代码不止用到java也会用到c与c++。


Meta-inf文件夹就是证书签名文件,主要的作用是校验apk内容有没有被修改。


AndroidManifest.xml是整个程序的配置文件,简单的理解为程序的自我介绍,
包括当前apk需要一些什么权限与开发者签名等等。可以改动其内容,
但是建议不要修改其文件名。



Classes.dex是应用程序的可执行文件,有的apk内会有多个dex文件,
是因为当前的方法数超过65535进行了分包处理。假如未超过,
则只有一个dex文件。Android的所有代码都集中在此。
我们可以通过反编译工具将其转化为jar包,在通过相关工具(如jd-gui)查看其代码。


Resources.arsc是资源索引表,用来描述具有ID值的资源的配置信息。

APK打包流程

在这里插入图片描述
第一层,

基本的资源(AAPT处理)+APP源码+DIDL文件(java的一个接口处理)

最终通过java的编译器编译都成为了java(即class文件)

第二层,

Java的.class字节码与第三方库都搞到一起放到dex(.dex文件)了

第三层,

Dex文件  +  其他资源(assert文件夹内静态资源) +  最开始的一些资源(Res文件夹中的)

通过apk打包器生成一个原生的apk(安装包)。
Assert可以看作是“动态的”即自己可以随意增文件/夹
		
但是res(包含java代码的)是“静态的”,最好不要动。

此时的安装包还差一个签名,可以简单的理解为许可证。

第四层,

将最初的apk与Debug(签名需要支持的一个jar包(内涵公钥与私钥))

都传到Jarsigner中生成一个签名后的apk。

第五层,

使用zipalign对签名后的apk进行处理

主要的过程是将一些资源进行压缩对齐,对齐方便硬件打开的加载速度。

APK安装流程

点击apk会调起一个界面,询问是否安装,这个过程实际是调用了一个组件
~Copy Apk到/data/app/包名下,

~然后通过资源管理器去解析apk之中的资源文件。
	
	在解析AndroidManifest.xml

~在/data/data/下创建一个存放应用数据的一个文件夹
	
	将上边解析得到的数据存放至此

~把dex(源码)进行优化后存储到/data/dalvik-cache/中
	
	Dex文件是dalvik虚拟机的可执行文件,
	
	其大小约为原始apk文件大小的四分之一

~将AndroidManifest.xml解析出四大组件信息注册到手机

~最后发送一条广播。

总体过程:

Copy APK,解析Apk并将数据存放,安装AndroidManifest.xml获取其安装信息。

同时会分配Linux的用户id以及用户组的ID,以获取到在系统中运行的一些权限。

小结:

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43970718/article/details/119024302