DaveC
ref Mark Lim

引用一下版主文章:
資安研究員 Carl Schou 發現, iPhone 手機在加入名為 “%p%s%s%s%s%n” 的 Wi-Fi 後, 即使重新啟動手機或更改名稱, 也會永久禁用 Wi-Fi
Quick Analysis for the SSID Format String Bug

看了這篇果然是 format string 的問題。在連線到(或者應該說掃描,嘗試連線?)wifi時,OS會增加一筆 log:
{ASSOC+} Attempting Apple80211AssociateAsync $ssid
系統先呼叫 msg= [NSString stringWithFormat:”Attempting Apple80211AssociateAsync %@“, ssid]
DaveC
這時 msg 是 “Attempting Apple80211AssociateAsync %p%s%s%s%s%n”
然後 msg2= [NSString stringWithFormat:”{%@+} %@“, “ASSOC”, msg]
於是msg2是“{ASSOC+} Attempting Apple80211AssociateAsync %p%s%s%s%s%n”
之後這個字串傳進 WFLog, 偏偏他的log function支援不固定參數的 format string, 於是就 runtime error 了。
DaveC
(很久沒寫 objective C,上面程式碼請當 pesudo code 就好🤐)
不過會寫成這樣,而不是在呼叫log時傳 format進去:http://logger.info/...(“{ASSOC+} Attempting Apple80211AssociateAsync %@“, ssid)
可能是有些寫成 define 吧。
DaveC
so 這個bug 可以開採?
永遠的真田幸村
應該是可以 不過蘋果應該近期修正掉釋出更新
載入新的回覆