当前位置: 首页 > news >正文

学习日志8.4--DHCP攻击防范

目录

DHCP饿死攻击

DHCP Sever仿冒攻击

DHCP攻击防范


DHCP动态主机配置协议,是给主机提供自动获取IP地址等配置信息的服务。在主机对DHCP服务器发送DHCP Discover请求之后,服务器回复offer,主机再回复request,最后服务器回复ACK确认。但是就是在这四次的交互过程中就容易受到网络的攻击。

在实际网络中针对DHCP的攻击行为主要有:DHCP饿死攻击;DHCP Sever仿冒攻击。

DHCP饿死攻击

DHCP饿死攻击是DOS攻击的一种方式,目的是通过发送大量的DHCP Discover请求,去耗尽DHCP地址池里面的地址,在地址池耗尽的时候,DHCP服务器会采取不回答或者回复0.0.0.0的方式表达地址耗尽,使得DHCP Sever不能给主机提供服务。

在同一个主机向DHCP服务器请求IP地址的时候,在已经获得IP地址,第二次请求的情况下,DHCP服务器向主机回复有同样地址的offer。在服务器第一次给主机分配IP地址时,服务器会记录IP地址和主机的client hardware address(主机的mac地址),意思是记录下这个IP地址分配给哪个MAC地址了,这个记录就叫CHDDR,封装在DHCP数据包里面,在主机向DHCP服务器发送discover的时候,主机的MAC地址会写在CHDDR里面记录在DHCPdiscover发送出去。再主机第二次发送discover请求的时候,DHCP服务器就会知道discover请求里面的CHDDR记录的MAC地址,说我以前给这个主机分配过IP地址,分配的IP地址是192.168.1.1(假设),现在他请求我,我给他回offer分配的IP还是192.168.1.1。同样的主机同样的MAC地址,给DHCP服务器发送DHCPdiscover请求,他收到DHCP分配的IP地址是一样,即offer里的IP地址是一样的;也就是说要实现DHCP的饿死攻击,就必须要修改不通的MAC地址,然后发送DHCPdiscover请求,才能耗尽DHCP地址池里面的地址。

按拓扑结构,完成接口的IP信息配置,用路由器来充当DHCP服务器。
命令:[DHCP-Sever]dhcp enable,在系统视图下开启DHCP服务
命令:[DHCP-Sever]int g0/0/1
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,在接口模式下,开启接口的IP地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool,查看地址池的简要信息
查看地址池的名称,网关、掩码还有数量13
命令:[DHCP-Sever]display ip pool interface GigabitEthernet0/0/0/1 all,查看IP地址池在接口下名字是GigabitEthernet0/0/0/1地址池的信息,在系统视图下查看地址池的信息IP地址的范围是在100.1到100.14,还可以看到IP地址的分配情况

现在测试同一个主机多次发送DHCP请求,在路由器上抓包有四次DHCP交互申请分配IP地址和三次免费ARP询问是否有谁用这个IP地址,没有回复则可以使用。在offer的回包中分配的IP地址是100.14在主机上查看是192.168.100.14

开始第二次DHCPdiscover请求第二次回包数据和分配的IP地址还是192.168.100.14

DHCP服务器绑定,DHCPdiscover消息中CHADDR会有主机的MAC地址信息记录的MAC地址信息,就会记录到DHCP服务器中下次再收到同样的请求时,会根据记录分配同样的IP地址。

DHCP服务器是通过DHCP消息内部的CHADDR来进行记录和绑定IP和MAC地址信息的,不通过数据包以太网Ⅱ的MAC地址进行绑定。这是因为在由许多主机连接的网络中,他并不是直接和DHCP服务器进行连接的,他是与多个中继进行连接,路由转发协议,在跨子网转发的时候,经过路由转发路由交换,其数据包里面的源MAC地址就会发生改变,变成路由器中继的MAC地址,但是记录在DHCP消息中的CHADDR的数据不会改变。

攻击模拟的拓扑结构

如果需要进行DHCP饿死攻击,就必须不断伪造不同的CHADDR地址的DHCPdiscover消息来获取IP地址。

