为什么修改下时间苹果手机就“变砖”?
2016-02-16 18:49 苹果手机 bug 时间

这个Bug涉及到Unix时间戳的问题。

i黑马讯(杨博丞)2月16日报道  苹果用户被“坑”了,原因是如果你把iPhone的时间设定为1970年1月1日,然后关机再开机,手机就很有可能变成一块“砖头”。

据说,目前运行iOS 8或更新系统的64位处理器设备几乎无一幸免,32位处理器设备则没有受到影响。

这则消息让不少苹果手机的使用者“炸开了锅”,甚至有不少人好奇,非要尝试一下,结果使得爱机成功变砖。

不过,“聪明”的人为了试验,专门跑去苹果零售店去把展示用的iPhone、iPad都给修改了……事实上,这种操作对于体验机是无效的,因为苹果店里的展示机均带自动恢复功能,不管做了什么操作都可以自动恢复,修改时间对这些手机也不会有影响。

今日,苹果官方对此事正式做出了回应, “如果将系统时间手动设置为1970年5月或者更早,iPhone、iPad、iPod touch将会无法重启,这是一个Bug,将会在接下来的iOS版本更新中修复这一问题。”

2038年后,很多软件将运行异常

关于这个bug,你需要了解一个Unix时间戳的概念。

Unix时间戳是指,从1970年01月01日 0:00:00的值为0,以秒为单位,即每过一秒,二进制数字加1,不考虑闰秒。在大多数情况下,UNIX时间戳把时间储存为32位,而这个数值不能小于零。

一个小时表示UNIX时间戳格式为3600秒

一天表示UNIX时间戳为86400秒

一年表示UNIX时间戳为31556926秒

这些换算格式均不计算闰秒。那么所看到的UTC时间就是从1970年这个时间点起,到具体时间共有多少秒,而这个秒数就是Unix时间戳。

可能说到这里有人会问,为什么Unix时间戳的值被设定为0?

这还要从Unix诞生说起。Unix于1969年发布雏形,最早是基于硬件60Hz的时间计数。到了1971年底《UnixProgrammer's Manual》一书出版,其中定义的Unix Time是以1971年1月1日00:00:00作为起始时间,每秒增长60。之后考虑到32位整数的范围,如果每秒60个数字,那么两年半就会再次循环一轮,但这个循环周期有136年之长。最后,改为了以秒为计数的单位,一方面考虑到所有电脑文件不可能在1970年前创立,又考虑到方便记忆和计算方便,所以就变为了现在的1970年。如果你需要表示以前的时间,那么一般只能用自己定义的数据结构。

通俗易懂地说,Unix 时间戳就是一串数字串。但按我们刚才所讲Unix时间戳的规定,换算值是不能小于零的,一旦小于零则会出现无法工作的问题。

那为什么只有64位处理器的设备才有时间bug?这是64位处理器的时间回归问题所造成的。正常来说,时间流逝为正数,但需要注意的是时间会受到时区的影响。

我们对此进行了换算试验,我们首先以UTC(世界标准时间)时区1970年1月1日0时0分0秒为界限,得出的数值为-28800,而将时间调至同样日期的8时0分0秒时,得出的数值为0。时间正常流逝为正数,反之为负数。不过各位需要留意的是,时间受到时区的影响。

所以这就产生了一个问题,出现时间负值,一旦出现负值,时间就会回归触发Bug,系统启动卡在Kernel阶段,时间错误,无法继续进行启动。

而有网友说,搭载32位系统的iPhone不受这个问题,但你们有所不知的是,当32位的系统时间往大调时,同样会出现如同64位系统1970年的类似问题,这个Bug被称作2038。

最初计算机操作系统是32位,而时间也是用32位表示。32位能表示的最大值是2147483647。而一年的总秒数是31536000,2147483647/31536000= 68.1

也就是说32位能表示的最长时间是68年,而实际上到2038年01月19日03时14分07秒,便会到达最大时间,过了这个时间点,所有32位操作系统时间便会变为10000000 00000000 00000000 00000000,也就是数值位全部向前进1,导致符号位被置为1,其余31位全部为0。届时,将会出现时间回归的问题,很多软件就会运行异常。

而64位系统会不会受到这个影响呢?通过计算我们得到,292,277,026,596年12月04日15时30分08秒是64位系统可以到达的最大时间。

也许此时,有些既好奇又细心的朋友去做“试验”,但你们一定会发现iOS系统可以设置的最大时间只能是2038年1月1日,不能再往后设置。这是因为苹果事先已经考虑到了这个问题,为了避免此问题,苹果将最大时间期限定在了2038年1月1日 23时59分59秒。即便超过范围也不会出现大问题,而且在那时32位的系统已经基本淘汰了。但为何苹果没有考虑到1970年的时间回归问题呢?

目前苹果已经表示将在下一版本更新中修复该问题。如果黑客利用此Bug通过无线局域网发出范围性攻击,后果将不堪设想。

不过,值得一提的是,当iOS设备连接到公共网络时,iOS系统将会使用NTP服务对时区、时间进行校准。如果黑客发送恶意的NTP攻击,将iOS系统时间校准至UTC<0的时间,那么所有用户设备均会受到此bug影响,在重新启动设备后无法使用设备。

如果已经变砖,你该怎么办?

1.你可以拿着变砖的iPhone去找苹果售后求助。苹果官方称,受到该问题影响的任何用户都应该联系苹果技术支持以寻求帮助。但处理方式不尽相同,有的用户表示已经被整机更换。

2.“民间高手”解决方案。切断iOS设备电源,放置10分钟后再重新连接电源,设备之后会重置时间,问题便得以解决。不过,想要切断iOS设备电源意味着,需要拆机并拆出电池,当然这仅限于iPhone,你要知道iPad的是无法拆卸电池的。

3.电量充足情况下,等待数小时,当Unix时间戳的数值大于等于0,系统时间生效,便可正常开机。