Sliver 源码编译完全指南:从 Makefile 构建到 Docker 镜像与 Proto 再生成

发布时间:2026/9/23 19:04:43

Sliver 源码编译完全指南:从 Makefile 构建到 Docker 镜像与 Proto 再生成 网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载SliverAdversary Emulation Framework是一套开源的对立仿真与 C2 框架代码库横跨client/、server/、implant/与protobuf/等多个 Go 模块。本文以官方文档《Compile from Source》为骨架结合仓库内 Makefile、Dockerfile、go.mod 与 util/assets/assets.go 等源码系统讲解如何在 Linux/macOS 上从源码编译出sliver-server与sliver-client、如何交叉编译到 Windows、如何用 Docker 多阶段构建以及开发者修改.proto后如何重新生成.pb.go代码。读完本文你将能独立完成 Sliver 的全平台构建与自定义改造。一、前置条件操作系统、Go 工具链与 make官方文档明确指出建议在 macOS 或 Linux 机器上编译 Sliver。理论上原生 Windows 也可编译但仓库内所有构建脚本都不是为 Windows 设计的更好的做法是在 Linux/macOS 上交叉编译出 Windows 的 server/client 二进制。如果手头只有 Windows 机器则应使用 Windows Subsystem for LinuxWSL。编译需要的最低环境如下依赖版本要求说明Gov1.27.1 或更高见下方版本校验逻辑make任意可用版本macOS 上可能需要安装 Xcode 及配套命令行工具xcode-select --installGo 版本要求并非仅停留在文档层面仓库中有双重校验证据go.mod 顶部声明module github.com/bishopfox/sliver且go 1.27.1即模块本身要求 Go 1.27.1 语法与工具链Makefile 定义了MIN_SUPPORTED_GO_MAJOR_VERSION 1、MIN_SUPPORTED_GO_MINOR_VERSION 27并通过validate-go-version目标在构建前解析go version输出做比较版本过低会直接报错退出。此外Makefile 的预检查EXECUTABLES uname sed git date cut $(GO)还会验证uname、sed、git、date、cut等基础工具是否在$PATH中缺少任一工具都会中止构建——这也是必须用完整 Linux/macOS 环境的代码级印证。二、获取源码为什么必须 git clone 而不是下载 ZIP官方文档特别强调了一个重要约束必须使用git clone获取代码不能使用 GitHub 的Download ZIP功能因为 Sliver 的 Makefile 需要从 git 仓库中提取版本信息缺少.git目录会导致构建产物损坏。从镜像克隆并进入目录$ git clone https://gitcode.com/gh_mirrors/sl/sliver.git $ cd sliver该约束的底层原因是版本信息来源于 VCSserver/version/sliver-version.go 通过runtime/debug.ReadBuildInfo()读取 Go 构建元数据中的vcs.revision、vcs.time、vcs.modified等字段拼装出Version、GitCommit、GitDirty、CompiledAt等运行时版本信息。Go 在构建时默认会记录 VCS 信息但前提是源码位于有效的 git 工作树中若用 ZIP 解压这些信息缺失版本号会回退为devel且构建流程可能因缺少 git 依赖而中断。三、首次构建make到底做了什么在仓库根目录直接执行$ make默认情况下make会构建当前运行平台的二进制最终在仓库根目录生成两个产物sliver-server服务端程序入口位于 server/main.gosliver-client客户端控制台程序入口位于 client/main.go。从 Makefile 的default目标可以看到完整流程它依次做了三件事clean清理旧的sliver-client*、sliver-server*产物validate-go-version校验 Go 版本 ≥ 1.27.downloaded_assets首次构建时执行go run -modvendor ./util/cmd/assetsMakefile随后才用go build编译 server 与 client。3.1 首次构建的资源下载文档指出Sliver 会内嵌自己的 Go 编译器副本以及若干内部工具首次运行make时一个 bash 脚本会把这些资源下载到本地因此首次构建明显慢于后续构建网络慢时尤其明显。资源下载的实现在 util/cmd/assets/main.go 与 util/assets/assets.go 中。从源码可以看到下载产物输出到server/assets/fs目录util/assets/assets.goHTTP 客户端超时设置为 15 分钟downloadTimeout默认下载尝试次数为 3 次、重试间隔 250msdefaultDownloadAttempts/defaultDownloadDelay网络抖动时能自动重试完成后 Makefile 会在仓库根目录 touch 一个.downloaded_assets标记文件后续构建会复用已下载的资源不再重复下载。下载的内容包括内嵌 Go 编译器、Zig 工具链、garble代码混淆编译器等构建 implant 所需的资产这也是首次构建更慢的根源。3.2 编译细节Tags、CGO 与链接注入查看 Makefile 的默认变量可以了解编译的默认参数TAGS ? -tags go_sqlite默认启用go_sqlite构建标签服务端数据库层server/db依赖 SQLite若把TAGS改为包含cgo_sqlite则CGO_ENABLED会被强制置为 1否则为 0-modvendor使用仓库自带的vendor目录implant/go-mod、根目录 go.sum 配合进行模块解析保证离线可构建-trimpath去除构建路径信息减小二进制体积并避免泄露构建机路径-ldflags -s -w剥离符号表与调试信息通过-X注入三个编译期常量SliverPublicKey更新包签名公钥、DefaultArmoryPublicKey与DefaultArmoryRepoURLArmory 扩展仓库的公钥与 API 地址对应 Makefile 中的SLIVER_PUBLIC_KEY、ARMORY_PUBLIC_KEY、ARMORY_REPO_URL变量可按需覆盖。因此直接make产出的 release 二进制是瘦身 静态链接 内置默认资源的形式。四、交叉编译到指定平台Makefile 支持通过环境变量指定目标平台官方文档给出的用法是$ GOOSwindows GOARCHamd64 make即把GOOS、GOARCH传给make构建逻辑会把这两个变量透传给go build从而在 Linux/macOS 上产出 Windows 二进制。除了通用变量方式Makefile 还提供了大量预定义平台目标见 Makefile使用起来更直观目标产物make macos-amd64sliver-server/sliver-clientdarwin/amd64make macos-arm64darwin/arm64Apple Siliconmake linux-amd64linux/amd64make linux-arm64linux/arm64make windows-amd64sliver-server.exe/sliver-client.exewindows/amd64需要一次构建多个平台时还有批量目标make clients同时构建 macOSamd64/arm64、Linux386/amd64/arm64、Windows386/amd64/arm64、FreeBSDamd64/arm64的客户端make servers同时构建 Windowsamd64/arm64、Linuxamd64/arm64、macOSarm64/amd64的服务端。以windows-amd64为例实际执行的命令为MakefileGOOSwindows GOARCHamd64 CGO_ENABLED0 go build -modvendor -trimpath \ -tags go_sqlite,server -ldflags ... -o sliver-server.exe ./server GOOSwindows GOARCHamd64 CGO_ENABLED0 go build -modvendor -trimpath \ -tags go_sqlite,client -ldflags ... -o sliver-client.exe ./client注意客户端始终以CGO_ENABLED0构建便于全平台静态编译而服务端只有在TAGS包含cgo_sqlite时才开启 CGO。另外 Makefile 对 ARM 机器做了特殊处理当宿主机是 ARM 且未显式指定GOARCH时默认补充GOARCHarm64Makefile。五、使用 Docker 构建官方文档提供了三个 Docker 构建目标docker build --target 目标目标用途test运行单元测试production构建生产镜像包含 Metasploit 等可选依赖production-slim构建生产镜像但不包含 Metasploit 及其他可选依赖体积小约 1GB从项目根目录执行docker build --target production -t sliver .构建完成后即可用文档建议的方式启动docker run -it --rm -v $HOME/.sliver:/home/sliver/.sliver sliver5.1 Dockerfile 多阶段结构解读Dockerfile 采用多阶段构建结构非常清晰base阶段基于golang:latest安装git build-essential zlib1g zlib1g-dev wget zip unzip等基础包创建 UID/GID 999 的sliver用户把代码ADD进/go/src/github.com/bishopfox/sliver/后直接RUN make编译并将产物复制为/opt/sliver-servertest阶段继承base先sliver-server unpack --force解包资源再运行 go-tests.sh 执行单元测试可通过--build-arg GO_TESTS_FLAGS--skip-generate跳过耗时的server/generate生成测试production阶段基于debian:bookworm-slim安装libpcap-dev libsqlite3-dev nasm等依赖并通过官方安装脚本额外安装Metasploit Framework用于 stager 生成从base复制编译好的/opt/sliver-serverunpack后以sliver用户身份启动声明数据卷VOLUME [/home/sliver/.sliver]持久化配置与数据production-slim阶段与 production 结构一致但不安装 Metasploit等可选依赖镜像体积显著缩小。从 Dockerfile 注释也可以看出测试与生产构建的推荐用法# For unit testing: docker build --target test . docker build --target test --build-arg GO_TESTS_FLAGS--skip-generate .5.2 在 Kali Linux 上编译官方文档以 Kali Linux 场景做了说明Docker 构建包含 mingwWindows 交叉编译工具链和 Metasploit因此首次从零构建耗时较长但 Docker 的层缓存机制会让后续构建明显加快同时 Sliver 会在构建过程中运行单元测试这部分也要占用几分钟。关于单元测试脚本go-tests.sh 给出了细节测试默认使用TAGSosusergo,netgo,go_sqlite会将SLIVER_ROOT_DIR、SLIVER_CLIENT_DIR、GOCACHE等全部隔离到临时目录并提示在慢速机器上运行测试耗时极长建议 16 核以上 CPU 与 32GB 以上内存。六、在 Windows 上构建如果只有 Windows 机器官方推荐的路径是安装 WSL然后在 WSL 内按上文 Linux/交叉编译的方式构建。要生成 Windows 二进制执行$ make windows-amd64构建产物为sliver-server.exe与sliver-client.exe可以通过 WSL 的文件系统桥接拷贝到 Windows 侧例如/mnt/c/Users/foo/Desktop。注意运行时需要使用支持 ANSI 转义序列的终端如 Windows Terminal否则控制台 UI 可能显示异常。顺带一提Makefile 中同样为 Windows 宿主编写了cmd.exe版本的构建逻辑SHELL : cmd.exe分支见 Makefile包含等价的windows-amd64、clients、servers、pb等目标但正如文档所说这套脚本是理论可用的辅助实现官方推荐的主路径仍是 WSL。七、开发者进阶修改.proto后重新生成代码Sliver 的跨进程通信依赖 Protobuf/gRPC所有.proto定义集中在 protobuf 目录commonpb、sliverpb、clientpb、dnspb、rpcpb五个子包。如果你修改了任何.proto文件需要额外安装以下工具来重新生成对应的.pb.go文件工具版本要求安装方式protoclibprotocv26.1 或更新从 protobuf 官方发布页下载对应平台二进制并确保在$PATH中protoc --version可验证protoc-gen-gov1.27.1go install google.golang.org/protobuf/cmd/protoc-gen-gov1.27.1protoc-gen-go-grpcv1.2.0go install google.golang.org/grpc/cmd/protoc-gen-go-grpcv1.2.0假设$GOPATH/bin已在$PATH中直接执行go install google.golang.org/protobuf/cmd/protoc-gen-gov1.27.1 go install google.golang.org/grpc/cmd/protoc-gen-go-grpcv1.2.0安装完成后如果命令找不到多半是$GOPATH/bin未加入$PATH补充即可。然后运行$ make pbmake pb目标Makefile会依次对五个.proto文件执行protoc使用pathssource_relative选项把生成的 Go 代码直接写到protobuf/各子包内protoc -I protobuf/ protobuf/commonpb/common.proto --go_outpathssource_relative:protobuf/ protoc -I protobuf/ protobuf/sliverpb/sliver.proto --go_outpathssource_relative:protobuf/ protoc -I protobuf/ protobuf/clientpb/client.proto --go_outpathssource_relative:protobuf/ protoc -I protobuf/ protobuf/dnspb/dns.proto --go_outpathssource_relative:protobuf/ protoc -I protobuf/ protobuf/rpcpb/services.proto --go_outpathssource_relative:protobuf/ \ --go-grpc_outprotobuf/ --go-grpc_optpathssource_relative值得注意只有rpcpb/services.proto同时生成了 gRPC 服务代码--go-grpc_out因为只有它定义了 gRPC 服务其余四个 proto 仅生成普通消息代码。另外Makefile 在pb目标前会强制检查protoc、protoc-gen-go、protoc-gen-go-grpc三个可执行文件是否在$PATH中PB_COMPILERS变量与对应校验逻辑见 Makefile 与 Makefile缺失时会直接报错提示。生成后的.pb.go文件如 protobuf/sliverpb/sliver.pb.go即可作为后续make构建的输入。八、构建完成后的验证与常见问题8.1 验证构建产物构建完成后可以通过服务端命令行检查版本信息是否完整源码见 server/version/sliver-version.go$ ./sliver-server version该命令输出的版本号、Git 提交哈希、编译时间均来自 git VCS 构建信息如果看到Version: devel且缺少 GitCommit说明源码不是通过git clone获取的例如 ZIP 解压与官方文档的警告一致。8.2 常见问题速查首次构建长时间卡在下载阶段这是内嵌 Go 编译器、Zig、garble 等资源在下载输出目录为server/assets/fs下载器自带 3 次重试与 15 分钟超时util/assets/assets.go耐心等待或改善网络后重试即可提示 Golang version is not supportedGo 版本低于 1.27升级工具链后重试提示缺少 protoc / protoc-gen-go / protoc-gen-go-grpc仅运行make pb时需要按第七节安装对应版本生成的 Windows 二进制运行时 UI 乱码请使用支持 ANSI 序列的终端如 Windows Terminal。综上从git clone、make到交叉编译、Docker 多阶段构建再到.proto代码再生成Sliver 的整个构建链路都有清晰的 Makefile/Dockerfile 支撑。理解这些细节后无论是部署官方二进制还是对客户端、服务端乃至通信协议层做自定义改造都能做到有的放矢。赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐FoundationDB 源码构建完全指南从 Docker 镜像到多平台本地编译FoundationDB 源码构建完全指南从 Docker 镜像到多平台本地编译 本篇技术指南围绕 FoundationDB 官方仓库根目录的 README.分布式数据库KV存储数据库后端DataEase 源码构建指南从 Maven 编译到 Docker 镜像打包DataEase 源码构建指南从 Maven 编译到 Docker 镜像打包 引言 在数据分析和可视化领域开源工具的灵活性和可定制性为用户提供了极大的便利。数据分析数据可视化后端前端Mac鼠标指针个性化神器Mousecape一站式定制解决方案Mac鼠标指针个性化神器Mousecape一站式定制解决方案 还在为Mac系统单调的白色光标感到视觉疲劳吗Mousecape为您带来专业级的鼠标指针个性化解桌面应用创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/9/23 19:04:43

