<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 業(yè)界動(dòng)態(tài) > 原理揭秘:iPhone調到1970年變磚?

原理揭秘:iPhone調到1970年變磚?

作者: 時(shí)間:2016-02-15 來(lái)源:Hackl0us 收藏
編者按:最近在網(wǎng)上沸騰的iOS時(shí)間bug鬧的沸沸揚揚,據說(shuō)是將iOS系統時(shí)間修改為1970/1/1,重啟后系統將永遠無(wú)法開(kāi)機。那么這個(gè)事情是真的嗎?如果是真的有什么合理的解釋嗎?

  想要真正了解這一bug,您可能需要以下知識。

本文引用地址:http://dyxdggzs.com/article/201602/286878.htm

  UNIX時(shí)間戳

  在確認這件事情的真假前,你需要了解的一個(gè)知識是Unix時(shí)間戳。

  iOS系統時(shí)間使用Unix時(shí)間戳(Unix epoch)表示(time_t數據類(lèi)型)。在系統中,使用系統位數個(gè)二進(jìn)制位儲存時(shí)間。

  Unix時(shí)間戳規定,UTC時(shí)區的1970年1月1日 0點(diǎn)0時(shí)0秒的值為0,以秒為單位,即每過(guò)一秒,二進(jìn)制數字加1。

  不能往前調,那我把時(shí)間往后調

  有些好奇的朋友拿出了自己手機,心想:既然我不能往回調,那我要是把時(shí)間使勁往后調能怎樣?

  細心的朋友發(fā)現了一個(gè)問(wèn)題,iOS系統可以設置的最大時(shí)間是2038年1月1日,并不能再往后設置。蘋(píng)果一定考慮到了這個(gè)問(wèn)題,為什么這么說(shuō)呢?

  我們拿32位系統舉例。在32位系統中,time_t是長(cháng)度為32位的,有符號整數(signed int)類(lèi)型。首個(gè)二進(jìn)制位是符號位,用來(lái)儲存正負。正數則為1970/1/1以后的時(shí)間,負數反之;其余的31位用來(lái)記數。當時(shí)間到達2038年1月19日 3時(shí)14分08秒時(shí),數值位全部向前進(jìn)1,導致符號位被置1,其余31位為0。介時(shí),將出現『時(shí)間回歸』的情況,系統時(shí)間變?yōu)?901年12月13日 20時(shí)45分52秒,系統將會(huì )出現錯誤?!?

  所以Apple為了避免這種問(wèn)題導致的錯誤發(fā)生,將最大時(shí)間期限定在了2038年1月1日 23時(shí)59分59秒。這樣即使超出這個(gè)范圍,在18天內也不會(huì )有太大問(wèn)題,況且32位設備到那個(gè)時(shí)候基本都已經(jīng)淘汰了。

  64位系統會(huì )不會(huì )受到這個(gè)影響呢?通過(guò)計算我們可以得到,292,277,026,596年12月04日 15時(shí)30分08秒是64位系統可以表示的最大時(shí)間。

  如果你想了解更多關(guān)于32位系統在2038將出現的問(wèn)題,請移步: Year 2038 problem。

  64位處理器的『時(shí)間回歸』問(wèn)題

  有了剛才的知識儲備,現在我們回到正題,開(kāi)始探討搭載64位處理器設備的時(shí)間bug。

  我們說(shuō)到了以UTC時(shí)區的1970年1月1日 0點(diǎn)0時(shí)0秒為界限,數值為0,時(shí)間正常流逝為正數,反之為負數。不過(guò)各位需要留意的是,時(shí)間受到時(shí)區的影響。

  假設一種情況,我原來(lái)是北京時(shí)區,假設將時(shí)間設置到了1970年1月1日 0點(diǎn)0時(shí)0秒,那么我將這個(gè)時(shí)間轉換為UTC時(shí)間,公式:北京時(shí)間 = GMT+8 = UTC+8,那么UTC時(shí)間則為1969年12月31日 16時(shí)0分0秒。這樣就會(huì )出現時(shí)間負值,即時(shí)間回歸bug觸發(fā),系統啟動(dòng)卡在Kernel階段,時(shí)間錯誤,無(wú)法繼續進(jìn)行啟動(dòng)。

  觸發(fā)bug條件與表現

  滿(mǎn)足以下條件,『時(shí)間回歸』bug被觸發(fā):

  系統版本:iOS 8.0 ~ iOS 9.3 beta 3?硬件設備:搭載64位處理器的設備(即處理器為A7~A9X的設備)



  進(jìn)入『設置』-『通用』-『時(shí)間與日期』,關(guān)閉『自動(dòng)設置』,并將時(shí)間修改為1970年1月1日,分秒任意。

  修改時(shí)間后,需要重啟設備。

  Bug觸發(fā)表現:iOS設備啟動(dòng)時(shí),卡在蘋(píng)果Logo,無(wú)法繼續啟動(dòng)。

  Bug危害分析

  黑客可以利用此bug通過(guò)無(wú)線(xiàn)局域網(wǎng)發(fā)出范圍性攻擊。

  當iOS設備連接到公共網(wǎng)絡(luò )時(shí),iOS系統將會(huì )使用NTP服務(wù)對時(shí)區、時(shí)間進(jìn)行校準。如果黑客發(fā)送惡意的NTP攻擊,將iOS系統時(shí)間校準至UTC < 0的時(shí)間,那么所有用戶(hù)設備均會(huì )受到此bug影響,在重新啟動(dòng)設備后無(wú)法使用設備。

  文章至此結束。

  如果文章存在不妥、紕漏,歡迎各位批評指正。



關(guān)鍵詞: iPhone

評論


相關(guān)推薦

技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>