首页
社区
课程
招聘
[原创]AndroidManifest二进制文件格式分析
2014-11-9 13:42 61021

[原创]AndroidManifest二进制文件格式分析

2014-11-9 13:42
61021
因为没有找到公开格式描述文档,所以根据AXMLPrinter2的源码分析而来,难免有错误,还望指正 :)


[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞4
打赏
分享
最新回复 (29)
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
万抽抽 2 2014-11-9 15:00
2
0
good job!比我用表格写的好太多了
雪    币: 368
活跃值: (1181)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
ThomasKing 6 2014-11-9 15:08
3
0
不错,学习了!
雪    币: 287
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
MindMac 5 2014-11-9 15:40
4
0
哈哈,原来你的文章里已经给了XML文件格式了 :)
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
silence刘 2014-11-9 20:49
5
0
曾经我也以为二进制xml结构没有具体的分析,后来在stackOverFlow上面看到有人也在讨论这个话题,顺藤摸瓜找到了一个blog,里面有对该文件结构的详述。希望能给有需要的朋友帮助。
http://justanapplication.wordpress.com/category/android/(需翻墙)
雪    币: 287
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
MindMac 5 2014-11-9 22:38
6
0
这个blog很不错, thx
雪    币: 219
活跃值: (738)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
viphack 4 2014-11-10 02:08
7
0
搞 安卓的越来越多了 哈哈 撸起
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
silence刘 2014-11-10 09:39
8
0
没事,国内网站这方面资料确实少,楼主也是很耐心看了AXMLPrinter2的源码
雪    币: 44
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
Gmxp 2 2014-11-12 19:48
9
0
看不懂,纯来顶帖
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sniperhg 2014-12-16 10:48
10
0
最近也是看了androguard的源码对axml的分析部分,原来已经有前人把结构都贴出来了。
自己蛋疼看了好几天也分析出来了 T_T
雪    币: 53
活跃值: (250)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
netsniffer 2014-12-16 11:15
11
0
resources.arsc 也写个吧,呵呵
雪    币: 238
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
飞火 1 2015-3-2 15:55
12
0
good job!
雪    币: 25
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
illa 2015-3-4 11:20
13
0
遇到一个axml中字符串每个字符占1个字节而非两个字节,这是什么情况?

0B0B76657273696F6E4E616D6500  versionName 而非

0B00760065007200730069006F006E0043006F00640065000000 v e r s i o n N a m e

这两种编码用string_chunk_flag flags描述
enum string_chunk_flag flags 描述了utf 与0标记
雪    币: 25
活跃值: (62)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
欧阳若愚 2015-3-5 14:32
14
0
厉害,要好好看看
雪    币: 287
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
MindMac 5 2015-3-6 21:16
15
0
编码问题~
雪    币: 201
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
善良屠夫 2015-6-9 21:44
16
0
感谢楼主,请问画图工具使用的是什么工具
雪    币: 287
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
MindMac 5 2015-6-10 17:20
17
0
Visio~
雪    币: 54
活跃值: (129)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kenlf 2015-9-9 09:48
18
0
好资料,拜读一下
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kilybeer 2015-10-22 17:01
19
0
多谢楼主分享
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寻找allblue 2016-4-11 11:04
20
0
非常好赞一个!!!!!!!!!!
雪    币: 7
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
NAGAじSKY 2016-4-11 15:38
21
0
用行动来支持你 应用
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
寻找allblue 2016-4-11 20:49
22
0
这么好的文章啊,这赶脚就是解析dex,xml等文件,做个apktool d的节奏啊
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
大王叫我挖坟 3 2016-6-5 16:34
23
0
谢谢分享,学了,补一点自己理解的大大文章后面解析的结构的内容
0x414-0x417 0x00100102    Start Tag Chunk开始标识
0x418-0x41B 0x60                大小  则此chunk块从0x414 -0x473
0x41C-0x420 0x2                  行号 在源码中是第2行
0x420-0x423 0xFFFFFFFF     固定值
0x424-0x427 0xFFFFFFFF     Namespace Uri命令空间-1 为空,
0x428-0x42B  0xE                Name即            manifest
0x42C-0x430  0x00140014   标签类型,是开始还是结束标签等
0x430-0x433   0x03             该标签属性个数3个属性
0x434-0x437   0x0              class Attribute 标签包含的类属性
0x438-0x44B   B00000000000000FFFFFFFF0800001001000000     第一个属性值------------------------------------------------------
属性是由于长度为5个数组注册,数组含义是
[NameSpaceUri,Name,ValueString,Type,Data]
上面就是
[0xB,0x0,0xFFFFFFFF,0x10000008,0x01],第4个值要右移24位
[11,0,-1,16,1]
第一个 是前面start Namespace Chunk得出的Uri对应的Prefix为android
第二个是属性名称字符串索引,可得为versionCode
第三个 ?????大大说当类型是string时候,第三个跟第五个一样
第四个 值是数据类型,包括string ,Attribute,Reference、Float ,Int Hex Int Boolean(具体看AXMLPrinter2源码 test/AXMLPrinter中的getAttributeValue函数)
这里是整数值
第五个 是属性的内容,为1
综上第一个属性解析后是
android:VersionCode="1"

