【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月前
|
Arthas 存储 算法
深入理解JVM,包含字节码文件,内存结构,垃圾回收,类的声明周期,类加载器
JVM全称是Java Virtual Machine-Java虚拟机JVM作用:本质上是一个运行在计算机上的程序,职责是运行Java字节码文件,编译为机器码交由计算机运行类的生命周期概述:类的生命周期描述了一个类加载,使用,卸载的整个过类的生命周期阶段:类的声明周期主要分为五个阶段:加载->连接->初始化->使用->卸载,其中连接中分为三个小阶段验证->准备->解析类加载器的定义:JVM提供类加载器给Java程序去获取类和接口字节码数据类加载器的作用:类加载器接受字节码文件。
278 55
|
2月前
|
Android开发 开发者
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
本文详细介绍了如何通过自定义 `attrs.xml` 文件实现 Android 自定义 View 的属性配置。以一个包含 TextView 和 ImageView 的 DemoView 为例,讲解了如何使用自定义属性动态改变文字内容和控制图片显示隐藏。同时,通过设置布尔值和点击事件,实现了图片状态的切换功能。代码中展示了如何在构造函数中解析自定义属性,并通过方法 `setSetting0n` 和 `setbackeguang` 实现功能逻辑的优化与封装。此示例帮助开发者更好地理解自定义 View 的开发流程与 attrs.xml 的实际应用。
Android自定义View之不得不知道的文件attrs.xml(自定义属性)
|
2月前
|
Java Android开发
Android studio中build.gradle文件简单介绍
本文解析了Android项目中build.gradle文件的作用,包括jcenter仓库配置、模块类型定义、包名设置及依赖管理,涵盖本地、库和远程依赖的区别。
225 19
|
2月前
|
存储 XML Java
Android 文件数据储存之内部储存 + 外部储存
简介:本文详细介绍了Android内部存储与外部存储的使用方法及核心原理。内部存储位于手机内存中,默认私有,适合存储SharedPreferences、SQLite数据库等重要数据,应用卸载后数据会被清除。外部存储包括公共文件和私有文件,支持SD卡或内部不可移除存储,需申请权限访问。文章通过代码示例展示了如何保存、读取、追加、删除文件以及将图片保存到系统相册的操作,帮助开发者理解存储机制并实现相关功能。
489 2
|
5月前
|
移动开发 安全 Java
Android历史版本与APK文件结构
通过以上内容,您可以全面了解Android的历史版本及其主要特性,同时掌握APK文件的结构和各部分的作用。这些知识对于理解Android应用的开发和发布过程非常重要,也有助于在实际开发中进行高效的应用管理和优化。希望这些内容对您的学习和工作有所帮助。
477 83
|
3月前
|
存储 NoSQL Redis
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 + 无锁架构 + EDA架构 + 异步日志 + 集群架构
阿里面试:Redis 为啥那么快?怎么实现的100W并发?说出了6大架构,面试官跪地: 纯内存 + 尖端结构 +  无锁架构 +  EDA架构  + 异步日志 + 集群架构
|
4月前
|
SQL 存储 缓存
【赵渝强老师】达梦数据库的内存结构
本文介绍了达梦数据库管理系统的内存结构,包括内存池、缓冲区、排序区和哈希区。内存池分为共享内存池和运行时内存池,能够提高内存申请与释放效率,并便于监控内存使用情况。缓冲区涵盖数据缓冲区、日志缓冲区、字典缓冲区和SQL缓冲区,用于优化数据读写和查询性能。排序区和哈希区分别提供排序和哈希连接所需的内存空间,通过合理配置参数可提升系统效率。文内附有具体配置示例及视频讲解,帮助用户深入理解达梦数据库的内存管理机制。
103 0
|
1月前
|
安全 Java Android开发
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
72 0
为什么大厂要求安卓开发者掌握Kotlin和Jetpack?深度解析现代Android开发生态优雅草卓伊凡
|
4月前
|
JavaScript Linux 网络安全
Termux安卓终端美化与开发实战:从下载到插件优化,小白也能玩转Linux
Termux是一款安卓平台上的开源终端模拟器,支持apt包管理、SSH连接及Python/Node.js/C++开发环境搭建,被誉为“手机上的Linux系统”。其特点包括零ROOT权限、跨平台开发和强大扩展性。本文详细介绍其安装准备、基础与高级环境配置、必备插件推荐、常见问题解决方法以及延伸学习资源,帮助用户充分利用Termux进行开发与学习。适用于Android 7+设备,原创内容转载请注明来源。
743 76
|
5月前
|
前端开发 Java Shell
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex
312 20
【08】flutter完成屏幕适配-重建Android,增加GetX路由,屏幕适配,基础导航栏-多版本SDK以及gradle造成的关于fvm的使用(flutter version manage)-卓伊凡换人优雅草Alex-开发完整的社交APP-前端客户端开发+数据联调|以优雅草商业项目为例做开发-flutter开发-全流程-商业应用级实战开发-优雅草Alex