LIKE-DBG(LInux-KErnel-DeBuGger)是一个完全容器化的 Linux 内核调试与漏洞利用实验环境。它会构建或采用一个内核和根文件系统,在 QEMU 下启动它们,并将你带入一个交互式 GDB 会话(pwndbg 或 GEF),把所有组件接入同一个 tmux 窗口。
其目的在于省去繁琐的准备工作,让你的时间花在内核本身,而不是搭建环境上。每一步都在 Docker 内运行,因此你在宿主机上只需安装 Docker、tmux、Python 和 uv。选择一个内核版本(或交给它一个 CTF 挑战),运行一条命令,即可带着完整符号停在 start_kernel。
一条命令即可解析你的配置、构建或复用内核与 rootfs、启动客户机,并附加调试器:
uv run ./start_kgdb
整个流程是一个你始终身处其中的循环:构建或采用一个内核与 rootfs,在 QEMU(被调试端)下启动它,附加 GDB(调试器),然后编辑、投递、运行、触发崩溃、定位根因,再重复。
获取内核有两种方式:
bzImage/Image(以及你手头有的 vmlinux 和 initramfs)交给它,它会在 GDB 下原样启动该内核。参见 docs/ctf-foreign-kernel.md。exploit-dev、hardened、kasan、ubsan、lockdep 等),这些配置会解析为内核配置片段和运行时默认值。构建后的 .config 校验可发现未生效的配置。请注意,exploit-dev(默认配置)只会关闭 KASLR;除非你切换配置或自行切换,否则 SMEP、SMAP 和 KPTI 仍保持开启(参见 docs/configuration.md)。current、任务与模块遍历、符号查找);GEF 只需一行切换。--run 和 --upload 通过 9p 共享或 SSH 将漏洞利用投递到运行中的客户机。单个无标志的 .c 文件会自动以 static-musl 编译为目标架构;其他内容则按原样投递。参见 exploit/README.md。--insmod 和 --rmmod 按命令加载它们;其符号会自动加载到 GDB 中。参见 modules/README.md。--analyze-crash 可离线重新生成报告。--run/--insmod 始终会落到你输入命令所在窗格对应的客户机中。artifacts/runs/<id>/,其中包含解析后的设置、宿主配置、命令记录、日志和窗格记录。以 docker 组中的非 root 用户运行。交叉编译和 initramfs 工作都在容器内完成(使用 zig cc musl 工具链),因此无需宿主交叉工具链。
# 1. Install dependencies
uv sync
# 2. Start the project tmux server (loads the shipped .tmux.conf)
tmux -L likedbg -f .tmux.conf new -s LIKE-DBG
# 3. Inside that tmux session: build-or-reuse a kernel, boot it, attach the debugger
uv run ./start_kgdb
首次运行会构建容器镜像和一个内核,因此需要一些时间;后续运行会复用缓存,几秒内即可启动。
每次启动都会根据正在调试的对象来命名其会话(LIKE-DBG-pawnyable-lk01、LIKE-DBG-6_6_30-exploit-dev),因此你遗留运行的会话永远不会阻塞下一个会话,并且可以同时调试两个挑战。使用 C-b d 分离;tmux -L likedbg ls 显示正在运行的内容,下面的 = 是 tmux 的精确匹配形式(没有它,-2 会话可能会胜出):
tmux -L likedbg attach -t =LIKE-DBG-6_6_30-exploit-dev
从这里开始,请阅读 docs/build-your-own-kernel.md 了解完整工作流程,或者如果你有需要调试的挑战,请阅读 docs/ctf-foreign-kernel.md。如需针对捆绑的易受攻击驱动对整个循环进行动手实践,请按照 LK01 演练操作。
| 文档 | 涵盖内容 |
|---|---|
| docs/walkthrough-lk01.md | 从这里开始:针对捆绑的易受攻击驱动进行引导式端到端示例,从构建到释放后使用再到崩溃报告。 |
| docs/build-your-own-kernel.md | 从源码构建内核、启动它,然后调试并迭代。 |
| docs/ctf-foreign-kernel.md | 采用提供的 CTF 或外部内核,并向其投递漏洞利用。 |
| docs/configuration.md | TOML 配置栈、调试配置文件以及每一个可调项。 |
| exploit/README.md | 漏洞利用开发循环:自动编译边界与逃生通道。 |
| modules/README.md | 树外自定义模块与 GDB 符号自动加载。 |
modules/lk01/ 附带一个小型、故意易受攻击的训练驱动以及一个崩溃 PoC,已接入完整的构建、加载和漏洞利用循环,作为完整示例。

Python 代码位于 src/likedbg/,旨在保持可读性。just test 运行测试套件,just lint 运行 ruff 和 mypy,just build-images 在 Dockerfile 或内置脚本更改后重新构建容器镜像。欢迎通过问题跟踪器和讨论页面提交错误报告、功能请求和 PR。
MIT。参见 LICENSE。