第九节_Android_CPU_架构解析

第九节 Android CPU 架构解析

(第1章 安卓逆向概论)

学习目标

学完本节,希望你能够:了解 Android 设备常见 CPU 架构(ARM32、ARM64、x86、RISC-V);搞清 ARMv7 和 ARMv8、big.LITTLE 是啥;会看设备和 APK 的架构(getprop、unzip -l);知道不同架构对逆向、性能、漏洞分析有啥影响。


一、Android 平台主流 CPU 架构

目前,Android 设备主要采用以下 CPU 架构:

架构 指令集 常见处理器 适用设备
ARMv7 (32-bit) ARM32 Cortex-A7, Cortex-A15 旧款 Android 手机、IoT 设备
ARMv8 (64-bit) ARM64 (AArch64) Cortex-A53, Cortex-A76 现代 Android 旗舰手机
x86 / x86_64 CISC Intel Atom, AMD Ryzen Embedded Android 模拟器、少量平板
RISC-V RISC 未来趋势 低功耗设备、实验性 Android 平台


二、ARMv7 和 ARMv8(AArch64)有啥不同?

特性 ARMv7 (32-bit) ARMv8 (64-bit)
指令集 ARM32 (AArch32) ARM64 (AArch64)
最大内存支持 4GB 16EB(大幅提升)
通用寄存器 16 个(R0-R15) 31 个(X0-X30)
指令集优化 依赖 Thumb-2 精简、提高能效
NEON SIMD 支持 可选 内置支持
性能 低功耗,较慢 高效,高吞吐量
兼容性 不能运行 64 位应用 向下兼容 ARMv7 代码

示例:ARM32 vs. ARM64 汇编

assembly 复制代码
; ARM32 版本
MOV R0, #5
ADD R0, R0, #3

; ARM64 版本
MOV X0, #5
ADD X0, X0, #3

ARM64 版本的寄存器更宽,计算能力更强。



三、big.LITTLE 架构是啥?

用一句话说清楚

big.LITTLE 是 ARM 开发的一种 异构多核架构 ,将 高性能核心(big)节能核心(LITTLE) 结合,达到 性能与功耗的平衡

核心类型 特点 常见核心
big 核心 高性能,适合重负载任务 Cortex-A76, Cortex-X1
LITTLE 核心 低功耗,适合后台任务 Cortex-A55

常见 big.LITTLE 组合

CPU 组合 示例处理器
4× big + 4× LITTLE Snapdragon 865 (4× Cortex-A77 + 4× Cortex-A55)
1× big + 3× middle + 4× LITTLE Snapdragon 8 Gen 1 (1× Cortex-X2 + 3× Cortex-A710 + 4× Cortex-A510)

big.LITTLE 一般怎么干?

  • 设备空闲 时,任务运行在 LITTLE 核心,节省功耗。
  • 用户运行大型应用 时,任务切换到 big 核心,提高性能。

💡 逆向工程影响

  • 不同核心运行不同任务,调试时要注意 CPU 负载的变化。
  • big 核心更适合跑高负载逆向分析,如 Frida、Ghidra。


四、APK 和设备的架构咋对应?

Android 平台上的 APK 需要匹配设备 CPU 架构。APK 支持的 CPU 架构信息存储在 lib/ 目录,例如:

复制代码
lib/arm64-v8a/       # 64-bit ARM
lib/armeabi-v7a/     # 32-bit ARM
lib/x86/             # 32-bit x86
lib/x86_64/          # 64-bit x86

判断 Android 设备支持的 CPU 架构

bash 复制代码
adb shell getprop ro.product.cpu.abi

示例输出:

复制代码
arm64-v8a

查看 Android /proc/cpuinfo

bash 复制代码
adb shell cat /proc/cpuinfo

示例输出:

复制代码
Processor    : ARMv8 Processor rev 3
BogoMIPS    : 38.40
Features    : fp asimd evtstrm aes pmull sha1 sha2 crc32
CPU architecture: 8

逆向分析 APK 目标架构

bash 复制代码
unzip -l myapp.apk | grep lib/

示例输出:

复制代码
lib/arm64-v8a/libnative.so
lib/armeabi-v7a/libnative.so

👉 说明此 APK 同时支持 ARM64 和 ARM32 设备



五、对逆向和漏洞分析有啥影响?

不同 CPU 架构影响逆向分析:

  1. ARM64 指令更简洁 ,但 寄存器 X0-X30 增加复杂性
  2. big.LITTLE 调度影响动态分析,调试时需关注 CPU 核心的任务分配情况。
  3. 漏洞利用
    • ROP 攻击(Return Oriented Programming) :x86 上常见,ARM64 由于 PAC 保护难度更大。
    • 指令集转换 :ARM 支持 AArch32 & AArch64,部分应用仍使用 ARM32 指令,可导致兼容性问题。

示例:使用 GDB 读取 /proc/cpuinfo

bash 复制代码
adb shell su
gdbserver :5039 --attach <pid>

然后在 GDB 中:

gdb 复制代码
p *(char(*)[100])0x7ffd8c3b0000

分析 CPU 指令

bash 复制代码
objdump -d libnative.so | head -n 20


动手练一练

  1. 检查 Android 设备 CPU 架构
bash 复制代码
adb shell getprop ro.product.cpu.abi
  1. 解析 /proc/cpuinfo
bash 复制代码
adb shell cat /proc/cpuinfo
  1. 检查 APK 兼容的 CPU 架构
bash 复制代码
unzip -l myapp.apk | grep lib/
  1. 反编译 Android 共享库
bash 复制代码
objdump -d libnative.so | head -n 20

本节小结

你只要记住这几条就行:Android 常见架构有 ARM32、ARM64、x86、RISC-V,APK 里 lib/arm64-v8a 等目录对应不同架构;ARM64 比 ARM32 寄存器多、位宽大;big.LITTLE 是「大核+小核」省电又保性能;用 getprop ro.product.cpu.abiunzip -l apk | grep lib/ 可看设备和 APK 的架构。


本节思考与练习

  1. 概念:ARMv7 和 ARMv8 在位数、寄存器上有啥区别?big.LITTLE 在干啥?
  2. 动手:用 adb shell getprop ro.product.cpu.abicat /proc/cpuinfo 看自己设备的架构。
  3. 动手:用 unzip -l 看一个 APK 里有哪些 lib/,对应哪些架构。

下一节预告 :下一节讲 Dalvik vs. ART 运行时(第十节),帮你搞清 DEX 怎么被执行、AOT/JIT 是啥、对逆向有啥影响。

相关推荐
长沙火山3 小时前
第十一节_Android_进程管理
逆向·安卓逆向
长沙火山1 天前
第六节_x86_vs_ARM_汇编
逆向·安卓逆向
泡泡以安1 天前
Android 逆向实战:从零突破某电商 App 登录接口全参数加密
android·爬虫·安卓逆向
长沙火山1 天前
第五节_汇编语言基础
逆向·安卓逆向
夏了茶糜3 天前
Electron应用逆向分析思路
逆向
嫂子的姐夫6 天前
25-jsl:gov公安(全扣补环境版)
爬虫·逆向·加速乐
嫂子的姐夫6 天前
24-MD5:红人点集登录+凡客网登录
爬虫·python·逆向·小白逆向练手
clown_YZ8 天前
KnightCTF2026--WP
网络安全·逆向·ctf·漏洞利用
这样の我14 天前
某海外上报接口 strData 纯算逆向
逆向