当前位置: 首页 > 网络学院 >

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)

新客网 XKER.COM 时间:2015-06-11 19:20:10来源:monster TSRC博客  评论:

【前言】

日前谷歌公开了一个今年1月份更新的漏洞。这个漏洞修复了一个存在于Android 5.1版本以下图片渲染的问题,可以查看相关链接。

9patch是Android上特有的一种图片格式,就是在普通的png图片的基础了增加了一些像素的边框,使之具有可随意拉伸、缩放的功能。

【9patch文件格式概述】

前面说到9patch文件是一种特殊png图片,我们先来看下png文件结构。

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)_新客网

在png文件的起始处是一个被称为signature的东西,即文件签名,很多人把它叫做文件头,长度为8个字节,这8个字符的值是固定的。

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)_新客网

在signature之后是一个chunk块序列,每个chunk块的大小都是不定的,里面存储着图像数据,chunk块的结构如下:

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)_新客网

伪代码描述如下:

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)_新客网

在chunk的起始处是chunk长度,被定义为4字节大端整数。这个chunk长度仅仅是chunkdata的长度,不包括自身、type和crc的长度,因此整个chunk块的长度还需要加上这三个域的大小。之后一个4字节的字符序列,只能由英文字符组成,表示chunk块的类型。随后chunk数据部分,长度由开始的length指定,当length为0时这个域可以不存在。最后是整个块的CRC校验码。再往后?就是下一个chunk块了啊。

下面说下本文的主角9patch文件。它是包含类型为”npTc”在chunk的png文件。看下google官方的定义(已过滤不相关的若干代码):

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)_新客网

来看一个普通的9patch文件

Android 9patch 图片解析堆溢出漏洞分析(CVE-2015-1532)_新客网

这个9patch文件的npTc块位于第一个IHDR块之后,chunk长度为0x20,data域的值都为0,图中指出了numXDivs、numYDivs和numColors的位置,依次可以推出其他数据域的值。

如果您喜欢本文请分享给您的好友,谢谢!本文来源:monster TSRC博客

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)