突然,到朋友圈發(fā)現(xiàn),你女朋友撤回了一條消息還親了你一口這個(gè)消息是怎么回事啊,原來是微信出現(xiàn)了bug,問題出在"& # 8237"這個(gè)字符上。(由于該字符無法直接打出來,以下用\x代替),如果你撤回了一條消息,就會(huì)出現(xiàn)這個(gè)問題哦!雖然微信已經(jīng)修復(fù)了這個(gè)bug,但是大神已經(jīng)將這個(gè)bug插件下載下來了,大家復(fù)制到微信目錄下面去就可以使用了。
你女朋友撤回了一條消息還親了你一口微信bug插件原理
這個(gè)問題可以說是微信的一個(gè)BUG,問題出在"& # 8237"這個(gè)字符上。(由于該字符無法直接打出來,以下用\x代替)
當(dāng)你撤回一條消息時(shí),微信將會(huì)發(fā)送一條"XXX撤回了一條消息”給對(duì)方,這條消息是如何產(chǎn)生的呢?
——以下為推測(cè),只是舉例說明BUG可能發(fā)生的原理——
——以下偽代碼,JAVA和C混寫,學(xué)過一點(diǎn)點(diǎn)代碼的應(yīng)該都可以看懂——
——服務(wù)端——
當(dāng)你撤回消息時(shí),微信會(huì)執(zhí)行以下命令:
sendMessageToReceiver("“%s”撤回了一條消息",getSenderName());
其中,getReceiverName命令是獲取發(fā)送人,也就是撤回人的用戶名。
情景一:你的用戶名是“劉看山”,這條消息就會(huì)變成
消息①:“劉看山”撤回了一條消息
√完美
情景二:你的用戶名是“劉看山\n”,\n是換行符,這條消息就會(huì)變成:
消息er:“劉看山
”撤回了一條消息
×這樣不好看,于是微信會(huì)屏蔽昵稱中\(zhòng)n\b\t等特殊字符。
情景三:你的用戶名是“劉看山\x萌個(gè)了賣并”,這條消息會(huì)變成
消息③:“劉看山\x萌個(gè)了賣并”撤回了一條消息
√看起來也沒什么錯(cuò)
——從服務(wù)端到客戶端的分割線——
客戶端收到服務(wù)端發(fā)來的這條消息,需要將這條消息展示給用戶,那么對(duì)以上的消息①和③(②已經(jīng)被屏蔽),分別產(chǎn)生的效果是:
消息①:“劉看山”撤回了一條消息
消息③:“劉看山”撤回了一條消息并賣了個(gè)萌
注意,此時(shí)在內(nèi)存中,消息③的內(nèi)容還是:“劉看山\x萌個(gè)了賣并”撤回了一條消息
現(xiàn)在再來說說“& # 8237”這個(gè)特殊字符。就像\n在windows是換行,\t是輸出一個(gè)TAB一樣,這個(gè)特殊字符的作用是:將此消息倒序。那倒序時(shí)究竟發(fā)生了什么呢?現(xiàn)在模擬一下微信輸出時(shí)處理該消息的步驟,用下劃線表示光標(biāo)所在的位置:
字符串:“劉看山\x萌個(gè)了賣并”撤回了一條消息
·處理到“看”時(shí),要輸出的消息為
“劉看_”撤回了一條消息
·處理到“山”時(shí):
“劉看山_”撤回了一條消息
·處理到特殊字符時(shí):
“劉看山”撤回了一條消息_ (注意:此時(shí)光標(biāo)移動(dòng)到了末尾)
·處理到“萌”時(shí):
“劉看山”撤回了一條消息_萌
·處理到“并”時(shí):
劉看山”撤回了一條消息_并賣了個(gè)萌
這樣,用戶就會(huì)看到各種奇奇怪怪的消息了。
只要微信在客戶端中屏蔽了這個(gè)字符,那么這個(gè)BUG也就不存在了。
你女朋友撤回了一條消息還親了你一口微信bug插件使用方法
其實(shí)非常的簡(jiǎn)單,你只需要把這個(gè)插件放到根目錄下面去就可以使用了。就會(huì)出現(xiàn)這個(gè)問題,逗一逗你的男/女朋友吧!
- PC官方版
- 安卓官方手機(jī)版
- IOS官方手機(jī)版