幾乎每過(guò)一段時(shí)間,iOS上就會(huì)出現(xiàn)一些神秘消息“代碼”,發(fā)送相關(guān)文本將導(dǎo)致系統(tǒng)或者聊天APP崩潰。筆者還記得去年在微信上還出現(xiàn)了,發(fā)送“15個(gè)句號(hào)”導(dǎo)致某些品牌的手機(jī)卡死的BUG。其中這些多與系統(tǒng)或者程序的文本渲染器有關(guān),而Youtube UP主Tom Scott發(fā)現(xiàn),安卓上也中招了。
簡(jiǎn)單來(lái)說(shuō),如圖所示的這個(gè)“黑點(diǎn)”表情,發(fā)送和接收都沒有問題,但當(dāng)點(diǎn)擊它的時(shí)候,就會(huì)造成當(dāng)前程序卡死崩潰,老外反饋主要是Whatsapp。
Tom Scott分析后發(fā)現(xiàn),這又是一次Unicode的把戲。Unicode是計(jì)算機(jī)之間傳輸文本的國(guó)際標(biāo)準(zhǔn),包含數(shù)以萬(wàn)計(jì)的字符,并且支持N種語(yǔ)言。
不過(guò),在Unicode之中也有一些隱形的字符,比如定義寬度、定義從左向右(從右向左,阿拉伯/希伯來(lái)語(yǔ)使用)、定義連接詞、定義高低音的代碼。這個(gè)黑點(diǎn)的“詭計(jì)”就在于,使用OBJ編碼后發(fā)現(xiàn),我們看到的黑點(diǎn)之后其實(shí)還有一長(zhǎng)串字符,編造者使用寬度為0、且定義左右順序的字符進(jìn)行了隱藏。
當(dāng)你點(diǎn)擊時(shí),安卓的文本渲染器需要判斷你點(diǎn)擊的是哪個(gè),這個(gè)過(guò)程存在BUG,導(dǎo)致程序崩潰。
所以,嚴(yán)格來(lái)講,這是安卓系統(tǒng)的BUG,理論上對(duì)于任何安卓消息應(yīng)用都有效,不僅僅是Whatsapp;第二,其實(shí)黑點(diǎn)只是創(chuàng)造者利用的一個(gè)表情而已,如果掌握了原理,這個(gè)表情可以任意替換。
-
iOS
+關(guān)注
關(guān)注
8文章
3400瀏覽量
155125 -
安卓
+關(guān)注
關(guān)注
5文章
2178瀏覽量
59834 -
BUG
+關(guān)注
關(guān)注
0文章
156瀏覽量
16220
發(fā)布評(píng)論請(qǐng)先 登錄
睿擎平臺(tái)CoreDump實(shí)戰(zhàn)指南:系統(tǒng)崩潰現(xiàn)場(chǎng)的完美捕獲 | 技術(shù)解析
關(guān)于蜂鳥E203內(nèi)核中斷硬件實(shí)現(xiàn)中斷嵌套的設(shè)計(jì)
wiznet+w5500程序卡死怎么解決?
真隨機(jī)數(shù)和偽隨機(jī)數(shù)的區(qū)別
M058多次寫入數(shù)據(jù)閃存會(huì)崩潰怎么解決?
STM32G473進(jìn)行雙bank升級(jí)的時(shí)候,進(jìn)行FLASH的批量擦除回卡死是怎么回事?
STM32G473 flash擦除時(shí)程序卡死,為什么?
STM32G473 flash擦除時(shí)程序卡死的原因?
如何避免存儲(chǔ)示波器再次崩潰?
國(guó)科微榮獲前程無(wú)憂“2025杰出雇主”稱號(hào)
STM32F103 flash的app區(qū)域有上一次的殘留代碼,會(huì)造成死機(jī)怎么解決?
STM32H743做數(shù)字電源,上電后首次進(jìn)入HRTIM中斷卡死怎么解決?
在Windows? 11上安裝OpenVINO? 2021.4時(shí),安裝程序崩潰了,安裝失敗怎么解決?
KS-Soft:一站式集合20個(gè)TCP/IP實(shí)用程序

一個(gè)“黑點(diǎn)”表情,會(huì)造成當(dāng)前程序卡死崩潰?
評(píng)論