盗梦攻击:虚拟现实系统中的沉浸式劫持

虚拟现实(VR)硬件和软件的最新进展将改变我们与世界和彼此互动的方式,VR头显有可能为用户提供几乎与现实无差别的深度沉浸式体验。它们还可以作为一种跨越遥远距离的方式,通过使用个性化的化身或我们的数字代表,促进社交和(远程)工作场所互动。但另一方面,一旦被滥用,VR系统将会加剧安全威胁,其后果远比传统攻击严重。

VR中的威胁类型

我们先来总结一下针对VR系统的现有攻击:

  • 恶意软件。像所有其他计算设备一样,VR设备同样易受恶意软件的攻击。攻击者可以通过恶意应用程序将恶意软件直接引入VR头显,或者感染与头显相连的设备,然后将恶意软件安装到这些头显上。
  • 隐私攻击。为了提供身临其境的体验,VR头显使用多个传感器来持续收集用户活动数据,从而引发隐私攻击。大量现有案例表明,VR头显收集的用户动作记录可以用来揭示身份、年龄、性别、种族、情感和健康状况等私人信息。最近的案例还利用了窃听个人VR应用程序会话的方法。未经授权的攻击者通过“man-in-the-room”攻击渗透到一个名为Bigscreen的聊天室应用程序中,并以隐形用户的身份加入一个私人虚拟聊天室,从而观察用户在这个私人环境中的行为。其他研究还表明,在共享的虚拟环境中观察到的虚拟角色的动作可以用来恢复击键内容或身份。
  • 感知操纵攻击。最近的一项用户研究强调,如果攻击者能够修改混合现实(MR)耳机的屏幕馈送,他们可以引入物理伤害,例如造成物理碰撞或引起用户晕车。同样地,另一项研究表明,如果攻击者能够获得虚拟现实系统配置文件的写权限,他们就可以改变虚拟环境,欺骗用户调整他们的物理位置。还可以开发恶意应用程序,在用户使用该应用程序时转移用户的虚拟分配。

新型盗梦攻击

近日,芝加哥大学研究人员发布了一篇论文,详细介绍并描述了一种名为“盗梦攻击”的新型威胁。考虑到VR系统可以使用沉浸式感官输入来操纵用户进入一种虚假的舒适感,误导他们泄露私人和敏感信息(例如财务账户的身份验证凭据)或相信他们所看到/听到的内容(例如手势,动作和对话),这种威胁的后果不容忽视。

例如,考虑以下场景:

场景1: Alice每周花4天时间通过雇主的新VR应用程序在家庭办公室远程工作。每天早上,她都会戴上头显,打开应用程序开始她的日常生活。今天,她注意到雇主公司的内部网服务器花了很长时间才识别出她的公司密码。她在心里记下要重置家里的WiFi路由器。但在其他看不见的地方,Carl正坐在那里看着他的VR头显完成记录Alice的登录序列。

场景2 :Alice和伴侣Madison在平常的VR约会之夜吵了一架,她沮丧地摘下了自己的VR头显。整个星期,Madison表现得越来越疏远,并在今晚终结了他们的关系。而在其他看不见的地方,Carl关掉了他的生成语音界面,满意地看着困惑的Madison气冲冲地离开。

上述两种情况都是由单一攻击导致的,攻击者Carl破坏了用户VR系统的完整性,并将自己的软件插入用户及其VR层之间。在这种攻击下,用户Alice不再直接与预期的VR对象(如X公司的服务器,或Madison)进行交互。相反地,用户实际上是在Carl的VR层中操作,间接地与VR对象进行交互,这些交互由Carl实时监控、记录和修改。考虑到VR的沉浸式特征,Carl能够在自己的“盗梦VR层”中复制用户与网络服务器(类似于中间人攻击)和其他用户的正常交互,而用户则无法区分自己在哪个VR层中。因此,研究者称其为“盗梦攻击”(Inception Attacks),并在图1中提供了一个高级说明。

1713071366_661b6506bb557020539e2.png!small?1713071366759

