🧬 Android AXML 魔改分析与修复全流程(含 010 模板 & 自动导出)
适用于:逆向 / 安全分析 / APK 修复
工具:010 Editor + 自定义 BT 模板 + 脚本
碎碎念:本来最开始是做游戏安全分析的,苦于不会营销自己,没生意转做桌面应用安全分析,后来还是没生意,又转做了web项目安全分析,结果还是喝西北风,现在转到移动应用安全分析了。因为没有文化背景和学历,年少轻狂选择了肄业,现在养家艰难,希望有个不挑马的伯乐把我给收了吧~
📌 一、问题背景
今天朋友委托对一个apk的AndroidManifest.xml进行修复,这份AndroidManifest.xml 被魔改(obfuscation),导致:
🔍 二、AXML 正常结构
标准 AXML:
[XML Header]
[StringPool]
[ResourceMap]
[Namespace + Tag 流]
💣 三、魔改手法(本案例,因相关规章制度原因此贴不附带样本)
1️⃣ 头部插入假 chunk(核心手法)
00 00 08 00 08 00 00 00
解析为:
type = 0x0000
headerSize = 8
chunkSize = 8
📌 作用:
👉 把 StringPool 偏移从 0x08 推到 0x10
2️⃣ root 内 padding
00 00 00 00
📌 作用:
- 干扰 chunkSize 校验
- 让解析器误判结束位置
- 正常的axml文件设计很紧凑,不会在分块中放置连续4个字节的空白
- 如图所示

3️⃣ 文件尾垃圾字节
08 00 00 00
📌 作用:
- 破坏 root chunkSize 与 FileSize 一致性
- 上一张图的padding字节后就是垃圾字节
⚠️ 四、为什么 BT 模板会崩
原模板:
ResChunkHeader header;
StringChunk stringChunk;
👉 它假设:
StringPool 紧跟在 XML header 后
但实际:
[XML]
[假 chunk ❌]
[StringPool ✔]
❗ 结果
模板在 0x08 解析:
type = 0
chunkSize = 8
继续错位读取:
scStringCount = 0x001c0001 ❌(巨大值)
👉 最终崩溃:
scStringOffsets 越界
🛠 五、手动修复 AXML
✅ 步骤
① 删除假 chunk
偏移:
0x08 ~ 0x0F
删除:
00 00 08 00 08 00 00 00
⚠️ 必须 Delete Bytes(物理删除)
② 修改 root chunkSize
根据是否删除 padding:
| 情况 |
chunkSize |
| 保留 padding |
88 0C 01 00 |
| 删除 padding |
84 0C 01 00 |
③ 删除尾部垃圾
08 00 00 00
✅ 修复后正确结构
03 00 08 00 88 0C 01 00
01 00 1C 00 14 58 00 00
👉 0x08 == 01 00 就说明对齐成功
🧠 六、通用去混淆规则
✔ 保留
0x0001 StringPool
0x0180 ResourceMap
0x0100~0x0104 XML 节点
❌ 丢弃
0x0000 chunk
chunkSize < 8
越界 chunk
尾部垃圾
⚙️ 七、完美 BT 模板设计要点
一个稳定模板必须:
✅ 1. 扫描 StringPool
while (...) {
if (type == 0x0001) break;
}
✅ 2. 不信 root chunkSize
real_end = min(root.chunkSize, FileSize())
✅ 3. 防御性读取
if (count * 4 > chunkSize) skip;
✅ 4. 支持重同步
if (chunk非法)
try next offset
🧪 八、自动导出净化版 AXML
✔ 使用 010 Script
脚本功能:
- 跳过假 chunk
- 复制合法 chunk
- 修正 chunkSize
- 导出 clean AXML
👉 使用方法:
1. 打开原 AXML
2. 运行脚本
3. 输出 clean_AndroidManifest.xml
🧰 九、完整工具链
| 功能 |
工具 |
| 分析 |
010 Editor + analysis.bt |
| 解析 |
hardened / perfect.bt |
| 修复 |
手动 / script |
| 导出 |
export_clean_axml.1sc |
🧬 十、本案例魔改总结
| 手法 |
作用 |
| 假 chunk |
破坏结构对齐 |
| padding |
干扰长度 |
| 尾巴垃圾 |
破坏一致性 |
👉 本质:
让解析器错位,而不是破坏数据
🚀 十一、进阶建议
如果你做逆向/安全分析,建议:
🔥 做一个 AXML 自动修复工具
支持:
- 批量 APK
- 自动检测 fake chunk
- 自动重建 chunk 流
- 输出标准 manifest
🧾 十二、可分享的模板和基于Editor Script Language开发的一键修复脚本
👉 原 010 仓库的模板
AndroidManifest.zip
(3.71 KB, 下载次数: 6)
👉 针对魔改AXML修改后的模板
AndroidManifest_perfect_fixed_v4.zip
(5.39 KB, 下载次数: 10)
👉 一键修复脚本
export_clean_axml.zip
(2.07 KB, 下载次数: 0)
版本陈旧,新版本:
export_clean_axml_v4.zip
(1.38 KB, 下载次数: 11)