paint-brush
当编码决定城市的生存经过@pepitoscrespo
323 讀數
323 讀數

当编码决定城市的生存

经过 pepitoscrespo19m2024/10/07
Read on Terminal Reader

太長; 讀書

C++ 能在现实世界的系统控制和安全性方面胜过 Rust 吗?深入了解黑客拯救 LuxCity 的战斗,探索这两种语言的极限
featured image - 当编码决定城市的生存
pepitoscrespo HackerNoon profile picture
0-item


我们程序员经常陷入争论中 — C++ 与 Rust、高级编程与低级编程。但真正的挑战不仅仅是构建优雅的系统;而是在当今的网络世界中保护它们,恶意代码总是潜伏其中。无论您的代码看起来多么完美,忽略潜在威胁都会导致灾难。


修补安全漏洞或发布下一个更新是不够的。真正的战斗是当您的系统被入侵时(是的,是当,而不是如果)做出有效的响应。这意味着实施主动入侵检测、自动化防御机制,有时还要亲自动手使用低级编程来从源头上解决威胁。


战场不仅限于高级逻辑,还延伸到系统最核心的部分,只有最熟练的开发人员才能有效反击。如果你没有做好应对这一层级攻击的准备,世界上所有的安全功能都救不了你。在网络安全领域,没有响应能力的防御是不够的。


Mighty C 家族的黑暗面、Rootkit 的崛起:微小代码,大力量

好吧,我们来谈谈 C 家族——C、C++,所有这一切。这些语言给你最大的自由。你可以构建优雅、高性能的系统,让你的同行羡慕不已。但另一方面:同样的自由让你可以创建一些最危险的代码——rootkit 和它们更狡猾的表亲 bootkit。这些不仅仅是无害的代码行,它们是软件世界的无声捕食者。


那么,rootkit 和 bootkit 之间真正的区别是什么?

  • Rootkit旨在在操作系统内部运行。它们操纵系统进程、隐藏恶意活动并篡改软件程序。但它们会操作系统启动后启动。

  • Bootkit 的攻击性更强。它们在操作系统运行之前就攻击系统。它们感染主引导记录 (MBR) 或 UEFI/BIOS 固件,在操作系统采取行动之前获得控制权。


大多数情况下,人们所认为的 rootkit 攻击实际上是两者的结合。Bootkit 从一开始就占据主导地位,而 rootkit 则在操作系统启动并运行后介入,让攻击不被察觉地继续进行。基本上,Bootkit 先发制人,而 rootkit 则继续进行攻击。


现在,您可能会想:“如果操作系统是用 Rust 编写的而不是所谓不安全的 C/C++/Assembly,会怎么样?


事情开始变得有趣了。让我们面对现实吧——在当今的科技世界里,我们面对的是混合系统,网络交织在复杂的网络中,性能和精确控制是绝对必要的。想想SCADA 系统HVAC 控制实时系统边缘计算嵌入式设备——你明白了。在这些环境中,无论一种语言声称有多“安全”,你仍然严重依赖 C/C++/Assembly 来实现细粒度的控制和性能。


即使系统是用 Rust 构建的,说实话,很多系统仍然使用大量unsafe Rust 代码来处理性能瓶颈、延迟问题、内存限制以及直接与硬件交互。归根结底,当性能为王时,你最终会陷入同样的境地。Rust 中那些unsafe块?它们会暴露出与 C/C++/Assembly 中相同的漏洞。


现实情况是这样的:当你需要在硬件层面进行精细控制时,无论你的操作系统是用 Rust 还是其他语言编写的,你都在走同一条钢丝。因此,尽管 Rust 可能提供了一些防护措施,但那些低级unsafe操作仍然容易受到攻击。Rootkit 和 bootkit 并不关心你的语言偏好——如果有漏洞,它们就会找到进入的方法。


Rootkit 专区:进入需自担风险


