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飞翔下载!

微信电脑
微信
大小:260.22MB  时间:05.25  赞:28

相关文章

  • 机票盲盒在哪里买
    机票盲盒在哪里买

    最近“机票盲盒”玩法受到了很多用户的欢迎,所谓机票盲盒就是随机抽取目的地和出发时间的机票,很多小伙伴都被吸引住了,那么机票盲盒在哪里购买呢,本期就给大家整理了机票盲盒购买教程。

    0
  • 微信转账备注在哪里看
    微信转账备注在哪里看

    使用微信不仅能够用来聊天,还可以给好友转账,有一些小伙伴在转账的时候,想要添加转账说明,那么添加之后,应该在哪里进行查看呢,这里就给大家带来微信查看转账备注的方法。

    0
  • 微信转账怎么备注文字
    微信转账怎么备注文字

    微信不仅是一款非常好用的社交媒体软件,还可以用来支付购买东西,有一些小伙伴在给别人转账的同时添加备注,但是不清楚怎么操作,本期中就给大家详细介绍一下微信转账备注文字的方法。

    0
  • 霸王茶姬免单口令5月18日
    霸王茶姬免单口令5月18日

    霸王茶姬的免单活动还在持续进行中,第四期的谜面问题还是万里木兰,但是这一次的口令答案是什么呢?很多的小伙伴在看到之后也是十分的懵的,接下来就将为大家来详细的介绍一下吧。

    0
  • 霸王茶姬免单口令5.17是什么
    霸王茶姬免单口令5.17是什么

    霸王茶姬上线了全新的免单活动,每天只要用户根据谜面去进行猜题之后,猜出口令答案就能够获取免单,5月17日的谜面已经出来了,那马答案是什么呢?本期将会为大家进行介绍一下。

    0
  • 霸王茶姬猜口令答案2024最新
    霸王茶姬猜口令答案2024最新

    用户前往霸王茶姬小程序在这里进行活动的参与就会有机会获取免费,只有输入正确的口令才能够获取免单,还有很多的小伙伴不知道口令答案是什么,本期将会为大家进行具体的介绍。

    0
  • 霸王茶姬免单入口在哪
    霸王茶姬免单入口在哪

    霸王茶姬开启了全新的免单活动,只要玩家进行活动在参与就能获取免单的机会,但是很多的小伙伴都不知道这个活动在哪里进行参与,本期就将为大家介绍一下具体的参与方法,不知道的小伙伴就一起来看看吧。

    0
  • 微信设置地震预警功能教程
    微信设置地震预警功能教程

    5月13日四川省地震局宣布对四川省地震预警平台微信小程序进行了升级优化,支持用户设置多个关注地,并且新增了地震速报提醒以及多地报警信息聚合页面,还有一些小伙伴不清楚具体应该怎么设置,这里就为大家整理了一下微信设置地震预警功能教程。

    0
  • 微信怎么设置优先支付顺序
    微信怎么设置优先支付顺序

    微信是一款非常受欢迎的在线社交软件,不仅可以在线聊天,还可以用于支付,购物起来更加的方便,有小伙伴想要根据个人喜好对支付方式的先后顺序进行设置,那么应该怎么操作呢,这里小编就给大家详细介绍一下微信设置优先支付顺序的方法。

    0
  • 微信语音如何取消铃声
    微信语音如何取消铃声

    在使用微信的过程中,支持用户对语音通话的铃声进行设置,根据自己的喜好进行选择,但是有很多用户在设置之后又不太想使用了,那么应该怎么取消呢,这里就为大家带来了微信语音取消铃声的方法。

    0

手机版 | 电脑版 | 客户端

本站所有资源均由网友上传,侵权请发邮件至 hnrshwl@163.com