可以让电脑死机的小小代码
有关编程的好笑的笑话太多了，其中最有趣的一个笑话是：为什么程序员在淋浴的时候死了？因为洗发液的瓶子说：“打泡，洗头，重复”。你没理解吗？这就是所谓的无限循环。程序员严格遵循这一清晰指令，“重复”执行指令循环——直到死亡。你觉得不可理喻吗？多年来，电脑一直陷入这样的圈套。
（图片来源：Getty Images） 事实上，这是经典的“fork炸弹”（fork bomb）攻击——即耗尽电脑的资源，让人无法再使用它。fork炸弹非常精简，有时只有短短几个字符。 一位用户在网上作出解释，这组字符在一些计算机语言中定义某个无意义的功能，然后让计算机反复执行它。计算机不会问为什么——它只会服从命令。但是，请不要在家里运行这一代码，因为它有可能会导致你的系统变得非常迟缓，甚至造成死机。 2013年，据剑桥大学的研究人员估计，电脑病毒每年对全球经济造成的损失达3120亿美元。即使很小的程序错误也会造成很大的损失——比如放错位置的一行代码可能让战舰不能移动。那么，这些短小的代码具体是如何导致巨大灾难的呢？ “给出一套指令，计算机就会执行——但是计算机只会逐字逐句的执行，” 威斯康星大学麦迪逊分校（University of Wisconsin-Madison）的计算机专家本·利布利特（Ben Liblit）说。 “它们不具有常识。” 为什么计算机会陷入死循环？利比利特提到，那是因为电脑循环计算数千次甚至数百万次是一件非常有用的事。正是通过这一方式，电脑可以在一瞬间完成人类需要很长时间才能完成的计算——比如编辑一份长长的名单，确保首字母都是大写的。对循环次数并没有限制，这就意味着不管在理论上，还是在实践中，计算机可以一直循环下去，直到它无法运行。 计算机可以做一些有用的事，计算机系统可以发挥很大作用，但计算机也会出现故障，计算机系统也会出故障。（图片来源：Getty Images ） 历史记载，首例造成问题的fork炸弹发生于1978年。与上述例子类似，它涉及的程序也十分短小——昵称是“wabbit”——它会无限次备份自己。 这是一种恶意程序，它常常伪装成日常的文件，并作为电邮附件发送至受害者的电脑。如果受害者下载并运行该文件，那就会引爆等待着的fork炸弹。 F-Secure的网络安全专家米科·许珀宁（Mikko Hypponen）称，还可以制作一种压缩文件夹，当你去解压缩时，它会不断解压出越来越多的内部文件。这被称为“解压炸弹”，一个著名的例子是一个在未解压时只有42比特的病毒。它可以塞满整个硬盘，并且占满内存，让杀毒软件失效。 2014年，有人发现加密敏感数据的软件存在严重的缺陷，它被成为Heartbleed，攻击者可以通过这一错误窃取隐私数据，比如密码和信用卡信息。但是，正如萨里大学的艾伦·伍德沃德（Alan Woodward）所说，发起攻击的代码非常短——只有四比特。 最近，对心怀恶意的黑客来说，这些打包后十分短小的病毒代码非常有用。比如在2010年，有人报告发现“推特病毒”，它会打开多个弹出窗口。电脑使用者一旦把鼠标指针移至被感染的推文上就会激活它。连白宫的官方推特账户也在一时间受到影响。 在Mandalorian公司工作的网络安全专家史蒂夫·洛德（Steve Lord）也常常发现非常短小的恶意程序。他说，最近他在研究的是把而已代码插入单个数据包内。数据包是电脑之间通过互联网发送的小段数据。这个病毒相当复杂，它会破坏VPN安全连接。 或许造成电脑故障的最短小的代码是“0”。任何数除以零都无法得到确定的数字，这是计算机无法处理的。 因为放错位置的“0”，导致整艘约克城号航空母舰（USS Yorktown）在演习中停止运转。（图片来源：Getty Images） 洛德指出，这一情况出现在1997年9月的约克城号航空母舰上。航母上运行的某一程序中，数字0放错了地方，它所带来的错误导致整艘船在演习过程中被迫停止运行。它后来被拖回港口。 “感谢上帝这不是发生在战斗中。”洛德说。 洛德还提到Tiny Banker这一恶意软件，它会感染电脑的浏览器，当用户试图登录网银账户时，它就会复制登录信息。它的大小是20000比特，已经感染了全世界数千个系统。 “就视窗系统的程序来说，它小到可笑的地步。”洛德说。 但这一切都不意味着电脑在根本上容易出错——它只是说明工程师面临棘手的挑战，他们要想办法保护电脑免受恶意攻击或出现内部错误。洛德认为，虚拟世界的一点小错误就会造成严重的后果，这一现象带有一定的“美感”。不过了，美国海军恐怕不会同意。 利布利特说，计算机有一种能力，它会坚定不移的贯彻执行，不论结果的好坏。他说：“计算机可以做一些有用的事，计算机系统可以发挥很大作用，但计算机也会出现故障，计算机系统也会出故障”至少，在大多数情况下，你可以关机重启。 请访问 BBC Future 阅读 英文原文。