这些数字掠食者不仅会感染系统,他们还会控制整个系统。最重要的是:它们大多数都是使用经典语言构建的——C、C++ 和汇编。没错,支持高性能应用程序的语言也是有史以来最恶毒的一些 rootkit 背后的语言。


想一想进化的过程。这就像从三叠纪的小型食肉恐龙进化为白垩纪的巨型兽脚类怪物,如霸王龙。就像那些早期的恐龙进化为顶级捕食者一样,rootkit 也从相对“可爱”的开端转变为如今令人恐惧的代码庞然大物。


Hacker Defender为例——这个小小的网络爬虫只有 3000 行代码,利用的是基本的操作系统漏洞。但就像任何优秀的捕食者一样,它不断进化。如今的 rootkit 非常庞大,分成多个模块,每个模块都有数千行代码,不仅针对操作系统,还针对硬件级漏洞。这是一场军备竞赛,每个新的 rootkit 都在突破可能的界限。


因此,在本文中,我们将深入探讨两个故事。第一个?您可以在 Alexander Matrosov、Eugene Rodionov 和 Sergey Bratus 撰写的《Rootkits 和 Bootkits》等技术资源中找到官方版本。这几乎是了解 rootkit 演变的所有细节的必备指南。为了方便您,我在下面整理了一个分支图,总结了这些 rootkit 的发展——每个分支都代表了恶意软件复杂性的一次新飞跃。


之后,您将看到一个表格,其中重点介绍了每个 rootkit 的独特功能。相信我,您会想看看这些代码片段是如何从微小的机会主义入侵者转变为主宰系统的猛兽的。

开始了


Rootkit 的演变


Rootkit 的演进:按家族分组

该表显示了 rootkit 随时间的进展,重点介绍了它们的革命性功能、所使用的编程语言及其代码大小。


但这个故事还有另一面——这是来自一个不仅编写 rootkit,而且将其付诸实践的人的观点。让我们来认识一下我们的主角:一个将 rootkit 视为自己延伸的黑客——一曲精心设计的代码交响曲,旨在破坏和控制。他不是普通的黑客;他是一个传奇,是顶级策划者,只知道他的名字叫“蜥蜴巫师”。


从他的角度来看,这不仅仅关乎技术或代码——它关乎权力、控制,甚至可能还有一点艺术性。对他来说,rootkit 不仅仅是工具;它们是杰作,是他重塑数字世界的方式。


那么,事不宜迟,让我向你们介绍他本人——蜥蜴巫师,用他自己的话来说:

每位艺术家都需要一位缪斯:Rootkit 的古老大师

蜥蜴巫师在梦中说话:我的杰作


“啊,你还在这里。贝尼西奥,我真想知道你要多久才会意识到你正中我的下怀。当你如此迷恋你的小 Rust 和它的安全网时,我一直在研究一些更……精致的东西。”


“精妙绝伦。这个词你可能不大可能与恶意软件联系在一起,但那是因为你太专注于保护你的小系统而没有意识到攻击背后的艺术。是的,艺术。你以为我只是个黑客?不,不——我是一个建筑师,一个创造者。我研究过的每一个 rootkit 都是我在混乱的画布上绘制的宏伟肖像中的一笔。”


这是我们故事的两个主角:Cplusser(Lizard-the-WizardI)与Rustacean(Benicio)


蜥蜴巫师继续说道:

“你知道,即使是伟大的艺术家,比如达芬奇、梵高、巴赫,他们也都是从前辈大师那里学习的。我呢?我有Hacker DefenderRustock。Hacker Defender 是我的魔术师,它向我展示了如何将代码植入系统,让文件和进程像变魔术一样消失。Rustock 呢?那是我的毕加索时刻——多态性达到了顶峰,不断变化、发展,改变形式,就像一幅画,每次你看它时它都会变形。”


