Sliver 客户端 crack 命令组深入解析:GPU 分布式口令破解的完整工作流
2026/9/23 12:38:06 网站建设 项目流程
  • 网络安全

【免费下载链接】sliver

Adversary Emulation Framework

项目地址:https://gitcode.com/gh_mirrors/sl/sliver
点击查看免费下载

本篇技术指南围绕 Sliver(Adversary Emulation Framework)客户端控制台中的crack命令组展开,系统讲解其命令层级结构、crackstation(破解工作站)状态与后端设备信息、缓存基准测试(benchmarks)、持久化破解任务(jobs)的完整生命周期、词表/规则/hcstat2 文件管理,以及基于 Bubble Tea 的全屏实时监视器crack top。读完本文,你将掌握如何通过 Sliver 客户端把一个基于 Hashcat 的分布式 GPU 破解集群完整地纳管、调度与监控,并理解每个命令背后的 RPC 调用链与源码实现细节。

crack 命令组概览

在 client/command/crack/ 目录中实现的crack命令组,是 Sliver 客户端连接服务端后操作 GPU 口令破解集群的统一入口。从 crack.go 的注释可以看到,它被定位为 "GPU password cracking interface",其核心设计目标包括:

  • 分布式任务调度:破解工作由服务端调度到多台已连接的 crackstation(每个 crackstation 上运行 Hashcat),客户端只负责下发任务与查看结果;
  • 持久化任务:任务(CrackJob)由服务端持久化,客户端可以随时列出、查看、暂停、恢复、取消和删除;
  • 同步查询:keyspace 计算、候选总数、候选定位、哈希类型识别、哈希信息等操作在空闲 crackstation 上同步执行,不创建任务;
  • 实时监控:通过全屏 TUI(crack top)实时观察任务进度、GPU 设备遥测与历史图表。

命令字符串常量定义在 client/constants/constants.go:crackstationsbenchmarkswordlistsruleshcstat2

命令层级结构:Cobra 命令树的构建

crack命令组由 commands.go 中的Commands()函数统一构建,它接收*console.SliverClient并返回根命令,完整的命令树如下:

crack # GPU password cracking(破解调用/信息面板) ├── stations # 管理 crackstation(-–show-benchmarks 显示基准速率) ├── benchmarks # 显示服务端缓存的基准测试结果(-a/--all 显示全部哈希模式) ├── jobs # 列出持久化破解任务 ├── top # 全屏实时监视器(--poll-interval 默认 1s,最小 250ms) ├── job [id] # 查看单个任务(-w/--watch 轮询直到终态;--poll-interval 状态轮询间隔) │ ├── cancel [id] # 取消进行中或已暂停的任务 │ ├── pause [id] # 暂停进行中的任务 │ ├── resume [id] # 恢复已暂停的任务 │ └── rm [id] # 删除已结束(完成/失败/取消)的任务 ├── wordlists # 管理词表 │ ├── add <path> # 上传词表(-n/--name 指定名称,默认取文件名) │ └── rm <name> # 删除词表 ├── rules # 管理规则文件 │ ├── add <path> # 上传规则文件 │ └── rm <name> # 删除规则文件 └── hcstat2 # 管理 Markov hcstat2 文件 ├── add <path> # 上传 hcstat2 文件 └── rm <name> # 删除 hcstat2 文件

从源码可以看出几个值得注意的细节:

  • 根命令crack绑定了一个--timeout/-t(默认flags.DefaultTimeout)gRPC 超时参数,用于控制与服务端的 RPC 调用超时;
  • crackcrack jobscrack job的 handler 都通过flags.Bind("", true, ...)绑定timeouttrue表示该标志在子命令间继承;
  • 所有涉及任务 ID、词表、规则、hcstat2 的位置参数都注册了基于 carapace 的补全器(completer),如CrackJobIDCompleterCrackWordlistCompleterCrackRulesCompleterCrackHcstat2Completer,其中任务 ID 补全会过滤出可操作的任务(可暂停、可恢复、可取消、终态任务各有专属补全器,见 helpers.go)。

