Android - 文件系统与Android11 分区存储

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android - 文件系统与Android11 分区存储相关的知识,希望对你有一定的参考价值。

参考技术A

android文件系统分为 内部存储(internal storage) 外部存储(external storage)

1.1 用一个表格来直观对比一下两者:

1.2 应用的私有路径

应用在安装之后,系统会自动在内部存储和外部存储,分别建立应用的私有存储区域。

内部存储 : data/user/0/packageName
外部存储 : storage/emulated/0/android/data/packageName

当应用卸载或者清除数据后,该区域文件会被删除。

1.3 内外部存储图解

Android 10版本中,Google推出 分区存储 (scoped storage)的功能。

背景
分区存储功能是针对内置的外部存储来说的,很多应用喜欢在外部存储的根目录创建自己的文件夹,比如:storage/emulated/0/***

这样做的好处:1. 当不断向该目录存储时,应用自己的容量不会变化; 2. 当应用卸载时,该目录下文件不会被删除,可用于保存一些可持久性的文件。

但是也有坏处: 1. 对用户来说,会有很多垃圾文件存在于手机中;2. 只要获取到Read 和 Write权限,就可以随意访问外部存储的任何目录,信息安全存在隐患。

分区存储

除了应用的私有目录和公共目录,其他位置都称为 旧版存储位置 ,我们需要将旧版存储位置的数据迁移到能兼容分区存储的位置。

Android 逆向Android 逆向基本概念 ( 软件运行时内存结构 | 文件与内存之间的联系 )





一、Android 软件运行时内存结构



Android 软件运行时内存结构 :

  • 硬件层 : 内存中 , 硬件层处于最底层 , 映射成一些文件 ;
  • 硬件驱动层 : 该层是 硬件层 与 操作系统的 纽带 , 一般与 内核 进行交互 ;
  • 内核层 : 可调用的最底层的层级 , 可通过 系统调用 API 进行相关操作 , 如 文件处理 , 内存处理 ; 系统调用的本质就是调用内核中的一些接口 ;
  • 应用支持层 : 系统库 , 标准库 , libc , opencv 等系统自带的函数库 , 都是在该层 ; 用户一般无法操作该层 , 如果用户自定义一个库 , 放在应用支持层 , 需要 root / 越狱 等获取最高权限的操作 ;
  • 原生接口层 : 用户自定义的 Java 与 C / C++ 交互的接口 , 一般用于 图形图像 / 音视频 / 底层调用 / 网络通信 等功能 ;
  • Java 应用层 : 用户开发的 Java 程序 , 一般用于 UI 界面展示 , 用户交互操作 ;




二、Android 文件与内存之间的联系



不管运行的 APK / EXE 等程序 , 这些可执行程序中的文件 与 进程的内存中的数据是有一定的关联的 ;

只有熟悉 文件 与 内存数据之间的关联 , 才可以进行一些修改 ;


内存中的区域 :

  • 中断保留区域 : 一般情况下 0 \\rm 0 0 ~ 0 x 8000 \\rm0x8000 0x8000 地址 , 进程内应用层没有访问权限 ; 读写都会引起崩溃 ; 这是为内核层保留的区域 ; 每个进程都有 1 1 1 个中断保留区域 ;
  • 应用包映射区域 : APK 安装文件 , 在内存中有一块映射区域 , 当使用 Assets 资源时 , 从内存中的该区域解压出来 , 放置到资源模块中 ;
  • 资源映射区 : jar 包 , 字体 , 图片 等文件在内存的映射区域 ;
  • 动态库区域 : 虚拟机 , jni 层相关的 so 动态库区域 ;
  • 堆区域 : Java 中的 new 关键字创建的对象 , C/C++ 中 malloc 分配的内存 , 都在堆内存中 ;
  • 栈内存 : 函数参数 , 本地变量 , 都存放在栈区域中 ;

具体的 栈内存 与 堆内存 参考 【Java 虚拟机原理】垃圾回收算法 ( Java 虚拟机内存分区 | 垃圾回收机制 | 引用计数器算法 | 引用计数循环引用弊端 ) 一、Java 虚拟机内存分区 博客章节 ;

通过上图的 文件 与 内存 之间的对应关系 , 实际进行逆向时 , 依据该对应关系 , 查找文件对应的内存地址 ;

因为有些 APK 文件是无法进行反编译 , 或无法进行重打包 , 如果要修改文件中的内容 , 需要知道文件与内存之间的对应关系 , 通过修改运行后的内存数据 , 达到与修改文件的相同效果 ;

一般情况下修改 动态库 区域 比较多 ;

以上是关于Android - 文件系统与Android11 分区存储的主要内容,如果未能解决你的问题,请参考以下文章

Android 逆向Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )

Android 逆向Android 系统中文件的用户和分组 ( 文件所有者与分组 | /sdcard/ 的文件分组 | /data/ 目录分析 | 用户类型 )

基于Android的学生管理系统App设计与实现(Eclipse开发)

[RK3568 Android11]挂载文件系统介绍

[RK3568 Android11]挂载文件系统介绍

基于android安卓平台的校园通软件设计与实现—毕业论文.doc