“但那些?它们只是我知道自己可以创造的东西的垫脚石。然后Alureon出现了。它不只是存在于系统中 — — 它被刻在核心中,击中主引导记录 (MBR)。这是硬盘的第一个扇区,它告诉你的操作系统如何开始启动。你知道那种控制是什么感觉吗,Benicio?神圣。就像第一次听到拉赫玛尼诺夫的第二协奏曲一样。纯粹的美,但却刻在代码中。”


“但我仍不满足。ZeroAccess 是我的交响乐。它组建了一支军队,将机器变成点对点僵尸网络,每个受感染的系统都在混乱的杰作中扮演着自己的角色。它不再只是一次感染;而是在整个网络中制造混乱。这就是你的不足之处,Benicio。你只能追求 Rust 的和谐,而真正的艺术在于不和谐——诞生杰作的混乱。”



感染媒介和 rootkit 是最好的朋友


“最后出现了LoJaxMoonBounce 。它们不仅仅是 rootkit,更是进化,突破了恶意软件的界限。LoJax 深深嵌入 UEFI,控制系统的水平甚至连您喜爱的 Rust 都无法触及。MoonBounce 更进一步,深入 SPI 闪存,隐藏在防病毒软件或系统清除程序无法触及的地方。它不仅仅是隐藏在系统中,它还成为硬件的一部分,永久而不可触及,就像蚀刻在硅片上的米开朗基罗壁画一样。”


“那时我才明白了真正的道理:控制权不在 CPU 或操作系统中。真正的控制权在于硬件。而这正是我创造杰作的地方。”


蜥蜴蓝和蜥蜴红登场——我的西斯廷教堂的 rootkit。你知道它们是怎么诞生的吗,贝尼西奥?我会告诉你的,因为你需要了解超越你的天才。”


“Lizard-Blue 的设计充分考虑了你。你为 Rust 的安全保障而感到自豪。Lizard-Blue 在你的不安全块中穿梭,让你的多线程陷入混乱,破坏你的 I/O 系统 — 所有这些都是为了分散你的注意力。它是个傻瓜的伙伴:简单而优雅。当你争先恐后地追赶 Lizard-Blue 时,我真正的杰作 Lizard-Red 已经扎根了。”


但 Lizard-Red 并不关心你的 CPU 或软件。不,它直接进入 SPI 闪存,潜入你的 DMA 控制器,悄悄地从内到外重写你的系统。就像一曲隐藏的交响乐,它在看不见的地方演奏,重写固件,势不可挡。”


“这是真正的控制,贝尼西奥。当你忙着修补软件时,我掌握了硬件。告诉我,你为什么放弃 C++ 而选择 Rust?Rust……如此有前途,如此安全。但请记住,贝尼西奥,真正的力量并非来自安全。它来自控制。现在,你永远不会忘记这一点。”


每次智能电网重置后,第一次停电都会从郊区蔓延到中心。

舞台已经准备好了。顶级 C++ 大师与一群转而使用 Rust 的 C++ 叛徒之间的对决即将在 LuxCity 爆发——或者更糟的是,让这座城市陷入黑暗。赌注是什么?完全控制——不仅是代码,还有维持这座大都市活力的基础设施。


这座城市充满活力,即将成为战场。Benicio 凭借 Rust 驱动的防御系统,面临着一场他从未见过的挑战——这场挑战由 C++ 大师蜥蜴巫师亲自设计,他决心将这些叛徒 Rustaceans 带回正轨。两股力量,两种哲学,即将发生碰撞。但这不仅仅是关于编程语言——这是一场争夺系统控制权、权力的斗争,也许,只是也许,还有编程的未来,该死的!


LuxCity 不仅仅是一座大都市,它还是未来城市的象征。它的街道上挤满了自动驾驶汽车,天空中到处都是智能无人机在空中指挥交通。但在所有这些进步的背后,隐藏着这座城市真正的命脉:智能电网——一个复杂、错综复杂的系统,让一切顺利运行。


