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

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

文章目录

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

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





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


Android 软件运行时内存结构 :


硬件层 : 内存中 , 硬件层处于最底层 , 映射成一些文件 ;

硬件驱动层 : 该层是 硬件层 与 操作系统的 纽带 , 一般与 内核 进行交互 ;

内核层 : 可调用的最底层的层级 , 可通过 系统调用 API 进行相关操作 , 如 文件处理 , 内存处理 ; 系统调用的本质就是调用内核中的一些接口 ;

应用支持层 : 系统库 , 标准库 , libc , opencv 等系统自带的函数库 , 都是在该层 ; 用户一般无法操作该层 , 如果用户自定义一个库 , 放在应用支持层 , 需要 root / 越狱 等获取最高权限的操作 ;

原生接口层 : 用户自定义的 Java 与 C / C++ 交互的接口 , 一般用于 图形图像 / 音视频 / 底层调用 / 网络通信 等功能 ;

Java 应用层 : 用户开发的 Java 程序 , 一般用于 UI 界面展示 , 用户交互操作 ;

image.png





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


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


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



内存中的区域 :


中断保留区域 : 一般情况下 0 \rm 00 ~ 0 x 8000 \rm0x80000x8000 地址 , 进程内应用层没有访问权限 ; 读写都会引起崩溃 ; 这是为内核层保留的区域 ; 每个进程都有 1 11 个中断保留区域 ;

应用包映射区域 : APK 安装文件 , 在内存中有一块映射区域 , 当使用 Assets 资源时 , 从内存中的该区域解压出来 , 放置到资源模块中 ;

资源映射区 : jar 包 , 字体 , 图片 等文件在内存的映射区域 ;

动态库区域 : 虚拟机 , jni 层相关的 so 动态库区域 ;

堆区域 : Java 中的 new 关键字创建的对象 , C/C++ 中 malloc 分配的内存 , 都在堆内存中 ;

栈内存 : 函数参数 , 本地变量 , 都存放在栈区域中 ;

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


image.png


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


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


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


目录
相关文章
|
2月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
|
4月前
|
Java Android开发 C++
Android Studio JNI 使用模板:c/cpp源文件的集成编译,快速上手
本文提供了一个Android Studio中JNI使用的模板,包括创建C/C++源文件、编辑CMakeLists.txt、编写JNI接口代码、配置build.gradle以及编译生成.so库的详细步骤,以帮助开发者快速上手Android平台的JNI开发和编译过程。
309 1
|
28天前
|
Android开发
布谷语音软件开发:android端语音软件搭建开发教程
语音软件搭建android端语音软件开发教程!
|
1月前
|
自然语言处理 数据可视化 Java
国内首位聋人 Android 软件工程师体验通义灵码,“这真是太棒了”
@workspace 功能发布后,我们收到了非常多新老朋友的积极反馈,其中有一个特别的朋友给我留下了深刻的印象,来分享一下他的故事。
|
2月前
|
ARouter Android开发
Android不同module布局文件重名被覆盖
Android不同module布局文件重名被覆盖
140 0
|
4月前
|
开发工具 git 索引
repo sync 更新源码 android-12.0.0_r34, fatal: 不能重置索引文件至版本 ‘v2.27^0‘。
本文描述了在更新AOSP 12源码时遇到的repo同步错误,并提供了通过手动git pull更新repo工具来解决这一问题的方法。
150 1
|
4月前
|
存储 监控 数据库
Android经典实战之OkDownload的文件分段下载及合成原理
本文介绍了 OkDownload,一个高效的 Android 下载引擎,支持多线程下载、断点续传等功能。文章详细描述了文件分段下载及合成原理,包括任务创建、断点续传、并行下载等步骤,并展示了如何通过多种机制保证下载的稳定性和完整性。
132 0
|
6月前
|
Java 开发工具 Android开发
详细解读Android开发DNK开发将.c文件打包成os
详细解读Android开发DNK开发将.c文件打包成os
34 0
|
4月前
|
存储 编译器 C语言
【C语言篇】数据在内存中的存储(超详细)
浮点数就采⽤下⾯的规则表⽰,即指数E的真实值加上127(或1023),再将有效数字M去掉整数部分的1。
403 0
|
2月前
|
存储 C语言
数据在内存中的存储方式
本文介绍了计算机中整数和浮点数的存储方式,包括整数的原码、反码、补码,以及浮点数的IEEE754标准存储格式。同时,探讨了大小端字节序的概念及其判断方法,通过实例代码展示了这些概念的实际应用。
81 1