【图1:盗梦攻击——用户以为他们正在与VR主屏幕上启动的VR应用程序直接交互,而实际上他们正在攻击者的盗梦层中运行模拟的VR应用程序】

研究人员将“盗梦攻击”定义为:

“在VR系统中,攻击者通过将用户困在一个伪装成完整VR系统的恶意VR应用程序中,来控制和操纵用户与其VR环境的交互。”

盗梦攻击将攻击者插入用户和任何外部实体之间,通过在恶意应用程序中创建VR系统的主屏幕环境和应用程序的模拟并将用户困在其中。当用户认为他们正在与不同的VR应用程序正常交互时,他们实际上是在模拟世界中交互,在这个世界中,他们所看到和听到的一切都被攻击者拦截、转发,甚至可能被更改。

当用户受到盗梦攻击时,他们所有的输入(声音、动作、手势、按键)和VR应用程序输出(虚拟浏览器、来自远程服务器的音频/视频、通过化身与其他VR用户的交互)都可以被攻击者窃听、记录或实时修改。例如,在场景1中,攻击者可以在盗梦攻击中破坏任何用户身份验证方案,因为用户看到的所有内容(提示,虚拟键盘,响应)都可以被攻击者捕获。类似地,在场景2中,攻击者可以拦截和改变用户之间的交互,改变音频和视觉(可能通过生成AI工具增强)以形成争吵或传播虚假信息。

在高层次上,盗梦攻击类似于网络上的“中间人”(MITM)攻击,应用于VR情境中。与MITM攻击一样,盗梦攻击可以通过利用各种安全漏洞来发起。此外,根据最终目标(例如窃听或改变长期VR交互),盗梦攻击可以有多种变体。

一般来说,盗梦攻击的下述两大属性将进一步强化其攻击能力:

  1. 盗梦攻击极难检测——因为VR应用程序通常被设计成接近真实世界,避免了传统计算机应用程序的特征指示和提示。因此,用户目前无法验证其沉浸式体验(视觉或听觉)的任何部分是否来自特定的VR应用程序。
  2. 攻击者可以几乎完全控制VR体验——攻击者不仅可以窃听和记录数据,还可以实时更改目标用户的信息和体验(破坏VR交互的保密性和完整性)。攻击者不仅可以默默地观察用户与VR提供商的互动,记录输入、密码或其他敏感数据,还可以劫持和替换整个社交互动。例如,在前面提到的场景2中,如果Alice成为盗梦攻击的目标,那么在她通过VR与Madison进行一对一的社交互动时,两个用户只能听到和看到攻击者希望他们看到和听到的内容。使用生成式AI工具可以复制人类声音并生成视觉深度伪造(deepfake),让这一点变得更加容易。

如今,通过利用VR系统的任何一个漏洞,盗梦攻击都可以在VR系统上顺利发起。在某些情况下,漏洞是传统计算应用中已经解决的基本问题,但在VR系统中却被忽视了。在其他情况下,由于VR应用程序和接口的性质,传统的身份验证机制变得更具挑战性。

威胁模型和切入点

盗梦攻击可以从多个切入点发起,下文主要考虑了两种不同的威胁模型,其中攻击者在目标VR系统中的特权级别不断降低。对于每个威胁模型,我们都描述了攻击者如何潜在地达到这个访问级别。

威胁模型1

攻击者对目标VR系统拥有最高权限(即root访问权限)。攻击者可以使用各种传统攻击向量获得根访问权限,包括物理访问/黑客攻击、特权升级、远程攻击或传统越狱方法。Root访问允许攻击者通过直接点击设备的显示和音频通道来控制用户的所见所闻。但一个更简单的选择是安装一个带有隐藏盗梦层的恶意应用程序,并在打开头显时运行它。在进入盗梦层之前,用户在VR主屏幕上可能会观察到闪烁的情况。

研究人员注意到,当前一代VR系统在桌面或移动计算系统操作系统中,缺乏可用的许多安全保护机制。更具体地说,VR系统没有安全引导加载程序或用户身份验证来防止攻击者获得对系统的控制。

