首页
论坛
专栏
课程

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

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



[防守篇]2018看雪.TSRC CTF 挑战赛(团队赛)11月1日征题开启!

上传的附件:
最新回复 (27)
万抽抽 2 2014-11-9 15:00
2

0

good job!比我用表格写的好太多了
ThomasKing 6 2014-11-9 15:08
3

0

不错,学习了!
MindMac 5 2014-11-9 15:40
4

0

哈哈,原来你的文章里已经给了XML文件格式了 :)
silence刘 2014-11-9 20:49
5

0

曾经我也以为二进制xml结构没有具体的分析,后来在stackOverFlow上面看到有人也在讨论这个话题,顺藤摸瓜找到了一个blog,里面有对该文件结构的详述。希望能给有需要的朋友帮助。
http://justanapplication.wordpress.com/category/android/(需翻墙)
MindMac 5 2014-11-9 22:38
6

0

这个blog很不错, thx
viphack 4 2014-11-10 02:08
7

0

搞 安卓的越来越多了 哈哈 撸起
silence刘 2014-11-10 09:39
8

0

没事,国内网站这方面资料确实少,楼主也是很耐心看了AXMLPrinter2的源码
Gmxp 2 2014-11-12 19:48
9

0

看不懂,纯来顶帖
sniperhg 2014-12-16 10:48
10

0

最近也是看了androguard的源码对axml的分析部分,原来已经有前人把结构都贴出来了。
自己蛋疼看了好几天也分析出来了 T_T
netsniffer 2014-12-16 11:15
11

0

resources.arsc 也写个吧,呵呵
飞火 1 2015-3-2 15:55
12

0

good job!
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标记
欧阳若愚 2015-3-5 14:32
14

0

厉害,要好好看看
MindMac 5 2015-3-6 21:16
15

0

编码问题~
善良屠夫 2015-6-9 21:44
16

0

感谢楼主,请问画图工具使用的是什么工具
MindMac 5 2015-6-10 17:20
17

0

Visio~
kenlf 2015-9-9 09:48
18

0

好资料,拜读一下
kilybeer 2015-10-22 17:01
19

0

多谢楼主分享
寻找allblue 2016-4-11 11:04
20

0

非常好赞一个!!!!!!!!!!
NAGAじSKY 2016-4-11 15:38
21

0

用行动来支持你 应用
寻找allblue 2016-4-11 20:49
22

0

这么好的文章啊,这赶脚就是解析dex,xml等文件,做个apktool d的节奏啊
大王叫我挖坟 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的结尾
lynxtang 2016-8-23 10:53
24

0

非常感谢,正在学习。
apks 2017-5-5 00:12
25

0

楼主目前有没有类似AXMLPrinter2,能解析和生成二进制XML格式的工具?AXMLPrinter2只能解析不能重新生成
apks 2017-5-5 16:51
26

0

楼主用的visio是那个版本?
pzz 2017-10-12 17:52
27

0

做个记录。以后有时间再来
zhcxt 2018-11-13 20:48
28

0

看不懂
返回