GIF表情引发微信闪退?一张图引起微信崩溃!

时间:2017-05-27 11:20:31 来源:互联网  阅读次数:16777215 

微信是现在大部分人都在使用的聊天工具,上班日常几乎都要用到微信。那么,假如微信崩溃,你该怎么办?飞翔小编近日发现,有网友遇到了微信群里出现GIF表情引发微信闪退的事,这究竟是怎么回事呢?GIF表情引发微信闪退怎么办?快和飞翔小编一起来看看GIF表情引发微信闪退解决方法吧!

5 月 17 日左右,微信群中出现了可使 iOS 版微信闪退的GIF表情。

5 月 26 日傍晚, 360 安全研究员宋申雷表示,微信知道这个漏洞两周了,但是拦截策略依然不行,第一个crash出现时就对样本做了hash 拦截,这都两周了,改一个字节的版本都有多少个了。此外,他还指出,现在不在原图改字节了,直接把有漏洞的最后一帧构造到任意的GIF中。

为了更好地促进读者了解其中的机制,360NirvanTeam对于此事件进行了具体的技术分析。

一、背景情况

5 月 17 日起,在各个微信群中流传着一个天线宝宝的GIF表情。在iOS版的微信上,只要打开了包含这个GIF表情的聊天窗口,就会造成微信闪退。

GIF表情引发微信闪退?一张图引起微信崩溃!

在进行具体分析之前,对崩溃原因进行了猜测:(1)iOS系统自带GIF解析功能存在问题;(2)微信自己实现GIF解析的功能,由于对输入数据的校验不严格,导致异常。经过测试,发现iOS版QQ不受影响,因此可以排除iOS的GIF解析问题。

二、原因分析

1.     样本精简

初始的GIF样本有1MB之多,不利于定位引起问题的具体数据,因此我们需要对样本进行精简。通过010 Editor打开原始样本GIF,利用GIF模板解析,发生解析异常,这就表示样本GIF的格式存在问题。

从模板解析的情况显示,在 38 帧正常的图片数据后,出现了异常的数据。如图所示,因此我们将正常数据部分移除,仅保留异常数据,进行下一步精简。

GIF表情引发微信闪退?一张图引起微信崩溃!

可以看到,剩余的异常数据的部分有 10 多万个,通过二分法的方式进行测试和排除。具体就是,删除一半后,测试另外一半是否可以导致崩溃。如果崩溃了,说明引起异常的数据在保留的一半中,反之则说明在删除的部分中。

GIF表情引发微信闪退?一张图引起微信崩溃!

经过不断的排除后,发现异常的数据就在下图的紫色部分中。只要带有GIF的图像数据部分带有这些异常数据,就会导致iOS微信闪退。 

GIF表情引发微信闪退?一张图引起微信崩溃!

2.     调试分析

经过样本精简,我们已经发现了引起异常的数据位置。那么,现在就需要结合实际的调试,来确定实际引起异常的数据。以iOS微信6.5. 7 版为例,崩溃发生时的调用栈如下,崩溃发生于微信内部,说明是微信自身的GIF解析功能存在问题。

GIF表情引发微信闪退?一张图引起微信崩溃!

经过对相关函数的逆向分析,最终确定了引起异常的数据。首先来观察sub_100B6CBF0 这个函数,对于GIF中的数据进行循环查找,如果存在0x21 和0xF9,那么当前数据就表示是一个GraphicControlExtension结构,并接着对GraphicControlExtension数据进行解析。 

GIF表情引发微信闪退?一张图引起微信崩溃!

GIF表情引发微信闪退?一张图引起微信崩溃!

如果当前查找到的数据为0x2C,就表示搜索到了一个ImageDescriptor,跳出while循环,进行实际图片数据的解析。这里也就是异常数据的起始位置! 

GIF表情引发微信闪退?一张图引起微信崩溃!

正常的帧数据的ImageDescriptor数据如下:

GIF表情引发微信闪退?一张图引起微信崩溃!

而引起异常的数据中,恰好存在0x2C这个关键的分隔符,导致下述红框中的数据被解析成了一个ImageDescriptor。可以看到,ImageWidth属性为0,ImageHeight属性为0x100。

GIF表情引发微信闪退?一张图引起微信崩溃!GIF表情引发微信闪退?一张图引起微信崩溃!

