Lazy loaded image
Android逆向
【原创】Android 底层核心术语通俗详解|启动流程、SELinux、Hook、反取证体系梳理
Words 4094Read Time 11 min
2026-7-14
2026-7-14
type
Post
status
Published
date
Jul 14, 2026
slug
summary
做 Android 逆向、设备定制、Magisk 模块开发、企业 MDM 设备管控、APP 安全对抗时,总会遇到一大堆底层晦涩名词:BootROM、SELinux 策略、AVB 验签、Zygisk、PLT‑Hook、denylist 隐藏等等。很多文档只给干巴巴的英文释义,新手看完一头雾水。 本文结合日常开发场景,把术语用通俗生活化例子讲解,分为 6 大模块:系统启动、SELinux 权限、AVB 安全校验、ARM64 与编译链接、Hook 注入框架、反检测对抗;既可以当作术语查阅手册,也适合入行逆向的同学建立整体知识框架。
tags
Android
category
Android逆向
icon
password
网址
上次编辑时间
Jul 14, 2026 07:44 AM
comment
AI 总结

前言

做 Android 逆向、设备定制、Magisk 模块开发、企业 MDM 设备管控、APP 安全对抗时,总会遇到一大堆底层晦涩名词:BootROM、SELinux 策略、AVB 验签、Zygisk、PLT‑Hook、denylist 隐藏等等。很多文档只给干巴巴的英文释义,新手看完一头雾水。 本文结合日常开发场景,把术语用通俗生活化例子讲解,分为 6 大模块:系统启动、SELinux 权限、AVB 安全校验、ARM64 与编译链接、Hook 注入框架、反检测对抗;既可以当作术语查阅手册,也适合入行逆向的同学建立整体知识框架。

专业术语通俗讲解(按领域分组)

1.1 Android 启动 / 系统

类比家里依次启动全屋电器:按下电源后,硬件固件→引导程序→内核→安卓系统→APP。
表格
术语
通俗释义 + 举例说明
BootROM
SoC 芯片内置固件,通电执行的第一段代码,相当于芯片 BIOS;MTK 机型进入 BROM 刷机模式就是由 BootROM 运行,此时还未启动 Android 系统。
bootloader
引导加载器(lk/aboot),作用就是加载 kernel 和 ramdisk,没有它内核无法启动,类比电脑 BIOS 的启动选择项。
boot.img
boot 分区镜像,内部包含 header、kernel、ramdisk、dtb、AVB 校验数据;刷机更新 boot.img 本质就是替换手机内核。
ramdisk
压缩格式为cpio.gz的内存根文件系统。内核刚启动磁盘还未挂载,ramdisk 临时存放/init等基础文件,全部驻留在内存,关机即销毁。
init
PID=1 的一号进程,所有进程的源头,分为 3 阶段:1.First‑StageMain:挂载磁盘分区;2.SetupSelinux:编译加载 SELinux 安全策略;3.SecondStageMain:读取 init.rc 脚本启动 zygote。
init.rc
init 进程专属配置脚本,支持on触发条件、services 服务、mkdir、mount、setprop、start 等命令,常见用法:开机完成后启动对应服务。
zygote
APP 和system_server的父进程;提前预加载 Android 框架代码,打开微信抖音时通过 fork 复制自身生成 APP 进程,减少资源重复加载,加快应用启动速度。
system_server
zygote 孵化出来的系统核心进程,PMS、AMS 等核心服务都运行在这里;一旦该进程崩溃手机就会重启。
ServiceManager
Binder 服务的注册中心。系统服务调用addService完成登记;App 调用getService获取服务;service list命令可以查看全部注册服务。
binder
Android 独有的 IPC 进程间通信机制。例如 App 调用 GPS 定位服务,两个进程内存相互隔离,依靠 binder 完成数据交互。
PackageManager (PMS)
应用管理核心服务,负责安装、卸载、查询应用;自动扫描/system/app/system/priv‑app等目录下的应用并完成安装。
priv‑app
特权应用,放置在 priv‑app 目录下,能够申请普通第三方 App 获取不到的 privapp‑permissions 特权,比如静默安装软件、修改系统配置。
packages.xml / packages.list
PMS 持久化文件,保存本机安装应用列表、版本、权限启用状态;手机重启之后 PMS 读取该文件获取应用信息。
Device Owner (DO) / Device Admin
MDM 设备最高管控权限;企业管理员配置 DO 后可以静默安装卸载 App、远程重启设备、禁用硬件,风控软件经常依靠该权限限制用户。
A/B 分区
boot_a、boot_b 双分区设计。系统更新时后台升级备用分区,重启切换分区;即使升级中途断电,另一个完好分区依然可以正常开机,实现无损升级。
dtb / dtbo
dtb 用来描述 CPU、屏幕、摄像头等硬件信息;dtbo 是设备树覆盖层;不同硬件版本通过设备树适配内核,不用频繁修改内核源码。

