当前位置:首页>安卓APP>安卓逆向-安卓基础

安卓逆向-安卓基础

  • 2026-11-10 13:47:55
安卓逆向-安卓基础

这里介绍的是Android的基本内容 和虚拟机啊等其他内容

Android历史

在 Android 4.4以前 采用的是dalvik/dvm虚拟机 主要特征是系统中存在libdvm.so

在 Android 4.4  采用的是dvm虚拟机和art虚拟机 主要特征是系统中存在libdvm.so和 libart.so

在 Android 5.0  采用的是art虚拟机 主要特征是系统中存在 libart.so 并且区分32位和64位

这个就是基本的Android 发展历史

那么现在都是使用art虚拟机了

APK架构

我们做逆向 肯定是需要了解APK有什么东西才可以继续逆向 所以这里查看一下架构

AndroidManifest.xml 这是我们APK的核心配置文件 所有的权限 入口函数 进程名字都是定义在其中的

image-20260324104237961

class.dex 这是Java逆向的主要内容 也就是我们的源代码 但是其实在jadx中已经在源代码区域反汇编出来了

image-20260324104331649

resources.arsc 是打包后的资源包

META-INF 这个目录是我们的签名信息 只有签名了 才允许安装到安卓系统中

res 这个目录保存的是图片 音频 还有布局信息相关的信息 如果我们打开其实是编译过的

assets 这个目录保存的是没有编译的 图片视频信息

lib 这个目录保存的是 我们的so文件 也就是我们的依赖库 是需要拖入IDA进行分析的

以上就是基本没有加壳前的项目结构

安卓架构

https://developer.android.com/guide/platform?hl=zh-cn

链接中的图片就是我们基本的安卓架构

Linux 内核层

最底层就是我们的Linux内核相关 用于维护硬件和软件之间的通道 属于OS Linux 内核的安全机制为 Android 提供了相应的保障

硬件抽象层 HAL

向更高级别的 Java Framework 层显示设备硬件功能

框架 API 要求访问设备硬件时,Android 系统将为该硬件组件加载库模块

Native C/C++ 库 && Android Runtime

ART 通过执行 DEX 文件可在设备上运行多个虚拟机

Java Framework 层

保存着Java的API 然后就会下传到下层

System Apps 层

也就是我们的 应用层面 主要就是Java代码

那么以上我们就可以知道 我们使用Linux基本命令 其实在adb shell 中都可以使用

安卓目录

那么这里是我们安卓基本的目录相关

DATA目录

data/data 存放的是用户的APK数据 每个APK 都有自己的目录 并且按照包名命名 每个APK都只可以访问自己的目录 除非root 也就是只可以自己的目录运行

:/data/data # ls | grep app.np
com.wn.app.np

data/app 用户安装的APK

后面是随机值 每次安装都不同 这里存放的是用户自己安装的内容

:/data/app # ls
com.android.flysilkworm-gEMev7pwhOUN5vSe2gs7ZQ==
com.android.launcher3-VkII8gPUm-3klkQnWwLn4w==
com.topjohnwu.magisk-H5LATSczisLA2obDvqjXSw==
com.wn.app.np-SPIBgyWh1iv8-rPatxT_cQ==
:/data/app #

那么这个目录下还有基本层级

base.apk :基本的APK

icons :图标

lib:使用到的so文件存储在这里

oat :dex文件转化为其他要使用的文件

data/local/tmp 权限很大 可以直接推送进入  我们不需要adb root 即可直接推入

system目录

system/app 这里存储的是 系统自带的APP 一般需要root权限相关

system/lib  和system/lib64 存放的是APK会使用到so文件

system/bin 存放的是我们基本的Linux命令

2|:/system # cd bin/
:/system/bin # ls
acpi                ifconfig              reboot
adbd                ime                   renice
am                  incident              requestsync
app_process         incident_helper       resize2fs
app_process32       incidentd             restorecon
app_process64       inotifyd              rm
applypatch          input                 rmdir
.....................................................

system/framework  存放的是Android系统所用到的框架 基本是jar包 也就是Java层的API

SD卡

无论手机是否有存储卡 都会存在这个目录

APP操作SD卡的时候 需要申请权限

安卓 6.0以下需要在配置清单中申请权限

安卓 6.0以上需要在代码动态申请

安卓 10.0以上需要前面两个基础上依旧在清单中配置

sdcard其实是一个软连接

lrw-r--r--   1 root   root        21 2026-03-17 10:35 sdcard -> /storage/self/primary

还存在在

/mnt/sdcard
/storage/emulated/0/

都是可以进入SD卡

Linux权限

学习完基本的内容 我们还需要学习一下权限控制相关的

我们通过ls -al 展示出来的时候 会存在权限内容 比如上面的lrw-r--r-- 

第一位确定 文件类型

- 是普通文件
l 是连接文件 如果是那么就会在后面打印出  -> 
d 是目录
c 是设备文件 鼠标键盘等
b 是块文件 硬盘 /dev

2-4位确定 所有者应用该文件的权限

5-7位确定 所属组拥有该文件的权限

8-10位确定 其他用户对该文件的权限

那么权限表示rwx

其中r 是读 w 是写 x 是执行 - 是没有权限

可以使用数字来进行r=4 w=2 x=1

1 root   root 

第一个是 硬链接数 文件一般是1 目录一般是2

所属root用户和root组

最新文章

随机文章