在城市高处的控制室里,经验丰富的电网老手爱丽丝和鲍勃盯着监视器上显示的混乱局面。第一次停电似乎只是个小故障——他们可以处理。但它蔓延开来,一个又一个地区陷入黑暗。电源不受控制地闪烁,每次重启,情况只会变得更糟。警报响起,监视器闪烁着警告,警告他们尚未发现更深层次的隐藏危机。

他们需要帮助。他们需要贝尼西奥。

贝尼西奥 (Benicio):陷入危险的 Rust 倡导者

贝尼西奥 (Benicio):陷入危险的 Rust 倡导者


当 Benicio 到达时,他不仅带着笔记本电脑;哦不,他还带着更珍贵的东西:他对 Rust 的坚定信念——过去五年来,他一直坚定地支持这门语言。正是用 Rust,他和他的 Rustacean 工程师团队开发了 LuxCity SmartGrid 的核心。Rust 是他的剑,他的盾牌,这个闪亮的新玩具承诺将他从 C++ 的恐怖中拯救出来——缓冲区溢出、竞争条件、令人恐惧的释放后使用漏洞。Rust 就是解决所有问题的答案,对吧?他是这么相信的,它是未来。毕竟,LuxCity 的电网就是建立在这个据称牢不可破的基础上的。


但讽刺的是,这种坚定的信心即将受到考验,也许——只是也许——C++ 并不像 Benicio 想象的那么过时。


当 Benicio 深入系统核心时,他立即意识到有些不对劲。随着智能电网控制系统的每次重置,停电范围进一步扩大——从城市郊区向 LuxCity 中心蔓延。这不是随机的;这是蓄意的,在他眼前展开了一种模式,是一次精心协调和计算的攻击。他的心沉了下去。这不仅仅是一个故障——这是一个 rootkit,活着并且不断进化。


签名清晰可辨。


这个人就是 Janus,又名蜥蜴巫师——Benicio 的老朋友变成了对手。他们曾经一起编写代码,探索 C++ 的无限可能性。但 Janus 嘲笑 Rust 僵硬的安全网和抽象。现在,Janus 掌握着 C++ 原始、未驯服的力量,像木偶大师一样操纵着这座城市的基础设施,瞄准了最大的智能电网的核心——由 Benicio 用 Rust 编写。


蜥蜴红:对地基的无情攻击

蜥蜴巫师 Janus 的无情攻击


在 LuxCity 的下方很远的地方,在嗡嗡作响的服务器机架的昏暗灯光下,Janus 看着他的杰作展开。他的手指在键盘上快速移动,眼睛敏锐而专注,追踪着闪烁屏幕上的混乱。他的两个最出色的作品正在发挥作用:蜥蜴红和蜥蜴蓝,它们从不同的方面发起攻击,但又完美地协调运作。


Lizard-Red 已经深入到城市智能电网的核心——完美的无声入侵者。这不是一些普通的恶意软件,它攻击的是常见的软件弱点。不, Lizard-Red 是一个固件 rootkit,针对最深层的基础:DMA 控制器、SPI 闪存和中断处理程序。它悄无声息地穿过系统,躲过了 Rust 精心设计的安全机制。为什么要攻击 CPU 或内存缓冲区?Lizard-Red 完全绕过了它们,将自己嵌入到 Rust 的保证不起作用的固件中。


Janus 对 Rust 所谓的安全性的极限了如指掌——他花了数年时间对其进行剖析。Rust尽管非常出色,但在硬件层面却显得力不从心。这就是 Lizard-Red 得以蓬勃发展的地方。这不仅仅是对代码的攻击;这是对硬件本身的恶意收购。


与此同时,Lizard-Blue 正在从软件高层发动攻击。它没有直接发起攻击,而是充当了完美的诱饵,像指挥混乱交响曲的大师一样利用 Rust 的不安全块。它以多线程服务为目标,扭曲 I/O 操作,并通过强制竞争条件造成破坏,而 Rust 出于性能原因已经谨慎放宽了竞争条件。这些不安全区域就像 Benicio 精心构建的防御中半开的门,而 Janus——作为 C++ 的前大师——知道如何撬开它们。Rust 的安全模型,也就是 Benicio 信心所在,却成为了他的败笔,因为 Lizard-Blue 将这些保证变成了弱点。


