您現在的位置:海峽網>新聞中心>IT科技>科技數碼
      分享

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

      5月26日傍晚,360安全研究員宋申雷對表示,微信知道這個漏洞兩周了,但是攔截策略依然不行,第一個crash出現時就對樣本做了hash 攔截,這都兩周了,改一個字節的版本都有多少個了。

      此外,他還指出,現在不在原圖改字節了,直接把有漏洞的最后一幀構造到任意的GIF中。

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

      一、背景情況

      5月17日起,在各個微信群中流傳著一個天線寶寶的GIF表情。在iOS版的微信上,只要打開了包含這個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版本仍然存在崩潰的問題。

      責任編輯:海凡

      最新科技數碼 頻道推薦
      進入新聞頻道新聞推薦
      情聚八閩,共啟新程!福建省姓氏源流研
      進入圖片頻道最新圖文
      進入視頻頻道最新視頻
      一周熱點新聞
      下載海湃客戶端
      關注海峽網微信
      ?

      職業道德監督、違法和不良信息舉報電話:0591-87095414 舉報郵箱:service@hxnews.com

      本站游戲頻道作品版權歸作者所有,如果侵犯了您的版權,請聯系我們,本站將在3個工作日內刪除。

      溫馨提示:抵制不良游戲,拒絕盜版游戲,注意自我保護,謹防受騙上當,適度游戲益腦,沉迷游戲傷身,合理安排時間,享受健康生活。

      CopyRight ?2016 海峽網(福建日報主管主辦) 版權所有 閩ICP備15008128號-2 閩互聯網新聞信息服務備案編號:20070802號

      福建日報報業集團擁有海峽都市報(海峽網)采編人員所創作作品之版權,未經報業集團書面授權,不得轉載、摘編或以其他方式使用和傳播。

      版權說明| 海峽網全媒體廣告價| 聯系我們| 法律顧問| 舉報投訴| 海峽網跟帖評論自律管理承諾書

      友情鏈接:新聞頻道?| 福建頻道?| 新聞聚合
      亚洲AV人无码激艳猛片| 伊人久久综在合线亚洲2019| 亚洲成人一级电影| 亚洲一区二区在线免费观看| 亚洲人成人网站色www| 亚洲综合精品网站| 国产精品久久亚洲一区二区| 亚洲私人无码综合久久网| 亚洲免费中文字幕| 亚洲日本香蕉视频| 亚洲最新在线视频| 亚洲国产成人精品久久| 亚洲国语在线视频手机在线| 亚洲视频在线观看网站| 亚洲黄色免费在线观看| 亚洲精品视频观看| 亚洲人成免费电影| 亚洲AV无码乱码在线观看代蜜桃| 亚洲免费网站在线观看| 亚洲一欧洲中文字幕在线| 亚洲五月综合网色九月色| 亚洲www在线观看| 亚洲中文字幕无码mv| 亚洲国产成人久久综合| 大桥未久亚洲无av码在线| 国产亚洲综合一区二区三区| mm1313亚洲精品国产| 亚洲男女内射在线播放| 久久综合亚洲色HEZYO国产| 亚洲精品自产拍在线观看| 国产精品亚洲成在人线| 亚洲成a人片在线观看无码| 亚洲电影一区二区| 亚洲国产精品久久网午夜| 亚洲一区二区三区在线观看蜜桃| 国产成人精品亚洲日本在线 | 亚洲国产无线乱码在线观看| 亚洲欧洲无码AV不卡在线| 色欲aⅴ亚洲情无码AV蜜桃| 国产亚洲精品美女久久久久 | 无码天堂va亚洲va在线va|