接下来,这部分异常的数据就会进入sub_100B6CE90 函数进行解析。由于ImageWidth为0,导致与ImageHeight相乘后等于0,在new buffer时,传入的大小参数为0,这是第一个问题,但这并不会导致闪退,仍然可以分配一个很小的堆块。

GIF表情引发微信闪退?一张图引起微信崩溃!

引起崩溃的代码如下,在else block中,sub_100B6C4F0 的作用没有具体跟踪,猜测是进行lzw解压缩,并返回解压缩后的数据长度v21。由于v10 = 0x0000010000000000,截断成unsigned int后为0,这就导致 v10 – 1 – v21 为负数,作为memset第三个参数,相应的unsigned int形式就是一个很大的正数。在memset时,就会导致崩溃,这是第二个问题。

GIF表情引发微信闪退?一张图引起微信崩溃!

三、总结

这个问题的根本原因是由于微信实现了自己的GIF解析功能,但由于对输入数据的校验不严格,导致异常的数据被解析,引起崩溃。

在 5 月 17 日当天,这个GIF开始流传后,微信似乎在服务器端做了屏蔽,使得这个GIF无法被正常接收。但我们只要随便修改一下GIF中的任意一个字节,就能绕过这个屏蔽措施。同时由于iOS应用上架需要经过苹果审核,需要额外耗费一定时间。这就使得这个Bug即使修复后,所有用户也无法立刻更新。目前最新的iOS微信6.5. 8 版本仍然存在崩溃的问题。

以上就是飞翔小编为大家带来的GIF表情引发微信闪退原因分析,GIF表情引发微信闪退解决方法的全部内容啦,有没有对大家有所帮助呢?更多资讯和攻略,尽在52z飞翔下载!

微信最新版本
微信最新版本
系统:Android/   大小:260.22MB   更新日期:05.25MB

   立即下载

  • 机票盲盒在哪里买
    机票盲盒在哪里买
    浏览:0   时间:2024-05-21   来源:互联网
    最近“机票盲盒”玩法受到了很多用户的欢迎,所谓机票盲盒就是随机抽取目的地和出发时间的机票,很多小伙伴都被吸引住了,那么机票盲盒在哪里购买呢,本期就给大家整理了机票盲盒购买教程。
  • 微信转账备注在哪里看
    微信转账备注在哪里看
    浏览:0   时间:2024-05-21   来源:互联网
    使用微信不仅能够用来聊天,还可以给好友转账,有一些小伙伴在转账的时候,想要添加转账说明,那么添加之后,应该在哪里进行查看呢,这里就给大家带来微信查看转账备注的方法。
  • 微信转账怎么备注文字
    微信转账怎么备注文字
    浏览:0   时间:2024-05-21   来源:互联网
    微信不仅是一款非常好用的社交媒体软件,还可以用来支付购买东西,有一些小伙伴在给别人转账的同时添加备注,但是不清楚怎么操作,本期中就给大家详细介绍一下微信转账备注文字的方法。
  • 霸王茶姬免单口令5月18日
    霸王茶姬免单口令5月18日
    浏览:0   时间:2024-05-18   来源:互联网
    霸王茶姬的免单活动还在持续进行中,第四期的谜面问题还是万里木兰,但是这一次的口令答案是什么呢?很多的小伙伴在看到之后也是十分的懵的,接下来就将为大家来详细的介绍一下吧。
  • 霸王茶姬免单口令5.17是什么
    霸王茶姬免单口令5.17是什么
    浏览:0   时间:2024-05-17   来源:互联网
    霸王茶姬上线了全新的免单活动,每天只要用户根据谜面去进行猜题之后,猜出口令答案就能够获取免单,5月17日的谜面已经出来了,那马答案是什么呢?本期将会为大家进行介绍一下。
微信最新版本
微信最新版本
《微信最新版本》是一款免费聊天工具,更多不同的功能都可以进行使用,在线就能够自由的进行聊天,还能够进行更多好友的添加[查看详情]
  • 其它名称:
  • 软件类型:社交通讯
  • 软件更新:2024-05-25
  • 软件语言:简体中文
  • 软件平台:Android/

软件推荐

更多

软件排行榜

更多

下载声明 | 法律声明 | 版权声明 | 友情链接 | 发布软件 | 最新更新

本站为非盈利性网站,不接受任何广告。本站所有资源均由网友上传,如有侵权,请发邮件至 hnrshwl@163.com

晋ICP备2024046785号-1