威胁模型2

攻击者没有Root访问权限,但能够运行包含隐藏有盗梦攻击的恶意应用程序。这种情况可以通过两种方式发生。首先,许多VR系统(如Meta Quest 2/3/Pro、VIVE Focus 3和PICO 4)支持虚拟现实应用的侧载,以增强可用性。侧载允许VR头显安装和运行非官方应用商店的应用程序,该应用程序可以从连接到启用侧载的VR头显远程服务器启动。该功能可在现有VR系统上使用,包括Meta Quest 2、3和Pro。因此,远程攻击者可以在目标头显上安装模仿合法应用程序的盗梦应用程序。

其次,对于不支持应用侧载的头显,攻击者可以将其盗梦组件嵌入到其他良性应用中(例如天气应用)并将其发布到App Store。对于具有强大安全措施的VR系统(如新发布的apple Vision Pro),禁用侧载并不会阻止目标用户安装和运行看似良性的启动应用程序。在这种情况下,任何从App Store下载应用程序的用户都可能在不知不觉中沦为盗梦攻击的目标。

如上所述,盗梦攻击只需要在目标的头显上运行一个隐藏盗梦层的应用程序,这可以通过利用许多不同的安全漏洞来轻松实现。这强调了完全防止这些攻击的难度,并表明实施一个多方面的防御战略是十分必要的。

攻击实现

研究人员针对Meta Quest头显展示了盗梦攻击的实现过程,该实现适用于所有三个版本的Meta Quest头显,即Quest 2、3和Pro。

此攻击实现遵循上文讨论的威胁模型2。在此实现中,远程攻击者能够在不知不觉中注入并激活盗梦应用。具体来说,目标用户拥有一个没有任何恶意元素的干净头显。目标戴上头显后,默认连接WiFi网络以允许日常功能,例如系统更新以及与外部设备的连接。远程攻击者通过目标的头显获得网络连接,悄悄地注入盗梦应用程序和间谍脚本,然后离开网络。间谍脚本会在适当的时候自动激活头显的盗梦攻击,从而完全控制目标与虚拟现实系统的交互。

具体来说,攻击实现包括四个部分:

  • 引导指令——通过一个简洁的网络连接,攻击者与目标的头显相连,通过Android调试桥(ADB)运行一组shell脚本。这些脚本在后台静默运行,收集头显的配置信息,例如主环境的配置文件和头显上的应用程序列表。
  • 模拟主屏幕环境——使用在引导过程中收集的信息,攻击者构建目标主屏幕环境的精确副本。为了避免怀疑,这个复制品不仅模仿了3D背景和确切的菜单(参见图2的说明性示例),而且还模仿了沉浸式交互。此外,副本既要支持VR平台发布的官方环境(即Meta),也要支持定制环境。

1713071432_661b6548d851d609753b7.png!small?1713071433442

【图2:Meta Quest Pro头显上的3D背景主屏幕环境示例】

  • 模拟单个应用程序——由于用户只能通过主屏幕环境访问应用程序,盗梦攻击可以通过构建应用程序副本并将它们放置在模拟的主屏幕环境中来完全控制用户和单个应用程序之间的交互。确切的复制方法取决于应用程序和攻击目标。
  • 激活盗梦——攻击者将模拟的主屏幕环境和应用程序打包为“盗梦应用程序”,并通过网络ADB访问将其注入目标头显。此外,与应用程序一起注入的间谍脚本在后台运行以监视系统事件,并在用户向系统发出退出当前应用程序的信号时激活盗梦攻击。

攻击实例

Meta Quest浏览器内置于Meta Quest头显中,为用户提供身临其境的网页浏览体验。为了验证攻击可行性,研究人员构建了与真实版本非常相似的Meta Quest浏览器副本,并演示了三个攻击实例。

1713071451_661b655baee6a281af006.png!small?1713071451896

【图3:Meta Quest浏览器(左)与副本(右)的屏幕截图的并排比较】

