【科普】国际变砖日1970年1月1日的缘由

2016年5月14日 0 条评论 521 次阅读 0 人点赞

前段时间,苹果设备时间调至1970年1月1号就变砖的事情吵得沸沸扬扬。根据苹果官网报告的漏洞,如果用户将iOS系统设备的日期调至1970年1月1日,设备便会停止运行。然而,有一位宝宝表示不服,他用自己的手机试验,结果付出了手机白屏的代价……

而这位宝宝就是大家熟知的TFboys中的王源。

我笑而不语

那么产生bug的原因到底是什么呢?

如果要探究IOS时间Bug,则必须要介绍一下Unix时间戳,IOS系统时间是使用Unix时间戳(Unix epoch)表示(time_t数据类型)的。Unix时间戳规定,UTC时区的1970年1月1日 0点0时0秒的值为0,以秒为单位,即每过一秒,二进制数字加1。0c840562-5fcf-4942-a75e-b08d0bb48027

以32位系统为例,在32位系统中,time_t是长度为32位的,首个二进制位是符号位,用来储存正负。正数则为1970/1/1以后的时间,负数反 之;其余的31位用来记数。当时间到达2038年1月19日3时14分08秒时,数值位全部向前进1,导致符号位被置1,其余31位为0。此时,将出现 【时间回归】的情况,系统时间变为1901年12月13日20时45分52秒,系统将会出现错误。为了避免这个错误,苹果将最大时间设定为2038年1月 1日23时59分59秒。而64位系统的最大时间限额将为292,277,026,596年12月04日15时30分08秒,基本可以说是不受这个限制的 了。

知道上面这个知识点后,我们再来说一下时区对时间的影响,大家都知道,我们所在的时区是【北京时区】,假如我们将时间设置在1970年1月1日0点0时0 秒,北京时间=GMT+8=UTC+8,UTC时间则为1969年12月31日16时0分0秒。这样就会出现时间负值,即时间回归bug触发,系统启动卡 在Kernel阶段,时间错误,则无法继续进行启动。

Bug危害分析

黑客可以利用此bug通过无线局域网发出范围性攻击。

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

好想试试哦~

flydust

这个人太懒什么东西都没留下

文章评论(0)