可以利用kali虚拟机进行模拟攻击,利用在kali安装好的软件进行模拟攻击。在攻击之前先除去主机原先申请的IP地址,除去DHCP服务器上的绑定信息,通过关闭和重启地址池的方式来实现。
命令:[DHCP-Sever-GigabitEthernet0/0/1]undo dhcp select interface,关闭接口的地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,打开接口的地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool interface GigabitEthernet0/0/0/1,查看地址池的分配情况,地址池的地址清除完毕

用kali虚拟机进行模拟DHCP饿死攻击看到攻击过程获取到192.168.100.14到192.168.100.2的IP地址
再查看一下DHCP服务器的记录表,可以看到IP地址被占用了,饿死攻击成功
对DHCP服务器的0/0/1口进行数据抓包(抓包在攻击之前,清楚地址池的信息之后就已经开始)我们看数据包,知道是DHCP的四部交互,每一次交互完成,其分配到的IP地址就不一样第一个discover请求他的网卡地址是82:d0,是攻击机的网卡地址,下面的是CHADDR地址60:f4第二个discover请求,他的以太网Ⅱ地址还是82:d0,但是他的CHADDR地址变为了fc:5b。再看DHCP服务器里面的记录表表中192.18.100.14记录的MAC地址是60:f4;192.168.100.13记录的是fc:5b,这和discover中的CHADDR地址是一致的,可以说明,DHCP服务器的地址绑定看的是CHADDR中的MAC地址信息和以太网Ⅱ的地址信息无关。

现在DHCP服务器的地址池里面已经没有地址,下面用主机向DHCP服务器发送请求地址请求后查看主机 IP地址,发现没有配置到地址。DHCP饿死攻击成功。

DHCP Sever仿冒攻击

DHCP饿死攻击的作用,当攻击者耗尽了DHCP服务器地址池中的IP地址之后,攻击者可以将自己变成仿冒的DHCP服务器,向主机发送 IP地址,伪造假的网关地址,伪造假的域名地址,诱骗主机将自己的数据转发到攻击机上。这就是DHCP的Sever仿冒攻击。

用Kali伪造一个DHCPsever,对主机进行模拟攻击
发起攻击后,用主机获去DHCP服务器的IP地址​​​​​​​可以看到获取的是再kali模拟攻击里面自己仿冒的DHCP服务器配置的地址。去看他的数据包
就有一个DHCP四部交互的过程,0.0.0.0的广播地址还有192.168.11.100的回包地址,说明是攻击机的回报,然后打开ACK的回包ACK回包中,给主机配置了IP地址是192.168.11.210,记录了主机的MAC地址是74:ee,是主机自己的MAC地址配置了DHCP服务器的IP地址192.168.11.100,配置了IP地址的续租时间,配置了掩码,配置了路由器地址192.168.11.100,配置了域名服务器地址DNSserver192.168.11.100,还配置了域名名字huawei.com。都是按照在kali攻击里面部署的去配置,证明服务器仿冒攻击成功。

DHCP攻击防范

DHCP snooping(DHCP流量监听)。在主机向DHCP申请discover消息的时候,会广播消息,在交换机开启了DHCP snooping之后,交换机会对DHCP消息转发到正确的DHCP服务器的接口上,对于连接DHCP服务器的端口需要设置一个信任端口,允许DHCP的流量从这里转发出去,而没有设置信任度端口的DHCP流量就不能转发出去,让DHCP服务器能收到discover请求,能给主机提供服务,让攻击者不能收到DHCP请求,不能截获主机的流量信息。

在攻击之前,先将主机配置成手动获取IP地址,然后清除DHCP服务器地址池的信息
命令:[DHCP-Sever-GigabitEthernet0/0/1]undo dhcp select interface,关闭接口地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]dhcp select interface,开启接口地址池
命令:[DHCP-Sever-GigabitEthernet0/0/1]display ip pool interface GigabitEthernet0/0/0/
1 all,查看地址池的信息地址池信息为空,地址池清楚完毕。