1.2 SELinux(强制权限管控)

类比小区门禁系统:传统 Linux 区分管理员和普通用户,SELinux 是第二层强制安全限制;就算拿到 root 权限,SELinux 规则不允许依旧不能访问对应文件,默认规则:拒绝一切未明确放行的操作
表格
术语
通俗释义 + 举例说明
SELinux
Linux 强制访问控制(MAC)。例如 root 账号下 init 进程读取 App 缓存文件,如果没有 allow 规则依旧会被拒绝,防止恶意 root 进程随意篡改系统。
policy
SELinux 的安全规则集合,编译后生成二进制文件;init 进程第二阶段将 policy 加载进内核全程生效。
CIL
SELinux 策略源码语言(S‑表达式),编写安全规则的源代码文件。
secilc
CIL 编译器,把 cil 源码编译成内核能够识别的二进制 policy,编译阶段校验规则合法性。
domain / type
domain 代表进程标签(zygote、init);type 代表文件标签(apk_data_file);SELinux 权限判断只依靠标签,和文件所属用户无关。
allow 规则
格式allow(源domain 目标type 类别 权限),仅代表授予权限,不会主动触发动作。示例:allow zygote apk_data_file:file read允许 zygote 读取 App 数据目录。
neverallow
编译期强制约束,禁止指定权限组合;如果编写的 policy 违反 neverallow,编译直接失败,规避不安全权限配置。
file_contexts
文件路径和 type 标签的映射文件;/data/data/*默认打上apk_data_file标签,restorecon命令按照该配置重新打标签。
service_contexts
binder 服务和 type 标签绑定,用来限制哪些进程可以访问对应 Binder 服务。
property_contexts
系统属性和 type 标签绑定,控制进程是否能够读取ro.build.fingerprint这类系统属性。
enforcing / permissive
enforcing:规则违规直接拦截;permissive 宽容模式:仅打印日志不拦截操作;root 设备经常设置为 permissive 规避限制。
typepermissive
单独设置某个 domain 为宽容模式,整机 SELinux 处于 enforcing 时,该进程违规也只会记录日志;MIUI 大量使用该配置,也是逆向开发突破口,但会降低安全性。
MLS / MCS
多级安全与多类别安全机制;给不同 App 分配 category 标签实现隔离;socket 通信会被隔离约束,普通 Binder 通信不受 MCS 限制。
mlstrustedsubject
拥有该标签的进程可以绕过 MCS 隔离,读取所有隔离空间的数据,Magisk 组件普遍配置该标签。
transition / no_trans
进程通过 exec 拉起新程序时切换 domain;execute_no_trans代表执行程序后进程标签保持不变,例如 init 启动 zygote 就会发生 domain 切换。
restorecon
读取file_contexts配置,修复错乱的 SELinux 文件标签。

1.3 AVB /dm‑verity(谷歌防篡改校验)

类比文件数字签名:厂商给系统分区计算哈希并用私钥签名;开机内核校验哈希,一旦文件被修改就判定设备不安全,触发谷歌风控检测。
表格
术语
释义
AVB
Android Verified‑Boot,全程校验 boot、system 分区文件完整性,系统文件改动就判定设备不安全。
vbmeta
AVB 元数据分区,保存各分区哈希值、厂商签名、校验配置,内核启动优先读取 vbmeta 配置。
vbmeta flags
0 = 严格校验,system 改动直接无法开机;3 = 关闭 AVB 校验,刷机 root 时基本都会修改 flags 值为 3。
dm‑verity
块设备级哈希树校验,给 system 分区构建哈希树;运行时实时校验文件,将 system 分区设置为只读,防止修改系统文件。
verifiedbootstate
green:官方上锁无修改;yellow:userdebug 版本上锁;orange:bootloader 解锁(root 机大多为此状态);red:校验失败系统损坏;Play Integrity 会读取该状态判断设备是否 root。
device_state
locked:bootloader 上锁;unlocked:bootloader 解锁;解锁之后才能刷第三方 boot 镜像,但会触发谷歌安全检测。
SafetyNet / Play Integrity
Google 设备完整性检测;App 通过该服务读取 boot 状态、SELinux 模式,检测到 root 或者解锁后,银行、海外软件就会限制功能。

1.4 ELF / ARM64 / 链接原理(Native 层基础)

类比 Windows 的 exe 和 dll 文件,Android 原生程序以 ELF 格式存在,弄懂本节是 Native Hook 开发的基础。
表格
术语
通俗释义 + 举例说明
ELF
Android 可执行文件格式(可执行程序、.so 库);包含.text代码段、.rodata只读数据段、.data全局变量段、.bss未初始化变量段。
PIE
位置无关可执行文件,开启 ASLR 内存地址随机化;每次启动程序加载地址不一样,防止黑客依靠固定内存地址漏洞攻击,新版 Android 强制开启 PIE。
static vs dynamic linking
静态链接:编译时把 libc 打包进程序,安装包体积偏大;动态链接:运行时由 linker64 加载外部 so 库,Android 全部采用动态链接。
bionic
Google 自研的 libc 库和 linker64 链接器,不同于 Linux glibc,Android 原生程序只能依赖 bionic。
DT_NEEDED
ELF 内部字段,记录当前 so 依赖的其他库,linker 依靠这个字段加载依赖的 so 文件。
dlopen / dlsym
dlopen运行时加载外部 so;dlsym获取 so 内部函数地址,插件化框架、注入工具大量使用这一组 API。
PLT / GOT
PLT(过程链接表)、GOT(全局偏移表);第一次调用外部函数时 linker 填充 GOT 里的真实函数地址;修改 GOT 表项就是 PLT‑Hook,拦截外部函数调用。
LD_PRELOAD
Linux 环境变量,优先加载指定 so 库,替换系统原有函数实现 Hook;Android7 + 依靠 linker namespace 大幅限制了该变量。
native bridge
指令集翻译桥,比如 x86 平板运行 ARM64 程序;Zygisk 借助native bridge入口注入 zygote 进程,ro.dalvik.vm.native.bridge配置桥接加载器。
linker namespace
Android7.0 推出库隔离机制,通过ld.config.txt划分命名空间,不同 App 的 so 相互隔离,避免恶意程序随意加载系统库。
ARM64 / AArch64
手机主流 64 位精简指令集;拥有 x0‑x30 共 31 个通用寄存器;函数调用约定:前 7 个参数依次存放在 x0‑x7 寄存器。
SVC #0
ARM64 进入内核态的指令;x8 寄存器存放系统调用编号,执行该指令完成用户态到内核态切换,ptrace、文件打开都依靠系统调用实现。
ADRP/ADD
ARM64 高频取址指令,依靠 PC 程序计数器相对偏移计算内存地址,逆向分析汇编代码时经常遇到。
BTI
分支目标识别安全特性;函数入口必须添加bti指令,阻止黑客跳转到非法内存执行恶意代码,现代手机默认开启 BTI。

1.5 注入 / Hook 框架原理

Hook 核心:替换原有函数逻辑,分为 Java 层 Hook(Xposed)和 Native 层 Hook(inline‑hook、PLT‑Hook)。
表格
术语
通俗释义 + 举例说明
Xposed
老牌 Java 层 Hook 框架,修改 zygote 启动替换app_process实现 Java 方法拦截;缺点是高版本 Android 适配困难,兼容性较差。
LSPosed / liblspd
Xposed 升级版,基于 Zygisk 模式运行,依靠 LSPlant 修改 ART 虚拟机的 ArtMethod 结构体实现 Hook,是现在主流模块框架。
Riru
早期 zygote 注入方案,借助 libmemtrack 系统库完成注入;随着 Android 版本升级漏洞失效,现已淘汰。
Zygisk
Magisk 官方 zygote 注入方案,借助 native‑bridge 进入 zygote 进程;denylist 黑名单可以在指定 App 里清除 Magisk 痕迹躲避检测。
Zygisk Next / r0zygisk
脱离 Magisk 独立实现 Zygisk 注入,不需要 Magisk Root 就可以注入 zygote 进程。
LSPlant
LSPosed 的 ART‑Hook 引擎,修改虚拟机 ArtMethod 结构体指针替换 Java 方法,实现模块功能。
inline hook
Native 底层 Hook 方式;修改函数开头汇编指令跳转到自定义代码;需要调用mprotect把只读代码段修改为可写,风险较高。
PLT hook
修改 GOT 表里面的函数指针拦截外部调用;对比 inline‑Hook 更加稳定,不会修改原始汇编指令。
InMemoryDexClassLoader
内存加载 Dex,dex 全程驻留在内存不写入磁盘;反取证开发常用,App 无法扫描到注入的 dex 文件。
ptrace
Linux 原生调试系统调用,可以附加进程读写内存完成注入;缺点特征明显,风控软件检测到 ptrace 附着就判定作弊。
carrier
本项目自定义术语:指将我们编写的 so 送入目标进程的载体机制,Zygisk、ptrace、native‑bridge 都属于 carrier。
scrub(denylist hide)
Zygisk 隐藏机制;打开黑名单里的 App 时,Zygisk 卸载自身 so 并清理内存痕迹,让 App 检测不到 Magisk。

1.6 反检测 / 对抗风控

现在银行、短视频 App 会检测 Root、注入 so、系统篡改;反检测就是伪造设备环境骗过风控;封控代表 App 检测到设备异常后限制账号功能。
表格
术语
通俗释义 + 举例说明
props hook
Hook __system_property_find/get;App 读取ro.boot.flash.locked等属性时返回伪造结果,假装设备处于官方上锁状态。
maps hide
Hook openat/read函数过滤/proc/self/maps内容;maps 文件会展示进程加载的全部 so 库,过滤注入 so 路径避免被检测。
stack hiding
拦截Throwable堆栈相关方法,清除 Hook 产生的栈帧;防止 App 通过调用栈发现 LSPosed 注入痕迹。
dexFile 伪装
反射修改dexElement.mFileName,把我们注入的 dex 文件名修改为系统 jar 包名称,让 App 认为 DEX 文件属于系统文件。
crash 清扫
App 崩溃会在磁盘留存崩溃日志、xlog 日志;crash 清扫就是程序退出前删除日志文件,清除修改痕迹。
ClassLoader swap
修改 ClassLoader 父加载器,将自定义类加载器挂载到系统 ClassLoader 下,App 识别不到第三方注入加载器。
封控
项目自定义术语:App 检测到 Root、注入框架之后限制账号功能,例如禁止登录、关闭评论、部分功能不可用。

总结

完整的技术链路梳理:
  1. BootROM‑>bootloader‑> 内核‑>init‑>zygote 完成手机开机;
  1. SELinux、AVB‑dm‑verity、Play Integrity 构成谷歌三层安全壁垒;
  1. ARM64+ELF 原理决定 Native‑so 编译加载方式,衍生 PLT‑Hook、inline‑Hook;
  1. Zygisk、LSPlant 完成代码注入,再依靠属性伪造、maps 隐藏、栈清理对抗 App 风控。
阅读内核、Magisk 源码以及逆向安全文章时,借助这份术语清单就可以快速看懂底层逻辑;从事逆向安全、企业设备定制开发,可以把本文当作速查手册。
上一篇
爬虫数据采集加密算法全景指南
下一篇
【转载吾爱破解】Android7.0以上命名空间详解(dlopen限制)附上010editor模块

Comments
Loading...