0x44C-0x45F  0B00000001000000100000000800000310000000    第二个属性值------------------------------------------------------
[0xB,0x1,0x10,0x03000008.0x10]
也就是[11,0,-1,48,1]
48表示Float
综上解析是
android:versionName="1.0"

0x460-0x473  FFFFFFFF0D0000000F000000080000030F000000     第三个属性值
[0xFFFFFFFF,0x0D,0x0F,0x03000008,0x0F]
也就是[-1,13,15,48,15]

第五个属性15是索引com.android.test
综上解析是
package="com.android.test"

综合得到<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.test" android:versionCode="1" android:versionName="1.0" >
0x474-0x477  0x00100102    Start Tag Chunk开始标识
0x478-0x47F  0x4C      大小,那么范围是 0x474-0x4BF
0x47C-0x47F  0x07     行号,第7行
0x480-0x483  0xFFFFFFFF   固定值
0x484-0x487  0xFFFFFFFF  命令空间为-1,即前缀为空,嘿嘿其实那些自定义的空间就有前缀有木有,索引大部分这里是-1啦
0x488-0x48B  0x11    name=17查找索引得到uses-sdk
0x48C-0x38F 0x00140014  是开始标签
0x490-0x493 0x2  有2个属性
0x494-0x497  0x0   标签包含的类属性为0
0x498-0x4AB  0B00000002000000FFFFFFFF080000100E000000  第一个属性--------------------------------
[0xB,0x2,0xFFFFFFFF,0x10000008,0xE]
[11,2,-1,16,14]
android:minSdkVBersion="14"

0x4AC-0x4BF 0B00000003000000FFFFFFFF0800001013000000 第二个属性-------------------------
[0xB,0x3,0xFFFFFFFF,0x10000008,0x13]
[11,3,-1,16,19]
综上解析是
android:targetSdkVersion="19"

综合得到  <uses-sdk ndroid:minSdkVersion="14" android:targetSdkVersion="19" />
0x4C0-0x4C3   0x00100103  End Tag Chunk结束标志
0x4C4-0x4C7  0x18  大小,则此chunk范围是0x4c0-0x4D7
0x4C8-0x4CB  0x09  第9行         
0x4CC-0X4CF 0xFFFFFFFF  固定值,未知
0x4D0-0x4D3 0xFFFFFFFF  为-1.推测对应 /
0x4D4-0x4D7 0x11  是uses-sdk的结尾
雪    币: 1025
活跃值: (196)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
lynxtang 2016-8-23 10:53
24
0
非常感谢,正在学习。
雪    币: 36
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
apks 2017-5-5 00:12
25
0
楼主目前有没有类似AXMLPrinter2,能解析和生成二进制XML格式的工具?AXMLPrinter2只能解析不能重新生成
游客
登录 | 注册 方可回帖
返回