首先先把DHCP服务器的g0/0/1口的DHCP服务禁用,对交换机的g0/0/3口抓包,然后开启交换机DHCPsnooping的功能
命令:[SW1]dhcp enable,首先开启交换机的DHCP功能
命令:[SW1]dhcp snooping enable,再开启DHCPsnooping功能
命令:[SW1]vlan 1
命令:[SW1-vlan1]dhcp snooping enable,再在vlan下面开启DHCPsnooping功能
命令:[SW1-vlan1]dhcp snooping trusted interface g0/0/2,设置交换机的g0/0/2为信任端口

用主机申请DHCP在DHCP服务器上收到了DHCP的discover请求,但是没有回复,是因为关闭了DHCP服务器的功能在攻击机上没有收到discover的信息请求,说明只有被DHCPsnooping信任的端口才可以转发DHCP消息。

添加信任端口可以防范DHCP服务器伪造攻击。

把DHCP服务器的DHCP接口服务打开,在让主机重新获取DHCP服务器里面的IP地址成功在DHCP服务器上获取到地址。

DHCP饿死攻击防范。在使用饿死攻击的话需要伪造不同的CHADDR地址的DHCPdiscover消息来获取地址,但是在每次发送消息的时候,数据包中的以太网Ⅱ的MAC地址是不变的。在开启DHCPsnooping(DHCP流量监听)后,收到DHCP discover消息后,会对DHCPdiscover判断,判断以太网Ⅱ的源MAC地址和DHCP报文中的CHADDR是否相同,如果不同就认为是伪造消息。这时开启DHCPcheck功能,对伪造的信息进行丢弃。需要注意的是,DHCPsnooping只能进行监听,丢弃的动作还需要DHCPcheck去执行。

开启接口的DHCPcheck
命令:[SW1]port-group 1,创建一个接口组,组号为1
命令:[SW1-port-group-1]group-member GigabitEthernet 0/0/1 to g0/0/24,定义接口组的成员
命令:[SW1-port-group-1]dhcp snooping check dhcp-chaddr enable,给接口打开DHCPcheck功能
然后用kali模拟饿死攻击​​​​​​​这个时候攻击没反应就拿不到地址,查看交换机g0/0/3口的数据还是有discover请求发出,证明攻击存在,但是应为discover每一个CHADDR地址和以太网Ⅱ的源MAC地址不一样,数据被DHCPcheck舍弃这是第一个discover攻击请求的信息这是第二个discover攻击请求的信息
他们的CHADDR地址和以太网Ⅱ的源MAC地址都不一样,不一样的话,就被DHCPsnooping认为是攻击信息,然后被DHCPcheck丢弃discover信息。再回到地址池查看地址的配置情况,确实是没有分配地址。然后再用主机去发DHCPdiscover请求主机就成功获得地址池里的IP地址。

kali模拟攻击会存在在攻击时可以伪造数据中的以太网Ⅱ的源MAC地址和DHCP报文中的CHADDR地址字段同时变化,去欺骗DHCPsnooping,去实现消耗DHCP服务器里面的IP地址,达到饿死攻击的效果。开始攻击攻击效果是,每秒钟以上千次的数据发送频率去发送discover请求。随机打开两个discover请求,可一看到每一次的以太网Ⅱ源MAC地址都会发生变化,而且源MAC地址和CHADDR地址是一致的再查看地址池的消息,已经被攻击,停止给主机分配地址了,被饿死攻击了。所以说,遇到这种攻击的时候,再采用DHCPsnooping防范就已经不够了。

在开启DHCPsnooping和DHCPcheck,面对这种可以仿造变化地址的攻击方式,以每秒上千次的攻击频率去攻击,交换机需要对每一个数据进行检验判断,需要消耗大量的内存,消耗CPU的资源。

Yersinia DHCP DOS(上一个地址可变的攻击)的攻击防范无法通过CHADDR和DHCPcheck去防御,需要通过端口安全的方式去实现。

Yersinia攻击伪造,会伪造源MAC地址和CHADDR,同时会让交换机学习到大量的MAC地址,可以同过设置接口的允许MAC地址的学习数量,如果学习数量超过可允许范围内,就关闭端口shutdown,禁止数据传输。

