佳木斯湛栽影视文化发展公司

主頁 > 知識庫 > GIF心情引發(fā)微信閃退?這里有最強技術分析

GIF心情引發(fā)微信閃退?這里有最強技術分析

熱門標簽:阿里云 使用U盤裝系統(tǒng) 智能手機 百度競價點擊價格的計算公式 美圖手機 網(wǎng)站建設 硅谷的囚徒呼叫中心 檢查注冊表項
 

5 月 17 日擺布,微信群中出現(xiàn)了可使 iOS 版微信閃退的GIF心情,雷鋒網(wǎng)(公眾號:雷鋒網(wǎng))今早報道了關于該事件的大致情況。 5 月 26 日傍晚, 360 安適研究員宋申雷對雷鋒網(wǎng)體現(xiàn),微信知道這個漏洞兩周了,但是攔截策略依然不行,第一個crash出現(xiàn)時就對樣本做了hash 攔截,這都兩周了,改一個字節(jié)的版本都有多少個了。此外,他還指出,現(xiàn)在不在原圖改字節(jié)了,直接把有漏洞的最后一幀構造到任意的GIF中。

為了更好地促進讀者了解其中的機制,360NirvanTeam對于此事件進行了具體的技術分析。

本文作者「 360 涅槃團隊的安適研究員王兆威」,授權雷鋒網(wǎng)發(fā)布。

一、配景情況

5 月 17 日起,在各個微信群中流傳著一個天線寶寶的GIF心情。在iOS版的微信上,只要打開了包羅這個GIF心情的聊天窗口,就會造成微信閃退。

在進行具體分析之前,對瓦解原因進行了猜測:(1)iOS系統(tǒng)自帶GIF解析功能存在問題;(2)微信本身實現(xiàn)GIF解析的功能,由于對輸入數(shù)據(jù)的校驗不嚴格,導致異常。經(jīng)過測試,發(fā)現(xiàn)iOS版QQ不受影響,因此可以排除iOS的GIF解析問題。

二、原因分析

1.     樣本精簡

初始的GIF樣本有1MB之多,倒霉于定位引起問題的具體數(shù)據(jù),因此我們需要對樣本進行精簡。通過010 Editor打開原始樣本GIF,利用GIF模板解析,發(fā)生解析異常,這就體現(xiàn)樣本GIF的格式存在問題。

從模板解析的情況顯示,在 38 幀正常的圖片數(shù)據(jù)后,出現(xiàn)了異常的數(shù)據(jù)。如圖所示,因此我們將正常數(shù)據(jù)部分移除,僅保存異常數(shù)據(jù),進行下一步精簡。

可以看到,剩余的異常數(shù)據(jù)的部分有 10 多萬個,通過二分法的方式進行測試和排除。具體就是,刪除一半后,測試別的一半是否可以導致瓦解。如果瓦解了,說明引起異常的數(shù)據(jù)在保存的一半中,反之則說明在刪除的部分中。

經(jīng)過不停的排除后,發(fā)現(xiàn)異常的數(shù)據(jù)就不才圖的紫色部分中。只要帶有GIF的圖像數(shù)據(jù)部分帶有這些異常數(shù)據(jù),就會導致iOS微信閃退。 

2.     調(diào)試分析

經(jīng)過樣本精簡,我們已經(jīng)發(fā)現(xiàn)了引起異常的數(shù)據(jù)位置。那么,現(xiàn)在就需要結合實際的調(diào)試,來確定實際引起異常的數(shù)據(jù)。以iOS微信6.5. 7 版為例,瓦解發(fā)生時的調(diào)用棧如下,瓦解發(fā)生于微信內(nèi)部,說明是微信自身的GIF解析功能存在問題。

經(jīng)過對相關函數(shù)的逆向分析,最終確定了引起異常的數(shù)據(jù)。首先來不雅觀察sub_100B6CBF0 這個函數(shù),對于GIF中的數(shù)據(jù)進行循環(huán)查找,如果存在0x21 和0xF9,那么當前數(shù)據(jù)就體現(xiàn)是一個GraphicControlExtension結構,并接著對GraphicControlExtension數(shù)據(jù)進行解析。 

如果當前查找到的數(shù)據(jù)為0x2C,就體現(xiàn)搜索到了一個ImageDescriptor,跳出while循環(huán),進行實際圖片數(shù)據(jù)的解析。這里也就是異常數(shù)據(jù)的起始位置! 

正常的幀數(shù)據(jù)的ImageDescriptor數(shù)據(jù)如下:

而引起異常的數(shù)據(jù)中,恰好存在0x2C這個關鍵的分隔符,導致下述紅框中的數(shù)據(jù)被解析成了一個ImageDescriptor??梢钥吹剑琁mageWidth屬性為0,ImageHeight屬性為0x100。

標簽:煙臺 懷化 山南 通遼 湘潭 黃山 賀州 湖北

巨人網(wǎng)絡通訊聲明:本文標題《GIF心情引發(fā)微信閃退?這里有最強技術分析》,本文關鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權問題,煩請?zhí)峁┫嚓P信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡,涉及言論、版權與本站無關。
  • 相關文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266
    苍溪县| 龙海市| 合川市| 陵川县| 车险| 深泽县| 金阳县| 桃源县| 玉树县| 丘北县| 武宁县| 阜城县| 兴宁市| 深州市| 襄城县| 台北县| 恭城| 丽水市| 佳木斯市| 张家港市| 宜兰县| 喀喇| 甘德县| 大港区| 克拉玛依市| 富裕县| 溆浦县| 东宁县| 都安| 双牌县| 泾阳县| 涡阳县| 佛教| 汝州市| 富川| 肥乡县| 永丰县| 神农架林区| 盐津县| 麻江县| 丹东市|