我在 Windows 上搭了一台"会自己救自己"的 Kali:一次完整的技术复盘

从一块 17.9GB 的镜像文件开始,到一台能自动接无线网卡、能被自然语言驱动、图形界面卡死还能远程自救的渗透实验环境。
全程真实踩坑,所有敏感信息已脱敏,仅涉及自有设备与授权测试。


这个项目要解决什么问题

三个朴素的需求:

  1. 在 Windows 工作机上跑一台 Kali 虚拟机
  2. 虚拟机要能用上真实的 USB 无线网卡(做无线安全测试)
  3. 我 Linux 命令不熟,想让 AI 把中文需求翻译成命令,边用边学

听起来都不难。实际做完发现,这三条路上的坑,一个比一个深。

第一阶段:让 Kali 在 Hyper-V 里活起来

WSL2 装过,不等于有 Hyper-V

这是第一个认知刷新:WSL2 只需要”虚拟机平台”组件,它不等于完整的 Hyper-V。完整的角色要自己开:

1
dism /Online /Enable-Feature /FeatureName:Microsoft-Hyper-V /All /NoRestart

必须重启,vmms 服务和 PowerShell 模块才会出现。

这里踩了个很阴的坑:用提权方式执行脚本时,命令里嵌套引号加输出重定向会被吞掉——脚本静默失败,日志是空的,你以为成功了其实什么都没发生

教训:提权跑复杂脚本,一律写成独立 .ps1 文件用 -File 调用,日志在脚本内部落盘。

官方脚本建机,但权限是个坑

Kali 官方镜像自带建机脚本,一条命令完事。但打开控制台就报”权限不足”——因为虚拟机是在管理员会话里创建的。

解法是把自己加进 Hyper-V Administrators 组,然后必须注销重登录

汉化:一个 Ubuntu 惯害的坑

第一反应装 language-pack-zh-hans——查无此包。这是 Ubuntu 专属包,Kali 基于 Debian,根本没有。

正确姿势:

1
2
3
4
sudo apt install -y fonts-noto-cjk locales
sudo sed -i 's/^# *zh_CN.UTF-8/zh_CN.UTF-8/' /etc/locale.gen
sudo locale-gen
sudo update-locale LANG=zh_CN.UTF-8

中间还遇到 locale-gen zh_CN.UTF-8 参数被静默忽略、只生成英文 locale 的怪事——最后靠手动改配置文件解决。

2.5GB 大升级翻车,apt 半残

Kali rolling 一周不更就是 1100+ 个包。升级到末尾两个包下载失败(镜像站 IPv6 解析问题),而 apt 的行为是:下载阶段有任何失败,整个配置阶段就不执行

于是系统停在”一半解包、一半没配置”的状态,之后装任何新包都报依赖错误,util-linux 卡死在两个版本之间。

修复链必须按顺序:

1
2
3
sudo dpkg --configure -a
sudo apt --fix-broken install -y
sudo apt full-upgrade -y

顺便回答一个很多人问的问题:加内存加 CPU 能不能快点?不能。 apt 是单线程串行的,瓶颈在 dpkg 逐个解包配置,跟硬件无关。

代理:让虚拟机的流量出海

思路:Default Switch 是 NAT,虚拟机的默认网关就是宿主机,所以代理地址就是网关地址。

三个要点:v2rayN 要开”允许局域网连接”;新版只有一个混合端口(socks+http 同端口);防火墙放行要写整个私网段——因为 Default Switch 每次重启随机换网段

最后写了个 NetworkManager 钩子:每次网络变化自动探测网关、检测代理可达才写配置,v2rayN 没开就自动清掉。一次配置,IP 怎么变都不用管。

第二阶段:让 AI 驱动这台机器

Gemini CLI:授权成功,但被关门了

先试 Gemini CLI,OAuth 授权一路成功,然后服务端拒绝:

This client is no longer supported for Gemini Code Assist for individuals.

查了才知道,个人免费通道已经关闭,官方让迁移去新产品。授权成功也没用,门在服务端焊死了。

qwen-code:好用,但中文打不进去

换成阿里的 qwen-code,免费额度够用,但卡在一个诡异的问题上:终端里死活打不了中文,图形程序里一切正常。

根因:这类 CLI 工具用 raw 模式逐键读键盘,直接打断了输入法的组合输入流程。换终端模拟器也没用。

最后换了个思路——别在终端较劲,用图形界面

  • VS Code + Cline 插件:图形程序,中文输入天然正常;agent 模式能读意图、调内置终端执行命令、读输出继续下一步

真正高收益的操作是写了一份 .clinerules

1
2
3
4
5
6
7
8
# 环境
- Kali,Hyper-V 虚拟机,我是 Linux 命令初学者,全程中文

# 工作方式
1. 我用自然语言描述目标,你翻译成命令
2. 执行任何命令前,先用一行中文解释它做什么
3. 危险操作先列风险等我确认
4. 每次任务结束,把用到的命令按主题追加到笔记文件

这份文件每次对话自动加载。第 2 条保安全,第 4 条让 AI 自动帮你攒一本私人命令手册——用两周,那本笔记比任何教程都贴合你的实际使用。

第三阶段:无线网卡,全程最深的水

先说残酷事实

Hyper-V 不支持 USB 直通,也不支持把内置网卡共享给虚拟机。 虚拟机里天生没有任何无线接口。

唯一出路:微软官方的 usbipd-win,把 USB 设备通过网络”递”进虚拟机。

五个坑,按踩的顺序

坑 1:Windows 断网了。 第一次接入成功后宿主机直接断网——因为那块网卡就是 Windows 上网用的。接入是独占的。后来插了第二块网卡才分工明确:AIC8800D80 给 Windows 上网,RTL8188EU 给 Kali 测试。

