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

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

2014-11-9 13:42
62373

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


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 6
支持
分享
最新回复 (29)
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
2
good job!比我用表格写的好太多了
2014-11-9 15:00
0
雪    币: 370
活跃值: (1180)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
3
不错,学习了!
2014-11-9 15:08
0
雪    币: 293
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
4
哈哈,原来你的文章里已经给了XML文件格式了 :)
2014-11-9 15:40
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
曾经我也以为二进制xml结构没有具体的分析,后来在stackOverFlow上面看到有人也在讨论这个话题,顺藤摸瓜找到了一个blog,里面有对该文件结构的详述。希望能给有需要的朋友帮助。
http://justanapplication.wordpress.com/category/android/(需翻墙)
2014-11-9 20:49
0
雪    币: 293
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
6
这个blog很不错, thx
2014-11-9 22:38
0
雪    币: 219
活跃值: (783)
能力值: (RANK:290 )
在线值:
发帖
回帖
粉丝
7
搞 安卓的越来越多了 哈哈 撸起
2014-11-10 02:08
0
雪    币: 79
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
没事,国内网站这方面资料确实少,楼主也是很耐心看了AXMLPrinter2的源码
2014-11-10 09:39
0
雪    币: 44
活跃值: (15)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
9
看不懂,纯来顶帖
2014-11-12 19:48
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
最近也是看了androguard的源码对axml的分析部分,原来已经有前人把结构都贴出来了。
自己蛋疼看了好几天也分析出来了 T_T
2014-12-16 10:48
0
雪    币: 53
活跃值: (280)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
resources.arsc 也写个吧,呵呵
2014-12-16 11:15
0
雪    币: 238
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
12
good job!
2015-3-2 15:55
0
雪    币: 25
活跃值: (57)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
遇到一个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标记
2015-3-4 11:20
0
雪    币: 25
活跃值: (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害,要好好看看
2015-3-5 14:32
0
雪    币: 293
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
15
编码问题~
2015-3-6 21:16
0
雪    币: 201
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
感谢楼主,请问画图工具使用的是什么工具
2015-6-9 21:44
0
雪    币: 293
活跃值: (225)
能力值: (RANK:250 )
在线值:
发帖
回帖
粉丝
17
Visio~
2015-6-10 17:20
0
雪    币: 64
活跃值: (134)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
好资料,拜读一下
2015-9-9 09:48
0
雪    币: 11
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
多谢楼主分享
2015-10-22 17:01
0
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
20
非常好赞一个!!!!!!!!!!
2016-4-11 11:04
0
雪    币: 7
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
21
用行动来支持你 应用
2016-4-11 15:38
0
雪    币: 44
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
这么好的文章啊,这赶脚就是解析dex,xml等文件,做个apktool d的节奏啊
2016-4-11 20:49
0
雪    币: 191
活跃值: (195)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
23
谢谢分享,学了,补一点自己理解的大大文章后面解析的结构的内容
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的结尾
2016-6-5 16:34
0
雪    币: 1027
活跃值: (256)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
24
非常感谢,正在学习。
2016-8-23 10:53
0
雪    币: 36
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
楼主目前有没有类似AXMLPrinter2,能解析和生成二进制XML格式的工具?AXMLPrinter2只能解析不能重新生成
2017-5-5 00:12
0
游客
登录 | 注册 方可回帖
返回
//