隐藏在巢穴中的詹纳斯咧嘴笑了。贝尼西奥对拉斯特的信心即将崩塌。这不仅仅是一次技术攻击,更是一次控制艺术的教训。


贝尼西奥反击:揭露拉斯特的缺陷

贝尼西奥反击


在控制室里,贝尼西奥英勇奋战,手指移动的速度比思维还快。每次击键都感觉像心跳一样——稳定而绝望——他与 Rust 的严格安全网搏斗,对抗蜥蜴巫师代码编织的无情混乱。贝尼西奥掌握了 Rust 的安全模型,对其保护充满信心,但蜥蜴蓝以手术般的精准度摧毁了 CPU。竞争条件和 I/O 故障在屏幕上爆发。每次贝尼西奥以为自己占了上风,攻击就会变形——改变形状,像影子从门下溜过一样滑过防御。


Rust 跟不上。Benicio曾经喜欢 Rust 的一点——它坚固的安全网——现在却扼杀了他重新掌控局面的能力。每一个防护都变成了牢笼,限制了他的行动,将他困在无休止的防御补丁循环中,而这些补丁根本无法抵挡住流畅、无情的攻击。


但深谙兵法的贝尼西奥知道,这只是一种掩人耳目的手段。


真正的威胁不是在监视器上舞动的蜥蜴蓝。在表面之下,在 LuxCity 智能电网的深处,蜥蜴红已经夺取了控制权。它不再在 Rust 防御的上层活动。它已经深入地下,使用固件植入物渗透到关键系统,如 SCADA 和 HVAC系统,这些系统控制着城市基础设施的核心。这些系统是硬件与软件相遇的系统——大多数维护和最终控制设备都运行在自定义固件上,其中大部分仍由 C 和汇编语言提供支持。


DMA 控制器和 SPI 闪存被攻陷。Lizard-Red 完全绕过了 CPU ,将自身嵌入到操作系统下的硬件中。它瞄准的是基础设施的命脉——控制关键操作的 SCADA 系统和确保城市硬件无缝运行的 HVAC 系统。这些植入物不仅仅是简单的代码——它们是永久性的,像手术一样植入到固件中,从内到外重写了系统规则。


Rust 的内存模型(旨在保护软件)在这里毫无意义。这是一场固件级别的战争,Rust 的保护措施就像一道坚固的城堡墙,但攻击者已经在门内,直接操纵硬件。

Janus 做到了其他人做不到的事情:他利用了硬件的弱点——而 Rust 的设计从未考虑过保护这些弱点。只有裸机、C++ 和汇编语言才能在这些地方占据主导地位。Benicio 被打败了,他内心深处知道这一点。


戏剧性转折:本尼西奥的信仰危机

什么鬼?


本尼西奥一拳砸在控制台上。Rust 一直是他的圣杯,他相信这种语言能够抵御目前威胁 LuxCity 的混乱。他相信它能消除所有类型的漏洞。但现在,随着这座城市濒临崩溃,他意识到:Rust 还不够。


他盯着发光的屏幕,目光飘向桌面上一个标有“旧 C++ 工具”的旧文件夹。五年了——距离他上次碰过那个文件夹里的东西,已经过去了五年。他发誓不会再回去了。他也不需要回去。Rust 曾是未来,是他逃离 C++ 危险和动荡的出口。但现在,随着城市的灯光一盏一盏地熄灭,他知道 Rust 的僵硬——曾经是他的盾牌——已经变成了牢笼。它太不灵活了,无法应对这种威胁。


LuxCity 遭受的攻击无情无情,而且不仅仅是数字攻击,它们还攻击硬件,攻击 Rust 无法触及的固件层面。他现在知道了真相:这场战斗不仅仅是 Rust 与 C++ 之间的较量。这是权力之争。而 C++ 呢?C++ 拥有原始、未驯服的力量,可以到达 Rust 无法触及的地方,深入到 Lizard-Red 嵌入固件的深处。