给交换机设置端口安全。
命令:[SW1]port-group 1,进入接口组
命令:[SW1-port-group-1]port-security enable,端口安全打开
命令:[SW1-port-group-1]port-security max-mac-num 1,设置端口安全最大允许学习的MAC地址数量为 1设置端口安全的动作方式,第一个是保护,直接丢弃数据;第二个是丢弃数据并报警;第三个是直接关闭接口;
命令:[SW1-port-group-1]port-security protect-action shutdown,选择安全保护动作是关闭接口

用kali模拟攻击
可以看到交换机接口学习MAC地址数量过多,接口直接关闭了交换机直接报出日志,MAC地址的数量超出限制,接口g0/0/3将关闭

然后再重新打开接口g0/0/3,再对DHCP服务器的地址池的信息清理一下,准备重新发起攻击。看能不能抵御住这种攻击。​​​​​​​在DHCP服务器的g0/0/1口收到了DHCP的discover消息,然后回复了一个offer,分配给攻击机的地址是19.168.100.14。在到地址池查看配置信息,是分配给CHADDR地址的IP地址192.168.100.14。
然后再用主机申请IP地址从主机上和DHCP服务器地址池里可以看到,主机成功分配到地址。

这种设置安全端口的方式,不仅可以防止饿死攻击,还可以对主机进行分配IP地址的服务。

相关文章:

学习日志8.4--DHCP攻击防范

目录 DHCP饿死攻击 DHCP Sever仿冒攻击 DHCP攻击防范 DHCP动态主机配置协议,是给主机提供自动获取IP地址等配置信息的服务。在主机对DHCP服务器发送DHCP Discover请求之后,服务器回复offer,主机再回复request,最后服务器回复AC…...

解决多个Jenkins Master实例共享Jenkins_home目录的问题(加锁解锁机制)

在Jenkins的持续集成和持续部署(CI/CD)环境中,JENKINS_HOME目录扮演着至关重要的角色。它存储了Jenkins的配置、插件、作业历史记录等核心数据。然而,在某些场景下,我们可能面临多个Jenkins master实例需要共享同一个J…...

postgresql array 反向截取

postgresql array 反向截取 array_to_string((string_to_array(REPLACE(delcell.小区网管名称,‘‘,’-‘),’-‘))[:array_length(string_to_array(REPLACE(delcell.小区网管名称,’’,‘-’),‘-’),1)-1],‘-’) as 基站名称 在PostgreSQL中,如果你想要对数组进…...

最新口型同步技术EchoMimic部署

EchoMimic是由蚂蚁集团推出的一个 AI 驱动的口型同步技术项目,能够通过人像面部特征和音频来帮助人物“对口型”,生成逼真的动态肖像视频。 EchoMimic的技术亮点在于其创新的动画生成方法,它不仅能够通过音频和面部关键点单独驱动图像动画&a…...

程序设计基础(c语言)_补充_1

1、编程应用双层循环输出九九乘法表 #include <stdio.h> #include <stdlib.h> int main() {int i,j;for(i1;i<9;i){for(j1;j<i;j)if(ji)printf("%d*%d%d",j,i,j*i);elseprintf("%d*%d%-2d ",j,i,j*i);printf("\n");}return 0…...

8.4 day bug

bug1 忘记给css变量加var 复制代码到通义千问&#xff0c;解决 bug2 这不是我的bug&#xff0c;是freecodecamp的bug 题目中“ 将 --building-color2 变量的颜色更改为 #000” “ 应改为” 将 #000 变量的颜色更改为 --building-color2 “ bug3 又忘记加var(–xxx) 还去问…...

【Material-UI】Autocomplete中的禁用选项:Disabled options

文章目录 一、简介二、基本用法三、进阶用法1. 动态禁用2. 提示禁用原因3. 复杂的禁用条件 四、最佳实践1. 一致性2. 提供反馈3. 优化性能 五、总结 Material-UI的Autocomplete组件提供了丰富的功能&#xff0c;包括禁用特定选项的能力。这一特性对于限制用户选择、提供更好的用…...

Pytest测试报告生成专题

在 pytest 中,你可以使用多个选项生成不同格式的测试报告。以下是几种常用的生成测试报告的方法: 1. 生成简单的测试结果文件 你可以使用 pytest 的 --junitxml 选项生成一个 XML 格式的测试报告,这个报告可以与 CI/CD 工具集成。 pytest --junitxml=report.xml这将在当前…...