1. 窃听目标的凭据

当用户使用Meta Quest浏览器访问银行、公司、医疗和电子邮件等敏感账户时,攻击者可以截获并记录私人信息,包括用户输入的凭据。这是因为使用交互SDK,复制应用程序可以准确地监控光标移动、记录击键、捕捉按钮按下和跟踪头显运动。因此,攻击者可以准确地提取用户对特定网络条目的输入。

2. 操纵服务器输出

复制应用程序可以显示从服务器获取的网站内容的修改版本。考虑一个典型的在线银行交易场景示例:当用户使用复制浏览器访问银行网站时,浏览器首先从复制的GUI收集他们的凭据,并通过HTTP请求将凭据发送到银行服务器。验证登录凭据后,银行服务器将用户的账户信息返回给头显,包括账户余额。虽然所有这些网络通信都使用SSL握手协议进行加密,但要在头显上显示的内容在握手协议期间使用复制浏览器提供的密钥进行加密。因此,副本浏览器可以解密并获得原始内容,并且可以在将其在用户头显显示之前对其进行修改。攻击者完全控制了副本浏览器,允许他们随意执行任何任意代码。

1713071477_661b6575b6466a0a1e981.png!small?1713071477720

【图4:目标头显显示的屏幕截图】

上图展示了在银行场景中,银行服务器向VR中的用户发送正确的银行账户余额。然而,在显示给用户之前,这种余额会被盗梦攻击更改为10美元。

3. 操纵用户输入

同样地,攻击者可以修改副本上用户输入的内容,并使用修改后的内容形成对网页服务器的API调用。这些API调用通常使用参数字段中的纯文本和数值(例如HTML格式)。

下面的例子展示了受害者通过美国银行旗下数字支付服务Zelle进行在线交易的场景。受害者首先通过填写网页表单并单击“Continue transfer”进行1美元的交易。在通过HTTP请求将网页表单提交到服务器之前,攻击者通过以下JS代码将网页表单中的交易金额更改为5美元:

document.getElementById('btnModalSave').addEventListener('mouseover', () => {document.getElementById('txtAmount').value = '5';});

1713071536_661b65b01faded8672766.png!small?1713071536208

【图5:在交易场景中,受害者输入的金额在提交到银行服务器之前被攻击者更改。(a) 受害者通过填写网页表单进行1美元的交易。攻击者在将交易金额发送到服务器之前,秘密地将交易金额更改为5美元。(b)然后受害者被带到确认页面,完成交易。攻击者在确认页面上将金额值设置为1.00美元,以避免受害者产生任何怀疑。(c)实际交易金额更改为5美元。】

研究结果证明了盗梦式攻击的可行性和有效性。数据显示,该攻击成功欺骗了27名参与者中的26名。值得注意的是,即使是每天/每周与VR设备互动的经验丰富的用户也容易受到影响。因此,有必要实施更系统的方法来应对这种新型攻击。

应对防御措施

通过防止进行防御

1. 防止安装

首先,我们应该考虑阻止盗梦应用程序在用户头显上安装的防御措施。

  • 为网络端口添加安全身份验证。在网络端口上要求更强的身份验证,将限制通过未经授权的远程连接安装盗梦攻击。然而,通过另外两种方法安装盗梦应用程序仍然是可行的:(临时)物理访问头显和AppStore下载。
  • 禁用头显的侧载功能。盗梦攻击常可以通过侧载轻松地执行。为了提高安全性,VR系统可能会被要求提供与侧载相关的安全风险的信息教程,或者通过将重要用例迁移到更受控制的环境来减少启用侧载和ADB访问的需要。
  • 安全引导加载程序和安全隔区。安全隔区(secure enclave)是一个与主应用程序处理器隔离的处理器,用于存储加密密钥,并使其无法从系统的其他部分访问。在启动过程中,安全隔区会验证引导加载程序、操作系统内核和特权进程,从而保护整个引导进程的完整性。这样的方法会阻止盗梦应用程序作为操作系统的一部分安装或在头显上运行。