他的手颤抖着悬在鼠标上方。打开那个文件夹就像是拿起一件古老而危险的武器——它既能带来好处,也能带来坏处。一步走错,LuxCity 就会永远消失。但是没有它,没有 C++ 的混乱和蛮力,就没有办法反击。


本尼西奥心情沉重地点击了文件夹。熟悉的旧工具出现在他眼前,那一刻,他明白了——这场战斗不能靠安全和谨慎来赢得。它会冒险。


雅努斯的意外生命线:战斗中的转折

当城市进一步陷入混乱,智能电网摇摇欲坠时, Benicio 的屏幕上闪烁着一条通知。这是来自 Janus 的。Benicio 心跳漏了一拍——现在该怎么办?但这条消息并没有造成更多混乱,而是带来了一条生命线。Janus 不会彻底摧毁 LuxCity——至少现在不会。他带来了意想不到的东西:一份清单。一份详细的清单,列出了每个受损服务、每个受感染的进程,以及——最重要的是——追踪它们的代码。


本尼西奥犹豫了,不确定是否要相信这位昔日的对手。但现在已经没有时间犹豫了。LuxCity 的未来岌岌可危,他别无选择,只能接受帮助。他的手在鼠标上停留了一会儿,然后点开包含他以前的 C++ 工具的文件。

贝尼西奥的救赎:C++ 的力量

又是老家伙?


贝尼西奥用颤抖的双手开始打字。曾经熟悉的 C++ 语法像第二天性一样在他脑海中流淌,多年的肌肉记忆开始发挥作用。他开始制定对策,将它们编织到 Rust 的基础设施中,穿过固件来修补 Janus 造成的混乱。Rust 的僵化结构让他无力抵御固件级攻击,但 C++ 现在成了他的剑和盾。他绕过 Rust 的安全网,直接进入易受攻击的硬件,逐一修补 DMA 请求和 SPI 内存损坏。


控制室里的气氛紧张。爱丽丝和鲍勃注视着这一切,他们的眼睛在网格上渐暗的灯光和贝尼西奥屏幕上一行行的代码之间闪烁。时间不多了。


每次敲击键盘,Benicio 都会运用现代 C++ 的力量,并遵循两种蜥蜴颜色的所有者 Janus 提供的线索——代码和受损服务的路线图。这不是过去危险而混乱的 C++。现代 C++ 已经驯服了许多危险:智能指针、比以往更多的风格,以及与 Rust 的安全功能相呼应但具有更大灵活性和更强大的原始功能的所有权模型。它经过了改进和发展。但即便如此,每条线都很重要。一个失误仍然可能带来灾难。然而,在他工作的时候,Benicio 可以感觉到网格的某些部分正在恢复,系统对现代 C++ 的精确性做出了响应。


詹纳斯点燃了导火索,现在他把拆弹密码交给了本尼西奥。本尼西奥想,这到底是救赎之举,还是为了证明自己在最后阶段的统治地位而采取的自我驱动之举,都无关紧要。他现在正在为这座城市的生命编写代码,而 C++ 的幽灵则在每一个决定上徘徊。


每次函数调用、每个嵌入的汇编代码块都是一场在灾难边缘上错综复杂的舞蹈。但是,不安全的代码被封装在现代 C++ 中,使用让人联想到 monad 的结构——这是 Janus 说服 Benicio 采用的,因为 Benicio 不熟悉 Haskell 。随着时间一分一秒地过去,监视器上的混乱开始减缓。


Benicio 的脑海中始终挥之不去那句执念:Rust 一直是他的安全网。然而,此时此刻,只有 C++ 才拥有将 LuxCity 从悬崖边拉回来的灵活性和原始力量。当他疯狂地编写代码,修补 Janus 破坏的每项服务时,有一件事变得清晰起来——没有完美的语言,只有适合正确战斗的正确工具。