调用分发:一次 crack 命令如何被分类处理

crack根命令的处理器CrackCmd(crack.go)首先调用classifyCrackInvocation(crack-dispatch.go)对命令进行"调用分类",决定本次执行属于哪种模式:

调用模式触发条件行为
crackInvocationDashboard无任何破解相关标志/参数显示 crackstation 在线数与已上传破解文件摘要(信息面板)
crackInvocationJob存在--hash、位置参数或破解相关标志构建CrackCommand提交到分布式任务队列,创建持久化任务
crackInvocationBackendInfo--backend-info/--backend-info-level直接展示所有已连接 crackstation 注册的后端设备信息,不创建任务
crackInvocationKeyspace--keyspace在空闲 crackstation 上同步计算 keyspace 并返回
crackInvocationTotalCandidates--total-candidates同步计算候选总数
crackInvocationLookup--lookup <candidate>同步定位某个候选在攻击中的位置
crackInvocationIdentify--identify-mode(配合位置哈希或--hash同步识别哈希类型
crackInvocationHashInfo--hash-info/--hash-info-level同步返回哈希模式信息

分类逻辑有严格的互斥与合法性校验:六种查询模式两两不能组合(会报 "crack query modes cannot be combined");--crackstation必须配合同步查询模式使用;--identify-mode与显式指定--hash-mode/--hash-type互斥;--keyspace/--total-candidates等候选查询与 benchmark、brain、restore、show/left、speed-only 等标志互斥(见incompatibleCandidateQueryFlags,crack-dispatch.go)。

对于任务提交,crack-command.go 中的buildCrackCommand会把 Cobra 标志逐一映射为clientpb.CrackCommandprotobuf 消息,覆盖 Hashcat 的几乎全部参数面:攻击模式(--attack-mode,支持 straight/combination/bruteforce/pcfg/hybrid-wordlist-mask/hybrid-mask-wordlist/generic/association/no-attack/hybrid 或数字,见 crack-command.go)、哈希类型(--hash-type支持数字或枚举名)、--hash-mode、可重复的--hash--credential--rules-file、8 个自定义字符集、增量模式、Markov、restore/outfile、benchmark、workload-profile、brain 服务器等。--segment-size已标记为 "removed in Hashcat v7" 并直接报错。

crackstation 状态与后端设备信息

crack stations命令由CrackStationsCmd(crack.go)实现,通过Rpc.Crackstations()获取所有已连接的工作站,并按名称/HostUUID 稳定排序后逐个渲染表格(renderCracker,crack.go)。每个工作站展示:

  • 操作系统(GOOS/GOARCH)、Hashcat 版本;
  • 后端设备(CUDA / HIP / Metal / OpenCL 四类),每类显示设备名、空闲/总显存、时钟与处理器数量(crack-backend-info.go);
  • --show-benchmarks后额外渲染该工作站上报的基准速率表(printBenchmarks)。

crack --backend-info(或--backend-info-level 1|2)则直接展示注册快照中的后端设备详情:级别 1 只显示设备摘要,级别 2 追加 Vendor、Vendor ID、Backend Device ID、Preferred Thread Size、Unified Memory、Local Memory、Cache Size、PCI Address 等细节,Metal/OpenCL 设备还有物理位置、Registry ID、平台信息等专属字段。代码注释明确说明这些信息来自"registration snapshots",即 crackstation 连接服务端时注册上报的快照,因此该查询不会唤醒空闲工作站执行 Hashcat。

缓存基准测试:crack benchmarks

crack benchmarksBenchmarksCmd(crack-benchmarks.go)实现,调用Rpc.CrackstationBenchmarks()获取服务端持久化缓存的基准快照(CrackBenchmarkSnapshot),与实时查询不同,工作站离线也能查看历史基准。渲染时每个快照包含:

  • 元数据:Name、Host UUID、Operator、Connection(Online/Offline)、Cache(Fresh/Stale)、当前 Hashcat 版本、基准时的 Hashcat 版本、基准 schema 版本、基准时间、缓存模式数;
  • 速率表:默认只显示 6 个代表性模式(representativeCrackBenchmarkModes,crack-benchmarks.go):MD5(0)、SHA1(100)、NTLM(1000)、SHA2-256(1400)、bcrypt(3200)、WPA-PBKDF2(22000);加--all显示全部缓存模式。

所有速率均通过humanizeHashRate以人类可读形式输出(如 12.50 GH/s)。基准快照表宽度被限制在 80 列、哈希类型列 48 列,保证窄终端可读性。

破解任务:从提交到生命周期管理

任务提交

crack被分类为任务模式时(crack.go),客户端先通过resolveManagedCrackFileReferences--markov-hcstat2--rules-file--restore-file--potfile等文件标识解析为服务端管理的破解文件引用,然后调用Rpc.Crack()提交。若返回的Job为空,提示 "Crack request submitted";否则打印任务 ID 与初始状态。

任务列表与详情

crack jobs通过Rpc.CrackJobs()拉取全部持久化任务,按更新时间倒序渲染表格,列包括 ID、Status、Created、Updated、Keyspace、Tasks、Results(crack-jobs.go)。

crack job [id]查看单个任务,其详情渲染renderCrackJob(crack-jobs.go)包含四个区段:

  1. 摘要:ID、状态、创建/更新时间、keyspace、错误信息;
  2. 任务表:每个子任务的 ID、Kind、State、所在工作站(HostUUID)、分片范围(ShardSkip+ShardLimit)、进度、速率、最高温度、更新时间;
  3. Hashcat 统计表:Session、Status、Target、Guess(mode/base/mask-length/mod)、Progress、Rejected、Restore Point、Recovered Hashes/Salts、Started、Estimated Stop;
  4. 设备表:每个 GPU 设备的 ID、Name、Type、Speed、Temp、Util、Fan、Core/Memory 频率、Bus lanes、Power。

这些遥测数据来源于 Hashcat 输出的 JSON 状态:parseCrackStatusJSON(crack-jobs.go)解析任务携带的LatestStatusJSON/RawStatusJSON/StatusJSON字段,兼容多行 JSON 流(decodeLastJSONObject会从后往前尝试解析最后一个 JSON 对象)。所有速率按设备速度汇总后经humanizeHashRate输出;温度取设备最大温度。

--watch/-w模式下,watchCrackJob(crack-jobs.go)按--poll-interval(默认 1 秒)轮询,通过 protobuf 确定性序列化比较前后快照,仅在任务状态变化时重绘,直到任务进入终态(COMPLETED/FAILED/CANCELLED,见crackJobTerminal)或上下文取消。

任务生命周期操作

crack job cancel/pause/resume/rm共享同一套"拉取-校验-确认-变更-校验结果"模板(runCrackJobLifecycleCmdapplyCrackJobLifecycleAction,crack-jobs.go),每个操作有严格的资格检查:

操作资格预期状态确认提示
cancel进行中或已暂停CANCELLED"未完成的工作将被丢弃"
pause进行中PAUSED"恢复时可能从分片开头重新开始"
resume已暂停IN_PROGRESS
rm仅终态(完成/失败/取消)提示将删除 N 个 task 与 M 个 result

服务端返回后还会校验UpdatedAt > 0、返回 ID 与请求一致、返回状态等于预期状态,防止竞态导致的状态漂移。任务选择支持位置参数直接传 ID;不传 ID 时通过forms.CrackJobSelectForm弹出交互式选择框,且只列出符合条件的任务(例如cancel只列出可取消任务)。

破解结果展示

任务渲染的最后一部分是 "Recovered Credentials" 表,包含 CredentialID、Hash、Plaintext。结果优先取任务级Results字段(服务端已物化的权威结果),为空时才回退解析各 task 的RecoveredJSON中的明文(parseRecoveredResults),并对(CredentialID, Hash, Plaintext)元组去重。非 UTF-8 或含空字节的明文以0x十六进制形式展示(displayCrackPlaintext)。

破解文件管理:词表、规则与 hcstat2

crack wordlists/crack rules/crack hcstat2三个子命令组管理服务端存储的三类破解资产(crack-files.go),底层全部走Rpc.CrackFilesList()并按CrackFileType_WORDLIST / RULES / MARKOV_HCSTAT2过滤。列表视图展示文件名与解压后大小,并附带磁盘配额统计:Disk quota xx.xx% - 已用 of 上限(二进制字节单位,如 GiB)。

上传:流式分块 + zstd 压缩

crack wordlists add <path>(同样适用于 rules/hcstat2)的流程值得重点关注(crack-files.go):

  1. 校验本地文件(必须为普通文件,拒绝目录);
  2. 未指定--name时默认取文件名;
  3. 调用Rpc.CrackFileCreate()创建服务端文件预留(含 ID 与分块大小ChunkSize);
  4. 进入uploadCrackFile:读取本地文件,同时用io.TeeReader计算 SHA-256 摘要;
  5. chunkReader以 32MB 读缓冲把文件流式写入临时文件,用 zstd(SpeedBetterCompression级别)压缩,再按服务端给定的ChunkSize切成固定大小分块,逐块调用Rpc.CrackFileChunkUpload()上传,并打印上传进度;
  6. 全部上传完成后调用Rpc.CrackFileComplete()提交 SHA-256 摘要完成校验;
  7. 失败自动清理:任一分块上传失败,defer 中会调用Rpc.CrackFileDelete()删除服务端预留,避免残留半成品。

删除

crack wordlists rm <name>等删除命令先按类型列出文件、按名称匹配,命中后调用Rpc.CrackFileDelete()删除,未命中时报 "xxx not found"。

实时监视器:crack top

crack top是 crack 命令组的核心亮点之一,其实现位于 client/command/crack/top/ 子包,而 top.go 只是保持 API 兼容的薄壳(facade),把调用转发给cracktop.CrackTopCmd。该监视器是一个基于 Bubble Tea(charm.land/bubbletea/v2)+ Lip Gloss + Huh 的全屏 TUI 仪表盘。

数据加载与刷新策略

  • 轻量快照加载器loadCrackTopSnapshot一次性拉取任务与工作站的最小快照,避免全量渲染开销;
  • 双通道刷新:既按--poll-interval(默认 1 秒,最小强制 250ms,见crackTopMinimumInterval)定时轮询,也订阅服务端事件流(CreateEventListener)在事件到达后以不超过 500ms 的去抖延迟触发刷新(crackTopEventDebounce);
  • 版本号防抖:轮询与事件刷新都带 generation 计数,过期消息直接丢弃,配合context取消避免重复拉取;
  • 动作回显:在 TUI 内执行 pause/resume/cancel/delete 后,先以 RPC 返回的权威状态覆盖本地视图(jobStatusOverrides),等待后续快照确认后才撤销覆盖,且对"同一秒内两次状态变更"的等版本争议做了兼容处理(top/top.go)。

界面与操作

监视器支持 Jobs/Workers 双窗格布局,宽终端(≥104 列)左右分栏,窄终端上下分栏;终端过小(<64×18)会显示尺寸警告。键盘操作:

按键功能
q/esc退出
tab/shift+tab在 Jobs 与 Workers 窗格间切换焦点
↑/k↓/jhome/gend/G移动选择
f打开状态过滤器(all/active/paused/completed/failed)
d/delete删除选中的终态任务(需确认)
p暂停进行中的任务(需确认)
u恢复已暂停的任务
c取消进行中/已暂停的任务(需确认)
r手动刷新
ctrl+c退出

每个动作都有资格预检(crackTopJobActionEligibilityWarning),如只有终态任务可删除、只有进行中任务可暂停;确认弹窗通过 Huh 表单实现。操作结果以 toast 提示展示(成功/失败,5 秒后消失),并记录到仪表盘日志(journal)。历史快照(history)用于绘制速率/进度趋势图表,测试覆盖见 top/top_test.go 与 top/loader_test.go。

共享展示层:internal/hashcatdisplay

client/command/crack/internal/hashcatdisplay/ 是命令处理器与监视器共享的展示辅助包,避免两者耦合。其中:

  • hashcatHashTypes是一张覆盖 300+ 个 Hashcat 模式的名称映射表(MD5、NTLM、bcrypt、WPA-PBKDF2、Kerberos、BitLocker、KeePass、VeraCrypt、Ethereum 钱包等),供TypeName(mode)查询;来源注释标明取自 client/credentials/EXAMPLES.md;
  • HumanizeRate(rate)把每秒哈希数格式化为 H/s、kH/s、MH/s、GH/s、TH/s、PH/s。

该包让crack benchmarkscrack stations --show-benchmarkscrack top中哈希类型名称与速率的展示保持一致。

源码级验证与测试

围绕 crack 命令组,仓库提供了较完整的测试覆盖,可作为理解行为的参考:

  • crack-benchmarks_test.go:基准快照渲染、代表性模式过滤与--all行为;
  • crack-command_test.go:标志到CrackCommand的映射与参数校验;
  • crack-job-lifecycle_test.go 与 crack-job-rm_test.go:pause/resume/cancel/rm 的资格校验、确认流程与结果校验;
  • crack-files_test.go:分块上传、压缩与失败清理;
  • helpers_test.go:任务 ID 补全的过滤逻辑;
  • top/top_test.go、top/loader_test.go 等:TUI 状态机与快照合并。

服务端对应的 RPC 实现位于 server/rpc/rpc-crack.go(任务提交/查询/生命周期)与 server/rpc/rpc-crackstations.go(工作站注册与基准缓存),protobuf 定义在 protobuf/clientpb/client.proto 的CrackCommandCrackJobCrackstationCrackBenchmarkSnapshotCrackFile等消息中。

典型使用流程

一个完整的"上传资产 → 识别哈希 → 提交任务 → 监控 → 取结果"闭环如下:

# 1. 上传词表与规则(名称默认取文件名) crack wordlists add /path/to/rockyou.txt crack rules add /path/to/best64.rule # 2. 查看在线 crackstation 及其基准 crack stations --show-benchmarks # 3. 识别哈希类型(同步查询,不创建任务) crack --identify-mode 5f4dcc3b5aa765d61d8327deb882cf99 # 4. 提交破解任务(-m 指定哈希模式,-a 指定攻击模式) crack -m 0 -a 0 --hash 5f4dcc3b5aa765d61d8327deb882cf99 # 5. 查看任务列表与详情,或进入全屏监视器 crack jobs crack job <id> --watch crack top # 6. 生命周期管理 crack job pause <id> crack job resume <id> crack job cancel <id> crack job rm <id> # 仅终态任务 # 7. 清理不再需要的资产 crack wordlists rm rockyou.txt

小结

Sliver 客户端的crack命令组把 Hashcat 的能力完整封装为"服务端调度 + 客户端操作"的分布式破解体系:stations/--backend-info负责集群可见性,benchmarks提供离线可查的基准缓存,jobs系列命令覆盖任务的查看与完整生命周期,wordlists/rules/hcstat2管理破解资产,crack top则以全屏 TUI 提供实时遥测与图表。理解这些命令背后的源码组织(命令树、调用分类、protobuf 映射、流式分块上传、事件驱动的 TUI 状态机),有助于在实战中精准调度 GPU 资源、定位任务瓶颈,并为二次开发或扩展自定义破解工作流提供可靠的代码级依据。

  • 网络安全

【免费下载链接】sliver

Adversary Emulation Framework

项目地址:https://gitcode.com/gh_mirrors/sl/sliver
点击查看免费下载

相关推荐

上一篇:xiaozhi-esp32 使用指南:免费打造能语音对话、可控制硬件的 MCP 聊天机器人
下一篇:终极前端技能图谱:基于va/vagas数据的全面可视化指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询