安卓文件结构解析
1.apk
安卓安装包
本质是zip,可以解压

APK (ZIP)
├─ AndroidManifest.xml ← 包名/组件/权限
├─ classes[2,3...].dex ← Java/Kotlin 字节码
├─ resources.arsc ← 资源索引
├─ res/ ← 二进制资源
├─ assets/ ← 原始文件
├─ lib/abi/*.so ← Native 库
├─ META-INF/ ← 签名 & 证书
└─ kotlin/ ← Kotlin 元数据
常测漏洞
签名校验绕过:apksigner verify --verbose myApp.apk 可发现删除/篡改。
反编译链:apktool d → 得 smali;dex2jar → 得 jar;jadx-gui → 直接可读 Java。
加固识别:看 lib/ 下是否有多余 libjiagu.so、libshell.so;classes.dex 方法数极少即壳。
敏感信息:密钥放 assets/ 裸奔可被 apkanalyzer files cat --file /assets/secret.key myApp.apk 直接 dump。
2.dex
安卓可执行文件,类型exe.
| 区域 | 偏移 | 大小 | 作用 |
|---|---|---|---|
| header | 0x00 | 0x70 | 魔数、checksum、各表偏移/数量 |
| string_ids | 0x70 起 | string_ids_size × 4 |
字符串索引 → 指向 data 区偏移 |
| type_ids | 紧接 | type_ids_size × 4 |
描述符索引 Ljava/lang/String; |
| proto_ids | 紧接 | proto_ids_size × 12 |
方法原型(返回类型 + 参数列表) |
| field_ids | 紧接 | field_ids_size × 8 |
字段(所属类 + 类型 + 名称) |
| method_ids | 紧接 | method_ids_size × 8 |
方法(所属类 + 原型 + 名称) |
| class_defs | 紧接 | class_defs_size × 32 |
类定义(访问标志、超类、接口、代码偏移) |
| call_site_ids | 可选 | 8 × size | lambda/invokedynamic 常量池支持 |
| method_handles | 可选 | 8 × size | MethodHandle 常量池 |
| data | 任意 | 剩余 | 字符串内容、CodeItem、调试信息、注解、MapList 等 |
常见漏洞
| 漏洞类别 | 触发位置 | 利用场景 | 防御方案 |
|---|---|---|---|
| 1. 伪加密 / Magic 篡改 | header.magic | 把 dex\n038\0→crk\n038\0 让 jadx 打不开 |
系统加载前校验 magic;加固壳二次解密 |
| 2. 索引越界(OOB) | string_ids[i] > fileSize | 构造超大偏移 → 系统 mmap 访问非法地址崩溃 |
Android 7+ 已加 CheckDexFile;使用合法 dx/r8 编译 |
| 3. CodeItem 寄存器溢出 | registersSize < insSize | 导致栈溢出,可写任意地址 | ART 校验 registersSize ≥ insSize;老 4.x 需补丁 |
| 4. 动态加载恶意 DEX | DexClassLoader |
下载云端 dex → 反射执行任意代码 | 加载前 验签(RSA/ECC)+ MD5 白名单 |
| 5. 插入 System.loadLibrary 调用 | 修改 clinit smali |
启动即加载恶意 so,提权 | 开启 应用签名校验 + Google Play App Signing |
| 6. 调试/日志信息泄露 | debugInfoOff ≠ 0 | 发布包仍含行号 → 逆向轻松定位关键逻辑 | 发布用 minifyEnabled true + debuggable false |
| 7. 签名校验绕过(9695860) | META-INF 额外字段 | 利用 Java/C 对 short 符号解析差异,dex 被替换仍通过校验 | 升级到 2022-07-05 之后安全补丁;使用 apksigner v2 签名 |
| 8. MethodID 数量超限 | method_ids_size > 65536 | 触发安装失败 / 运行时 NoClassDefFoundError | 拆多 DEX + android.useAndroidX=true 自动 multidex |
![]() |


浙公网安备 33010602011771号