一个GIF表情搞死微信!最强技术分析在此
5月17日左右,微信群中出现了可使iOS版微信闪退的GIF表情。
5月26日傍晚,360安全研究员宋申雷对表示,微信知道这个漏洞两周了,但是拦截策略依然不行,第一个crash出现时就对样本做了hash 拦截,这都两周了,改一个字节的版本都有多少个了。
此外,他还指出,现在不在原图改字节了,直接把有漏洞的最后一帧构造到任意的GIF中。
为了更好地促进读者了解其中的机制,360NirvanTeam对于此事件进行了具体的技术分析。
一、背景情况
5月17日起,在各个微信群中流传着一个天线宝宝的GIF表情。在iOS版的微信上,只要打开了包含这个GIF表情的聊天窗口,就会造成微信闪退。
在进行具体分析之前,对崩溃原因进行了猜测:(1)iOS系统自带GIF解析功能存在问题;(2)微信自己实现GIF解析的功能,由于对输入数据的校验不严格,导致异常。
经过测试,发现iOS版QQ不受影响,因此可以排除iOS的GIF解析问题。
二、原因分析
1、样本精简
初始的GIF样本有1MB之多,不利于定位引起问题的具体数据,因此我们需要对样本进行精简。通过010 Editor打开原始样本GIF,利用GIF模板解析,发生解析异常,这就表示样本GIF的格式存在问题。
从模板解析的情况显示,在38帧正常的图片数据后,出现了异常的数据。如图所示,因此我们将正常数据部分移除,仅保留异常数据,进行下一步精简。
可以看到,剩余的异常数据的部分有10多万个,通过二分法的方式进行测试和排除。具体就是,删除一半后,测试另外一半是否可以导致崩溃。
如果崩溃了,说明引起异常的数据在保留的一半中,反之则说明在删除的部分中。
经过不断的排除后,发现异常的数据就在下图的紫色部分中。只要带有GIF的图像数据部分带有这些异常数据,就会导致iOS微信闪退。
2、调试分析
经过样本精简,我们已经发现了引起异常的数据位置。那么,现在就需要结合实际的调试,来确定实际引起异常的数据。
以iOS微信6.5.7版为例,崩溃发生时的调用栈如下,崩溃发生于微信内部,说明是微信自身的GIF解析功能存在问题。
经过对相关函数的逆向分析,最终确定了引起异常的数据。首先来观察sub_100B6CBF0这个函数,对于GIF中的数据进行循环查找,如果存在0x21和0xF9,那么当前数据就表示是一个GraphicControlExtension结构,并接着对GraphicControlExtension数据进行解析。
如果当前查找到的数据为0x2C,就表示搜索到了一个ImageDescriptor,跳出while循环,进行实际图片数据的解析。这里也就是异常数据的起始位置!
正常的帧数据的ImageDescriptor数据如下:
而引起异常的数据中,恰好存在0x2C这个关键的分隔符,导致下述红框中的数据被解析成了一个ImageDescriptor。可以看到,ImageWidth属性为0,ImageHeight属性为0x100。
接下来,这部分异常的数据就会进入sub_100B6CE90函数进行解析。由于ImageWidth为0,导致与ImageHeight相乘后等于0,在new buffer时,传入的大小参数为0,这是第一个问题,但这并不会导致闪退,仍然可以分配一个很小的堆块。
引起崩溃的代码如下,在else block中,sub_100B6C4F0的作用没有具体跟踪,猜测是进行lzw解压缩,并返回解压缩后的数据长度v21。
由于v10 = 0x0000010000000000,截断成unsigned int后为0,这就导致 v10 – 1 – v21 为负数,作为memset第三个参数,相应的unsigned int形式就是一个很大的正数。在memset时,就会导致崩溃,这是第二个问题。
三、总结
这个问题的根本原因是微信实现了自己的GIF解析功能,但由于对输入数据的校验不严格,导致异常的数据被解析,引起崩溃。
在5月17日当天,这个GIF开始流传后,微信似乎在服务器端做了屏蔽,使得这个GIF无法被正常接收,但我们只要随便修改一下GIF中的任意一个字节,就能绕过这个屏蔽措施。
同时由于iOS应用上架需要经过苹果审核,需要额外耗费一定时间,这就使得这个Bug即使修复后,所有用户也无法立刻更新。
目前最新的iOS微信6.5.8版本仍然存在崩溃的问题。
相关文章
-
二合一/13寸/15寸笔记本都来了!华为发飙挑战PC最强者
又一次,华为把首发新品的发布会地点放在了柏林,而非国内。发布会的主角是3款电脑,在MateBook 第一代产品试水高端二合一电脑后,这一次,华为显然有在发力的打算...
2017-05-24 13:34:02阅读全文 -
疑似iPhone 8听筒面板曝光:3D识别新技术取代指纹
深夜时分,爱否科技总编@Mr厉害 晒出一张疑似iPhone 8听筒位置前面板的图。...
2017-05-24 13:24:19阅读全文 -
打造最强装备《宝藏世界》装备晋升玩法解析
想要拥有完美的属性和强大的战斗力,那么装备的打磨绝对不可少,在《宝藏世界》里,想要打造好的装备也绝对不是一件简单的事儿,里面的材料千百种,玩家需要细致了解每...
2017-05-24 13:22:18阅读全文 -
性能很强劲 联想最强游戏本Y920六月开卖!
在联想刚刚发布的笔记本新品中,最激动人心当然当属Legion Y920游戏本了,这款游戏本的起售价暂定于2700美元约合1.86万元...
2017-05-20 13:32:06阅读全文 -
Android O中不会再有这些怪怪的表情了
或许不是这些表情太怪,只是大家习惯了iPhone中默认的表情符号。谷歌旧版emoji可爱有余,但辨识度不足,很多人根本不知道这些表情想要表达什么情绪...
2017-05-20 13:24:04阅读全文 -
Windows 10正式版更新:SSD用户快升
统计显示,Windows 10创意者更新的使用人数已经过半,其次是年度更新(Build 14393)。今天,微软为年度更新正式版用户(version 1607)推送了累积更新...
2017-07-21阅读全文 -
微软宣布Win10秋季创意者:尴尬名称最终被换
大家还记得吗,之前微软公布了Windows 10秋季创意者更新的名字,不过却是十分尴尬...
2017-07-21阅读全文 -
神级播放器MPC-HC死亡:你可知道这么多人抄了它
近日,影音播放玩家们迎来了一个不幸的消息;神级播放器MPC-HC宣告完结,除非有开发者继续跟进该项目,否则MPC-HC将走向死亡。...
2017-07-21阅读全文 -
勒索病毒漏洞还在!金山毒霸新发现:电脑秒变“矿工”
勒索蠕虫(WannaCry)病毒疯狂传播已过去两个多月了,但令人吃惊的是,仍然有相当数量的系统未修补其所利用的永恒之蓝高危漏洞。...
2017-07-21阅读全文 -
经典不死!11年免费播放器MPC-HC闪电归来
播放软件众多,MPC-HC(Media Player Classic Home Cinema)可以说是极为经典的一个,基于经典版Windows Media Player 6.4...
2017-07-21阅读全文