在那一刻,本尼西奥不仅仅是在编写代码来拯救 LuxCity;他还在创造与毁灭之间徘徊,指引他的是他曾发誓再也不碰的语言。


最后一课:Rust 的安全性 vs. C++ 的控制力

当 Benicio 努力应对 LuxCity 脆弱的系统时,他不断感受到压力:他所推崇的 Rust 语言在现实世界的压力下摇摇欲坠。它的安全保障——他所依赖的舒适之墙——已经成为他的牢笼。蜥蜴巫师 Janus 利用了 Rust 设置的每一条严格界限——每一个不安全的区块都成为混乱的入口,每一个安全内存模型都成为 Benicio 无法及时克服的障碍。Rust 试图保护一切,却让这座城市的基础设施暴露在攻击之下,这些攻击不仅限于软件,还深入到硬件本身。


然后真相猛地一击,击中了 Benicio 的心:Rust 失败不是因为它太弱。它失败是因为它太强大、太严格,无法适应 Janus 释放的不可预测的力量。但他发誓要抛弃的 C++ 语言——尽管它具有所有危险的力量和混乱的灵活性——却是唯一能够恢复平衡的武器。C++ 不仅仅是一种工具;它是一种自由,一种探索未知、控制不可控事物的邀请。


通过耳机,詹纳斯的声音打破了沉默。但这一次,他的声音没有嘲笑,也没有敌意。


“你现在明白了吧?”他问道,语气冷静而精准,犹如一位精心策划了整场演出的大师。 这从来都不是语言的问题,贝尼西奥。关键在于掌握整个系统——每一层,每一个缝隙——从软件到硬件,从逻辑到数学,这是我们编程网格的核心。


贾努斯不只是袭击了 LuxCity。他还把贝尼西奥逼到了绝境,给他上了一课,只有黑客大师才能教给他:真正的力量不在于选择“最安全”的语言,而在于掌握其底层架构,在必要时打破规则以适应和生存。


“我从未想过要毁掉 LuxCity,” Janus 继续说道,语气中带着几分怀旧。 我想向你展示,依赖 Rust 这样的安全网只会让你变得可预测。你已经亲眼见证了这一点——Rust 受其自身规则的约束。C++……C++ 让你可以创建规则。我唯一尊重的约束是那些由抽象代数、范畴论和支配图论的镜头优雅而优雅地设定的约束。”


这座城市摇摇欲坠,贝尼西奥现在明白了。雅努斯发动这次袭击并非出于恶意,而是为了测试——一堂关于控制、掌控和适应的课程。讽刺的是?为了打败雅努斯,贝尼西奥必须接受他所拒绝的语言。


这是最终的受损服务列表,” Janus 说道,将拼图中最后一个决定性的碎片递给了 Benicio。是时候完成这件事了,但现在他们正在合作——师生合作,就像以前一样。


当 Benicio 重新钻研代码时,他那股 C++ 的本能又被点燃了。在 Janus 的指导下,他逐一锁定了最终的持久性恶意软件代码,在需要的地方嵌入汇编代码,绕过 Rust 的限制,并在固件级别消除损坏。这种方法并不总是优雅的,也不总是安全的,但确实有效。


控制室里的气氛开始发生变化。爱丽丝和鲍勃虽然很紧张,但他们还是看着系统慢慢开始稳定下来。电力又回到了城市郊区。智能电网,LuxCity 的心脏,终于开始反击了。


Benicio 从惨痛经历中认识到,无论多么“安全”,任何语言都无法在真正的挑战面前保证控制权。归根结底,问题不在于选择 Rust 还是 C++;而在于掌握两者,要明白真正的战斗不在于代码行,而在于使用它们的程序员的思维和科学



想要访问更多与该主题相关的文章和新闻吗?


您可以关注我的工作并订阅我的时事通讯,以获取最新资讯、见解和独家内容:


保持联系以获取更多技术见解和新闻!