坑 2:芯片选错了。 AIC8800D80 是国产小众芯片,Linux 内核没驱动。而 RTL8188EU 是渗透圈经典入门卡——内核自带驱动(注意驱动名是 rtl8xxxu 不是 r8188eu),监听和注入都有支持。

坑 3:固件启动失败。 设备进来了,驱动认出来了,固件加载报 -11。固件文件明明存在。最后发现解法朴素得离谱:物理拔插一次,重新接入,就好了

坑 4:注入测试误判。 广播探测测试显示”无注入”,差点否掉这张卡。实际上广播探测本来就不该有回应,必须带目标定向测试

1
2
aireplay-ng -9 -e "SSID" -b BSSID wlan0
→ Injection is working! 30/30: 100%

坑 5:用完之后托盘里没有 WiFi 了。 接口残留监听模式(ip link 里能看到 radiotap 字样),而 NetworkManager 会主动忽略监听模式的接口。新版 aircrack-ng 也不再重命名接口,stop 之后状态经常残留。

战果:完整的 WPA2 审计链路

1
2
3
4
airmon-ng start wlan0                 # 进监听模式
aireplay-ng -0 5 -a BSSID wlan0 # 踢客户端下线,逼它重连握手
airodump-ng -w cap -c 8 --bssid ... # 抓包,看到 WPA handshake 即成功
aircrack-ng -w 字典 cap-01.cap # 破解

结果:测试了 2 个字典词、0.1 秒,密码出来了。

因为我家路由器密码是 8 位纯数字日期格式。也就是说,任何人在楼下,几秒钟就能进我的网络。

这条链路对我最大的价值不是攻击,是把自己家的洞补上了。 当天就改成了强密码。

第四阶段:把一切自动化(包括救它自己)

日常自动化

开机自动接无线网卡,做成了 systemd 服务,带三重保险:

  • 等默认路由出现(最多 60 秒)
  • 遍历所有默认网关逐个尝试(虚拟机多网卡时只取第一条会取错)
  • 失败自动重启服务重试

再配两条别名:wifimon 进监听模式,wifinorm 恢复正常。

顺手把内存从”动态内存”改成固定 4GB——动态内存在 Linux 客户机里靠 balloon 驱动伸缩,宿主有压力时会造成 I/O 停顿,怀疑正是图形界面卡死的诱因之一。

救援体系:图形界面卡死怎么办

这个环境用下来,Xfce 图形界面卡死过好几次(内核活着、桌面死了)。救援的阶梯是:

第 1 级:SSH 远程重启图形界面(最理想,只丢桌面会话)

1
ssh kali@ "sudo systemctl restart lightdm"

配套:免密 SSH + 定向的 sudo 免密规则(只放行 lightdm/NetworkManager 等几个重启命令,不是全局放开)。

第 2 级:优雅关机再开机。

第 3 级:硬断电。 这里有个反直觉的知识点:Stop-VM -Force 不是硬关机,-Force 只是跳过确认,关机方式仍是优雅的。真正的断电是 -TurnOff

而卡死的系统连优雅关机都完成不了,VM 会 wedge 在 Stopping 状态,所有电源操作报错。解法是重启 vmms 服务解开死锁,再硬断电。

最后把整个阶梯做成了一键脚本:查心跳 → 没运行就开机 → 心跳异常直接跳断电 → SSH 重启图形界面 → 优雅关机 → 解死锁硬断电 → 还不行就打印 VM 的 GUID 让你手动杀工作进程(vmwp.exe 的命令行里带 GUID,能精确定位,不会误杀 WSL2)。

实测有效。一次真实的卡死,脚本走完全程,机器自己回来了。

脚本本身也是坑里爬出来的

  • 写 PowerShell 脚本带中文注释,必须存 UTF-8 with BOM——Windows PowerShell 5.1 默认按 ANSI 读,中文被错误解码后直接语法报错
  • 图形界面卡死时,Hyper-V 的 KVP 组件恰好也不会上报虚拟机 IP——最需要救援的时刻拿不到 IP。解法是平时把最后已知 IP 缓存下来,卡死时用缓存连

复盘:最值得记住的七条

  1. WSL2 ≠ Hyper-V,完整角色要单独启用并重启
  2. apt 下载失败会留半安装状态,锁死依赖树;修复按 dpkg --configure -a → -f install → full-upgrade 顺序
  3. 虚拟机抢 USB 网卡前,先确认宿主机有另一条上网路径
  4. 工具报错不一定是配置错,可能只是测试方法不对(注入测试必须定向)
  5. 别在终端 TUI 上跟输入法较劲,图形界面 + agent 是更聪明的选择
  6. 凡是每次都要重跑的操作,做成 systemd 服务或别名,一次配置永久收益
  7. PowerShell 脚本带中文,存 UTF-8 with BOMStop-VM -Force 不是硬关机,-TurnOff 才是

这台机器现在的样子

  • 中文系统 + 拼音输入法
  • 开机自动接无线网卡,托盘直接连 WiFi
  • 代理自动跟随宿主机,IP 变了不用管
  • VS Code + AI agent 自然语言驱动,自动攒命令笔记
  • 无线监听 + 注入 100% 可用
  • 图形界面卡死时,Windows 侧双击一个脚本完成救援

从裸镜像到这套东西,断断续续两天。中间十几个坑全部定位到根因,并且每一个都沉淀成了自动化、脚本或者笔记。


最后强调边界:本文所有操作都在自己的虚拟机、自己的路由器上完成。
对他人网络抓包、破解,在国内属于明确的刑事风险,与技术水平无关。
想练手,TryHackMe、Hack The Box、VulnHub 有的是合法靶场。