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

9158APP 0

微信是现在大多数人使用的聊天工具,工作中几乎每天都会使用微信。那么,如果微信崩溃了怎么办?飞翔小编近日发现,有网友遇到微信群中出现GIF表情,导致微信崩溃。到底是怎么回事? GIF表情导致微信崩溃怎么办?快来和飞翔小编一起看看如何解决GIF表情导致微信崩溃的问题吧!

5月17日左右,微信群中出现了一个导致iOS版微信崩溃的GIF表情。

5月26日晚,360安全研究员宋深雷表示,微信已经意识到该漏洞已有两周时间,但拦截策略仍不见成效。当第一次崩溃发生时,样本被散列并拦截。已经两周了,改了一个字节。有多少个版本?此外,他还指出,没有改变原始图像的字节,而是将存在漏洞的最后一帧直接构造成任意GIF。

为了更好地帮助读者理解其中的机制,360NirvanTeam对本次事件进行了具体的技术分析。

一、背景

5月17日起,一张天线宝宝的GIF表情在各微信群中流传。在iOS版微信上,只要打开包含该GIF表情的聊天窗口,微信就会崩溃。

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

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

2.原因分析

1. 样本简化

初始GIF样本为1MB,不利于定位导致问题的具体数据,因此我们需要对样本进行精简。通过010 Editor打开原始示例GIF,并使用GIF模板对其进行解析。出现解析异常,说明示例GIF格式有问题。

从模板分析发现,在38帧正常图像数据后,出现了异常数据。如图所示,我们因此去除了正常数据部分,仅保留异常数据以供下一步细化。

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

可以看到,剩余的异常数据部分超过10万个,通过二分法进行测试和排除。具体来说,删除一半后,测试另一半是否会导致崩溃。如果崩溃了,说明引起异常的数据在retained的一半,否则说明在delete的部分。

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时,传入的size参数为0。这是第一个问题,但这不会导致崩溃。您仍然可以分配一小部分。堆栈块。

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

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

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

三、总结

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

这张GIF在5月17日开始流传后,微信似乎在服务器端屏蔽了它,导致该GIF无法正常接收。但只要我们修改GIF中的任意一个字节,就可以绕过这个封锁措施。同时,由于iOS应用程序需要经过苹果的审核,因此需要一些额外的时间。这使得即使bug修复后所有用户也无法立即更新。最新iOS微信版本6.5。 8仍然存在崩溃问题。

以上就是飞翔小编为大家带来的GIF表情导致微信崩溃的原因分析以及GIF表情导致微信崩溃的解决方案。对你有帮助吗?更多资讯及攻略,请访问9158app!