QT 笔记

HTTPS SSL配置 下载配置 子父对象 QTimer *timer new QTimer; // QTimer inherits QObject timer->inherits("QTimer"); // returns true timer->inherits("QObject"); // returns true timer->inherits("QAbst…...

【redis 第七篇章】动态字符串

一、概述 string 类型底层实现的简单动态字符串 sds&#xff0c;是可以修改的字符串。它采用预分配冗余空间的方式来减少内存的频繁分配。 二、SDS动态字符串 动态字符串 是以 \0 为分隔符。最大容量 是 redis 主动分配的一块内存空间&#xff0c;实际存储内容 是具体的存的数…...

rk3588 部署yolov8.rknn

本文从步骤来记录在rk3588芯片上部署yolov8模型 主机&#xff1a;windows10 VMware Workstation 16 Pro 硬件&#xff1a;RK3588 EVB板 模型&#xff1a; RK3588.rknn 软件开发环境&#xff1a; c cmake step1: 主机上执行&#xff1a; 将rknn_model_zoo 工程文件下载…...

【正点原子i.MX93开发板试用连载体验】中文提示词的训练

本文首发于电子发烧友论坛&#xff1a;【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! 好久没有更新了&#xff0c;今天再来更新一下。 我们用前面提到的录音工具录制了自己的中文语音&#…...

WordPress资源下载类主题 CeoMax-Pro_v7.6绕授权开心版

CeoMax-Pro强大的功能 在不久的将来Ta能实现你一切幻想&#xff01;我们也在为此而不断努力。适用于资源站、下载站、交易站、素材站、源码站、课程站、cms等等等等&#xff0c;Ta 为追求极致的你而生。多风格多样式多类型多行业多功能 源码下载&#xff1a;ceomax-pro7.6.zip…...

使用GCC编译Notepad++的插件

Notepad的本体1是支持使用MSVC和GCC编译的2&#xff0c;但是Notepad插件的官方文档3里却只给出了MSVC的编译指南4。 网上也没有找到相关的讨论&#xff0c;所以我尝试在 Windows 上使用 MinGW&#xff0c;基于 GCC-8.1.0 的 posix-sjlj 线程版本5&#xff0c;研究一下怎么编译…...

技术周总结 2024.07.29 ~ 08.04周日(MyBatis, 极限编程)

文章目录 一、08.01 周四1.1&#xff09;mybatis的 xml文件中的 ${var} 和 #{var}的区别&#xff1f; 二、08.03 周六2.1&#xff09;极限编程核心价值观核心实践实施极限编程的好处极限编程的挑战适用场景 三、08.04 周日3.1&#xff09;《计算机信息系统安全保护等级划分准则…...

C语言调试宏全面总结(六大板块)

C语言调试宏进阶篇&#xff1a;实用指南与案例解析C语言调试宏高级技巧与最佳实践C语言调试宏的深度探索与性能考量C语言调试宏在嵌入式系统中的应用与挑战C语言调试宏在多线程环境中的应用与策略C语言调试宏在并发编程中的高级应用 C语言调试宏进阶篇&#xff1a;实用指南与案…...

unity万向锁代数法解释

unity的矩阵旋转乘法顺序是yxz 旋转x的90度的矩阵: 1 0 0 0 0 -1 0 1 0旋转y和z的矩阵假设角度为y和z&#xff0c;矩阵略不写了 按顺序乘完yxz之后结果是 cos(y-z) sin(y-z) 0 0 0 -1 -sin(y-z) cos(y-z) 0这个结果和Rx(pi/2) *Rz(某个角度)的结果是一个形式&#xff0c;Rx和…...

stm32入门学习10-I2C和陀螺仪模块

&#xff08;一&#xff09;I2C通信 &#xff08;1&#xff09;通信方式 I2C是一种同步半双工的通信方式&#xff0c;同步指的是通信双方时钟为一个时钟&#xff0c;半双工指的是在同一时间只能进行接收数据或发送数据&#xff0c;其有一条时钟线&#xff08;SCL&#xff09;…...

