打印本文 打印本文  关闭窗口 关闭窗口  
茜泉词语益智的意思通过二分法的方式进行测试和排除
作者:佚名  文章来源:本站原创  点击数  更新时间:2018/5/12 19:45:42  文章录入:admin  责任编辑:admin

  颠末对相关函数的逆向阐发,最终确定了惹起非常的数据。起首来察看sub_100B6CBF0这个函数,对于GIF中的数据进行轮回查找,若是具有0x21和0xF9,那么当前数据就暗示是一个GraphicControlExtension布局,并接着对GraphicControlExtension数据进行解析。

  以iOS微信6.5.7版为例,解体发生时的挪用栈如下,解体发生于微信内部,申明是微信本身的GIF解析功能具有问题。

  接下来,这部门非常的数据就会进入sub_100B6CE90函数进行解析。因为ImageWidth为0,词语益智的意思导致与ImageHeight相乘后等于0,在new buffer时,传入的大小参数为0,这是第一个问题,但这并不会导致闪退,仍然能够分派一个很小的堆块。

  从模板解析的环境显示,在38帧一般的图片数据后,呈现了非常的数据。如图所示,因而我们将一般数据部门移除,仅保留非常数据,进行下一步精简。

  能够看到,残剩的非常数据的部门有10多万个,通过二分法的体例进行测试息争除。具体就是,删除一半后,测试别的一半能否能够导致解体。

  若是当前查找到的数据为0x2C,就暗示搜刮到了一个ImageDescriptor,跳出while轮回,进行现实图片数据的解析。这里也就长短常数据的起始位置!

  颠末测试,发觉iOS版QQ不受影响,因而能够解除iOS的GIF解析问题。

  为了更好地推进读者领会此中的机制,360NirvanTeam对于此事务进行了具体的手艺阐发。

  这个问题的底子缘由是微信实现了本人的GIF解析功能,但因为对输入数据的校验不严酷,导致非常的数据被解析,惹起解体。

  颠末样本精简,我们曾经发觉了惹起非常的数据位置。那么,此刻就需要连系现实的调试,来确定现实惹起非常的数据。

  颠末不竭的解除后,发觉非常的数据就鄙人图的紫色部门中。只需带有GIF的图像数据部门带有这些非常数据,就会导致iOS微信闪退。

  初始的GIF样本有1MB之多,晦气于定位惹起问题的具体数据,因而我们需要对样本进行精简。通过010 Editor打开原始样本GIF,操纵GIF模板解析,发生解析非常,这就暗示样本GIF的格局具有问题。

  若是解体了,申明惹起非常的数据在保留的一半中,反之则申明在删除的部门中。词语益智的意思

  在进行具体阐发之前,对解体缘由进行了猜测:(1)iOS系统自带GIF解析功能具有问题;(2)微信本人实现GIF解析的功能,因为对输入数据的校验不严酷,导致非常。

  惹起解体的代码如下,在else block中,sub_100B6C4F0的感化没有具体跟踪,猜测是进行lzw解压缩,并前往解压缩后的数据长度v21。

  在5月17日当天,这个GIF起头传播后,微信似乎在办事器端做了屏障,使得这个GIF无法被一般领受,但我们只需随便点窜一下GIF中的肆意一个字节,就能绕过这个屏障办法。

  5月26日薄暮,360平安研究员宋申雷对暗示,微信晓得这个缝隙两周了,可是拦截策略仍然不可,第一个crash呈现时就对样本做了hash 拦截,这都两周了,改一个字节的版本都有几多个了。

  同时因为iOS使用上架需要颠末苹果审核,需要额外花费必然时间,这就使得这个Bug即便修复后,所有用户也无法立即更新。

  而惹起非常的数据中,刚好具有0x2C这个环节的分隔符,导致下述红框中的数据被解析成了一个ImageDescriptor。能够看到,ImageWidth属性为0,ImageHeight属性为0x100。

  5月17日起,在各个微信群中传播着一个的GIF脸色。在iOS版的微信上,只需打开了包含这个GIF脸色的聊天窗口,就会形成微信闪退。

  此外,他还指出,此刻不在原图改字节了,间接把有缝隙的最初一帧机关到肆意的GIF中。

打印本文 打印本文  关闭窗口 关闭窗口