SG3525驱动电路设计避坑指南:输出电路与死区时间详解

简介:围绕SG3525电压型PWM控制器的功能特性与典型应用展开,内容覆盖芯片引脚排列、内部构造、电压模式控制原理、软启动与关断电路,以及振荡器充放电时间与频率计算方法,适合开关电源和电机调速方向的工程师、学生作为设计参考。资…

2026/9/23 19:04:43

二阶有源低通滤波器设计:从理论推导到LM324N焊板避坑指南

简介:这份PDF资料面向电子信息、通信工程等专业的本科生与课程设计学习者,系统整理二阶有源低通滤波器的设计流程与实现方法,帮助读者理解滤波器从理论推导到电路落地的完整思路。内容围绕截止频率10kHz的设计题目展开,涵盖压控电…

2026/9/23 19:04:43

DK77数控电火花线切割机床说明书拆解:原理、操作与故障排除

简介:一份面向数控设备操作人员、模具制造及精密加工从业者的中英文对照版DK77系列数控电火花线切割机床使用说明书,系统解决该系列机床从安装调试到日常操作、维护排故的全流程问题。资源为单份doc文档,文件大小231KB,内容涵盖机…

2026/9/23 19:54:50

SAP发票校验从入门到避坑:MIRO三单匹配与容差配置实战解析