GDB常用指令

GDB调试&#xff1a;GDB调试的是可执行文件&#xff0c;在gcc编译时加入-g参数&#xff0c;告诉gcc在编译时加入调试信息&#xff0c;这样gdb才能调试这个被编译的文件。此外还会加上-Wall参数尽量显示所有警告信息。 GDB命令格式&#xff1a; 1、start&#xff1a;程序在第一…...

Nginx 高级 扩容与高效

Nginx高级 第一部分&#xff1a;扩容 通过扩容提升整体吞吐量 1.单机垂直扩容&#xff1a;硬件资源增加 云服务资源增加 整机&#xff1a;IBM、浪潮、DELL、HP等 CPU/主板&#xff1a;更新到主流 网卡&#xff1a;10G/40G网卡 磁盘&#xff1a;SAS(SCSI) HDD&#xff08;机械…...

简易版抽奖活动的设计技术方案

1.前言 本技术方案旨在设计一套完整且可靠的抽奖活动逻辑,确保抽奖活动能够公平、公正、公开地进行,同时满足高并发访问、数据安全存储与高效处理等需求,为用户提供流畅的抽奖体验,助力业务顺利开展。本方案将涵盖抽奖活动的整体架构设计、核心流程逻辑、关键功能实现以及…...

土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等

&#x1f50d; 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术&#xff0c;可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势&#xff0c;还能有效评价重大生态工程…...

大模型多显卡多服务器并行计算方法与实践指南

一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...

k8s业务程序联调工具-KtConnect

概述 原理 工具作用是建立了一个从本地到集群的单向VPN&#xff0c;根据VPN原理&#xff0c;打通两个内网必然需要借助一个公共中继节点&#xff0c;ktconnect工具巧妙的利用k8s原生的portforward能力&#xff0c;简化了建立连接的过程&#xff0c;apiserver间接起到了中继节…...

听写流程自动化实践,轻量级教育辅助

随着智能教育工具的发展&#xff0c;越来越多的传统学习方式正在被数字化、自动化所优化。听写作为语文、英语等学科中重要的基础训练形式&#xff0c;也迎来了更高效的解决方案。 这是一款轻量但功能强大的听写辅助工具。它是基于本地词库与可选在线语音引擎构建&#xff0c;…...

LLMs 系列实操科普(1)

写在前面&#xff1a; 本期内容我们继续 Andrej Karpathy 的《How I use LLMs》讲座内容&#xff0c;原视频时长 ~130 分钟&#xff0c;以实操演示主流的一些 LLMs 的使用&#xff0c;由于涉及到实操&#xff0c;实际上并不适合以文字整理&#xff0c;但还是决定尽量整理一份笔…...

mac 安装homebrew (nvm 及git)

mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用&#xff1a; 方法一&#xff1a;使用 Homebrew 安装 Git&#xff08;推荐&#xff09; 步骤如下&#xff1a;打开终端&#xff08;Terminal.app&#xff09; 1.安装 Homebrew…...

【Android】Android 开发 ADB 常用指令

查看当前连接的设备 adb devices 连接设备 adb connect 设备IP 断开已连接的设备 adb disconnect 设备IP 安装应用 adb install 安装包的路径 卸载应用 adb uninstall 应用包名 查看已安装的应用包名 adb shell pm list packages 查看已安装的第三方应用包名 adb shell pm list…...

倒装芯片凸点成型工艺

UBM&#xff08;Under Bump Metallization&#xff09;与Bump&#xff08;焊球&#xff09;形成工艺流程。我们可以将整张流程图分为三大阶段来理解&#xff1a; &#x1f527; 一、UBM&#xff08;Under Bump Metallization&#xff09;工艺流程&#xff08;黄色区域&#xff…...

背包问题双雄:01 背包与完全背包详解(Java 实现)

一、背包问题概述 背包问题是动态规划领域的经典问题&#xff0c;其核心在于如何在有限容量的背包中选择物品&#xff0c;使得总价值最大化。根据物品选择规则的不同&#xff0c;主要分为两类&#xff1a; 01 背包&#xff1a;每件物品最多选 1 次&#xff08;选或不选&#…...