2. 防止盗梦启动

如果盗梦应用程序已成功安装在头显上,一些防御技术可能有助于阻止它在头显上运行。

  • Kiosk模式。在企业环境中,使用kiosk模式可以限制用户能交互的应用程序集,这将阻止盗梦应用程序启动。
  • 应用程序证书。对于VR系统来说,盗梦攻击应用程序就像任何其他自定义VR应用程序一样,无需额外验证。因此,所有应用程序的验证过程都需要加强。如果强制执行应用程序证书,攻击者将需要通过获取证书或利用缺陷绕过验证来运行进行盗梦攻击。

3. 防止盗梦攻击调用其他应用

如果攻击者已经在头显上运行了盗梦应用程序,防御可能会增加盗梦攻击的成本,因为它可以通过直接在本地头显上调用来阻止单个应用程序的复制。

  • 禁用非系统应用程序的应用程序调用。禁用应用程序转换将阻止盗梦应用程序打开其他应用程序或其子页面。这意味着盗梦攻击无法通过直接应用程序调用克隆单个应用程序。
  • 验证应用程序调用的真实性。加强客户端身份验证是防止MITM攻击的标准方法之一。头显可以添加类似的验证来验证应用程序通信。尽管如此,证书验证和源身份验证仍然不能免受MITM攻击,并且不能完全抵御盗梦攻击。

4. 防止用户访问操作系统shell

盗梦攻击运行shell脚本来检测用户何时退出应用程序,然后激活盗梦应用程序,并收集头显的配置信息,以高精度复制主页环境。禁用用户对操作系统shell的访问,将阻止攻击者使用这些脚本,从而降低盗梦攻击的有效性和隐蔽性。

通过异常检测进行防御

如果攻击绕过了预防方法,并且盗梦应用程序在头显上运行,那么检测可以减轻危害,例如,在检测到攻击时退出所有应用程序或重新启动设备(由系统自动完成或提示用户这样做)。盗梦应用程序将不断调用其他应用程序,这可能会在控制流程和性能上留下痕迹。为此,我们可以采取如下措施:

  • 控制流量监控。当非系统应用程序支持应用程序调用时,它使盗梦应用程序可以调用其他应用程序来实现低成本的应用程序复制。检测机制可以利用应用程序行为,因为盗梦应用程序可能比合法应用程序更频繁和更多样化地引发怀疑。
  • 性能分析。当盗梦应用程序运行时,延迟和功耗等性能统计数据可能会增加。测量这些指标可以提供有助于检测的信息。系统可以监控CPU/ gpu使用率、内存访问模式、系统调用、API调用等参数,以建立基线,并在性能显著偏离时发出警报。
  • 教育用户。用户可能会注意到细微的异常,但将其视为错误或故障而不予理会。如果用户意识到这种形式的攻击,并且对外观或体验的微小变化保持警惕,则可以检测到盗梦攻击。

通过硬件进行防御

我们还可以考虑硬件防御,提供独立于潜在受损软件的离线安全层。具体可以采取如下措施:

  • 定期重启头显。重启头显将终止运行盗梦应用程序的进程,并使攻击处于休眠状态,直到再次启动。尽管它没有删除盗梦应用程序,但它通过减少攻击的活跃时间来减轻潜在的危害。
  • 定期硬重置(hard reset)。硬重置头显会擦除设备,从而完全删除盗梦应用程序和间谍脚本。攻击者将需要再次注入盗梦应用程序来攻击用户。

组合防御

VR硬件和软件平台的开发仍处于早期阶段,很明显,它们缺少许多在传统网络应用程序中被认为理所当然的安全机制。对盗梦攻击的强大防御最终需要预防、检测和缓解工具的组合。为此,建议考虑以下五个步骤的组合:

  • 禁用侧载;
  • 强制执行应用程序证书;
  • 禁用非系统应用程序的应用程序调用/验证应用程序调用;
  • 加密网络流量;
  • 定期重启头显。

结语

