iPhone 日期时间设定为1970/1/1变砖 到底是真是假

  • 来源: 驱动中国 作者: 张凡   2016-02-15/14:49
  • 这两天突然在网上盛传有人的iPhone 6因为自己设定了日期为1970/1/1,重启后变成了砖头,到底是网友的恶搞还是真的有这么回事,想要弄清楚事情的真假,必须知道其原理。

    201601071013563048

    iOS系统时间使用Unix时间戳表示timestamp。在系统中,使用系统位数个二进制位储存时间。在32位系统中,time_t是长度为32位的,有符号整数(signed int)类型。首个二进制位是符号位,用来储存正负。正数则为1970/1/1以后的时间,负数反之;其余的31位用来记数。当时间到达2038年1月19日3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。介时,将出现“时间回归”的情况,系统时间变为1901年12月13日20时45分52秒,系统将会出现错误。Apple为了避免这种问题导致的错误发生,将最大时间期限定在了2038年1月1日23时59分59秒。

    20160213_181843_488

    而在64位的系统中,基于UTC时区来说,北京时间的1970/1/1将变成1969年12月31日16时0分0秒。这样就会出现时间负值,即时间回归bug触发,系统启动卡在Kernel阶段,时间错误,无法继续进行启动,微博中也有网友晒出了其出现这种情况的设备型号。

    20160213_181843_921

    而解决办法也非常简单,拆机并拆出电池,放置10分钟后重新安装。电量充足的情况下,等待数小时,当Unix时间戳的数值大于等于0,系统时间生效,可正常开机。已越狱的机子添加Cydia源http://repo.ziph0n.com/并安装BrickingDate插件。不过这个bug很可能被黑客利用,当iOS设备连接到公共网络时,iOS系统将会使用NTP服务对时区、时间进行校准。如果黑客发送恶意的NTP攻击,将iOS系统时间校准至UTC < 0的时间,那么所有用户设备均会受到此bug影响,在重新启动设备后无法使用设备。


    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多