简介:在SAP财务与物料管理集成中,发票校验是采购闭环的关键环节,其核心事务MIRO承担着采购订单、收货单与供应商发票的三单比对。系统通过容差参数、消息类型和基于收货的校验规则,自动判定差异是否可接受,并生成GR/IR…

2026/9/23 19:54:50

基于Spring Boot与Vue.js的医学电子教学系统设计与实现

1. 医学电子技术课堂系统概述医学电子技术课堂系统是一款面向医学院校和医疗培训机构设计的在线教学管理平台。作为一名长期从事医疗信息化系统开发的工程师,我在设计这套系统时特别考虑了医学电子技术课程的特殊需求——这类课程通常需要同时展示理论知识和设备操作…

2026/9/23 19:54:50

酷吧网踩坑实录:5个致命配置错误完整示例

酷吧网踩坑实录:5个致命配置错误完整示例 配置环境就卡半天?别急,这锅真不全是你的。 在酷吧网这类高并发社区平台开发中,环境配置往往是第一道鬼门关。 很多后端新手在这里折戟沉沙,其实核心问题就出在几个隐蔽的默认值上。 今天不讲虚的,直接上…

2026/9/23 19:54:50

Linux删除软连接5个致命坑,这份避坑指南救急

Linux删除软连接5个致命坑,这份避坑指南救急 生产环境半夜报警,你慌忙登录服务器查看日志,满屏红色的 Stack Trace 和 Permission denied 让你头皮发麻。想删个软连接释放空间,结果 rm…

2026/9/23 19:49:50

JSP图书管理系统部署实战:Eclipse+Tomcat+MySQL配置与排错

简介:这套图书管理系统源码基于JSPJavaTomcatMySQLEclipse开发,适合Java Web初学者、在校生用于课程设计或毕业设计,覆盖图书查询、借阅、归还、用户管理等典型业务场景。资源共179个文件,含50个JSP页面、33个Java源码与对应class…

2026/9/23 12:07:00

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/23 12:06:55

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码