在本文中,我们介绍并描述了盗梦攻击,这是当今最流行的虚拟现实系统上可行的一类强大攻击。我们验证了攻击实现,发现其可以窃听和修改用户看到或听到的所有内容,以及用户发送给VR应用的所有内容。其结果是导致各种各样的个性化错误信息攻击,从歪曲用户的银行余额和改变金融交易的价值,到修改与其他用户交互的虚拟现实聊天应用程序,从而使双方体验到同一对话的两个完全不同的版本。

展望未来,我们相信仍有足够的时间来设计和实施多种安全措施,以大幅减少这些攻击的预期扩散以及它们造成的损害。但时间紧迫。每一代新一代的VR硬件都将带来越来越强大的计算能力,这反过来又将使更强大的盗梦攻击成为可能(例如,攻击者通过无缝、实时地注入生成式AI版本的声音来取代VR用户)。为此,VR平台和开发者需要采取行动,不仅要提高VR系统的安全性,还要努力教育用户他们在这些平台上面临的潜在安全风险。

原文链接:

https://arxiv.org/pdf/2403.05721.pdf 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/992.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从 Elastic 的 Go APM 代理迁移到 OpenTelemetry Go SDK

作者:来自 Elastic Damien Mathieu 正如我们之前所分享的,Elastic 致力于帮助 OpenTelemetry(OTel)取得成功,这意味着在某些情况下构建语言 SDK 的分发版本。 Elastic 在观察性和安全数据收集方面战略性地选择了 OTel…

9个技巧使你的Python代码更Pythonic!

如何区分漂亮和丑陋的代码? 更重要的是,如何写出漂亮的 Python 代码? 本文将通过初学者容易理解的例子展示9个神话般的Python技巧,以帮助你在日常工作中编写更多的Pythonic程序。 01 product() 使用 product() 函数避免嵌套的…

Zabbix 监控软件(一)

通常我们服务搭建成功 但不清楚服务器的运行状况,这时候就需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。 利用一个优秀的监控软件,我们可以: ●通过一个友好的界…

R语言入门:“Hellinger“转化和“normalize“转化(弦转化)的公式表示与R代码实现

1、写在前面 vegan包中的decostand()函数为群落生态学研究提供了一些流行的(和有效的)标准化方法。有关decostand()函数标准化的一些标准化方法可以看我的另一篇笔记:R语言入门:vegan包使用decostand()函数标准化方法 由于在网络上没有找到关于这两个转…

互联网技术知识点总览——操作系统知识点框架图

简介 本文对操作系统的知识点整体框架进行梳理和分享如下:

【问题解决】Fatal error “unsafe repository (‘git目录名‘ is owned by someone else)“

问题复现 近期升级了 Git v2.37.0,发现在git bash进入git目录执行git命令时出现错误:Fatal error "unsafe repository (git目录名 is owned by someone else)",无法使用git做一些操作。 问题解决 两个方法:降级到v2.…

避障型激光传感器SE-0522/0526/0533/1022/1026/1033应用与接线说明

避障型激光传感器SE-0522/0526/0533/1022/1026/1033是根据飞行时间(TOF 测量原理)运行,在极高的同步时钟下,以 均匀的时间间隔发射激光,激光光束遇到物体时 会反射回来,扫描传感器接收到反射 的光束后&…

正式项目的验收文件模板

了解了!下面是一个更完整和专业的研发项目验收报告的Word文档模板的详细内容,你可以将其复制到Word中并进行相应的格式调整以符合你的需求: 项目验收报告 项目名称:[输入项目名称] 项目编号:[输入项目编号] 项目负责人…

docker安装clickhouse数据库

1.创建目录 mkdir -p /data/clickhouse/data mkdir -p /data/clickhouse/conf mkdir -p /data/clickhouse/log2.拉取镜像 docker pull clickhouse/clickhouse-server3.创建临时容器 docker run -d --rm --name clickhouse-server --ulimit nofile262144:262144 clickhouse/c…

2024 发布Maven项目到中央仓库

注册sonatype账号 Maven中央仓库并不支持直接发布jar包,sonatype是其指定的第三方仓库之一,发布到此的项目会被定时同步到中央仓库 官方教程地址:https://central.sonatype.org/register/central-portal/ 访问网址:https://centra…

新项目应该选mongodb还是postgresql?

文章目录 MongoDBPostgreSQL大数据处理时的优势对比实际使用经验 选择MongoDB还是PostgreSQL作为新项目的数据库,主要取决于项目的具体需求、数据模型、应用场景以及团队熟悉程度等因素。下面将从几个关键角度对两者进行对比分析。 MongoDB 数据模型:Mo…

开发工具——postman使用教程详解

一、概念 1、Postman是一款功能强大的网页调试与发送网页HTTP请求的Chrome插件,Postman分为Postman native app和Postman Chrome app两个版本。目前Chrome app已停止维护,官方不推荐使用该版本。 2、官网下载地址:http://www.getpostman.com…

softmax回归的从零开始实现

1.初始化模型参数 import torch from IPython import display from d2l import torch as d2l batch_size 256 train_iter, test_iter d2l.load_data_fashion_mnist(batch_size) num_inputs 784 num_outputs 10 W torch.normal(0, 0.01, size(num_inputs, num_outputs), r…

【数据结构】复习题(二)

Hello!大家好,这一篇数据结构复习题是我上个学期复习的时候写的(刚刚在草稿箱发现了!)有一些题目过程都是配了图片的,希望对正在复习数据结构的宝宝们有帮助哦!(还有一个数据结构复习题(一)可以…

代码随想录算法训练营第60天|84.柱状图中最大的矩形

代码随想录算法训练营第60天|84.柱状图中最大的矩形 |有了之前单调栈的铺垫,这道题目就不难了。 84.柱状图中最大的矩形 https://programmercarl.com/0084.%E6%9F%B1%E7%8A%B6%E5%9B%BE%E4%B8%AD%E6%9C%80%E5%A4%A7%E7%9A%84%E7%9F%A9%E5%BD%A2.html class Soluti…

Ant Design Pro + springboot实现文件上传功能

前端代码 <a-upload:fileList"fileList":beforeUpload"beforeUpload":customRequest"customRequest" ><a-button style"margin-left: 50px" type"primary" ref"btn">导入配置文件 </a-button>…

代码随想录算法训练营第三十二天| 122.买卖股票的最佳时机II ,55. 跳跃游戏,45.跳跃游戏II

目录 题目链接&#xff1a;122.买卖股票的最佳时机II 思路 代码 题目链接&#xff1a;55. 跳跃游戏 思路 代码 题目链接&#xff1a;45.跳跃游戏II 思路 代码 总结 题目链接&#xff1a;122.买卖股票的最佳时机II 思路 每天可以重复买卖&#xff0c;所以只需要计算每…

Spring JdbcTemplate基本使用

1. JdbcTemplate概述 它是spring框架中提供的一个对象&#xff0c;是对原始繁琐的JdbcAPI对象的简单封装。spring框架为我们提供了很多的操作模板类。例如:操作关系型数据的JdbcTemplate和HibermateTemplate&#xff0c;操作nosql数据库的RedisTemplate&#xff0c;操作消息队…

p2949(简单反悔贪心)

题目链接 #include<bits/stdc.h> using namespace std; const int N2e520; using ll long long; long long ans; struct node{int x,y;bool operator < (node p) const{return x<p.x; //按截至时间从小到大排序 } }a[N]; long long ti; int main() {map<int,in…

Hadoop学习总结(Hive的远程服务、数据模型操作、数据操作)

在启动hive时要先启动Hadoop。 在SecurityCRT 或者在 Xshell 进行虚拟机链接 &#xff08;这里使用Xshell &#xff09; 一、Hive 的管理 1、CLI 方式 &#xff08;1&#xff09;启动 Hive 直接输入 hive &#xff08;2&#xff09;退出 直接输入以下一条命令&#xff0…