软件CT** 是一个用于采集与校验软件目录文件完整性的跨平台工具。它可以把一个软件目录下的全部文件和子目录信息(路径、类型、大小、修改时间、MD5,以及 Windows 下的代码签名)登记为一份 YAML 清单;之后可在任意时刻基于该清单对目标目录做完整性校验,识别出被篡改 / 缺失 / 新增的文件。
基于 Qt 5 开发,提供图形界面与命令行两种使用方式,可运行于 Linux 与 Windows。
功能特性
- 两种工作模式
- 编辑模式(采集):选择软件根目录后递归采集全部文件/子目录信息;支持手动增删文件与子目录、刷新(重算大小/时间/MD5/签名)、保存为 YAML。
- 验证模式(校验):加载已有 YAML,与目标目录实际内容逐一比对,标记「一致 / 不一致 / 缺失 / 新增」,并可导出验证报告。
- 完整性信息采集:相对路径(POSIX 风格)、MIME 类型、字节大小、修改时间(UTC ISO‑8601)、MD5(分块计算,支持大文件与取消)。
- 代码签名读取与验证(Windows):读取可执行文件的 Authenticode 嵌入式签名,提取签名者、证书编号(序列号)、签名时间并做有效性验证;签名时间同时支持旧式时间戳与 RFC3161 时间戳。文件信息表与验证结果表在 Windows 下均新增签名列。
- 友好的界面:左侧目录树 + 右侧文件表(验证模式为「原始/当前」双行并按状态着色);支持文件名过滤、只看异常、右键菜单(打开、复制路径/MD5、查看签名信息等)、拖放目录/文件、最近文件历史、窗口与列宽记忆。
- 命令行模式:无需 GUI 即可刷新清单或执行验证,便于接入自动化/CI。
- 跨平台:源码全程 UTF‑8;Linux/Windows 统一用 CMake 构建;Windows 编译为 GUI 程序并内嵌应用图标。
使用
图形界面
soft-ct # 启动图形界面(默认编辑模式)
soft-ct <config.yml> # 启动并加载指定清单,进入验证模式
- 编辑模式:选择/拖入软件目录自动采集 → 可增删/刷新 → 保存为
*.softct.yml。 - 验证模式:打开清单 → 确认「软件所在目录」→ 点「开始验证」→ 查看结果(可「保存验证结果」为
*.verify.yml)。
命令行
soft-ct --refresh <yaml> # 按清单重新采集并覆盖写回 yaml
soft-ct --verify <yaml> --saveto <json> # 按清单执行验证,结果写入 JSON
soft-ct --export-ico <out.ico> [--svg <path>] # 从内置/指定 SVG 生成多尺寸 .ico
soft-ct --help | -h # 显示帮助
退出码:
| 码 | 含义 |
|---|---|
0 | 成功(验证时表示无差异) |
1 | 出错,或验证发现差异 |
2 | 参数错误 |
说明:Windows 下为 GUI 子系统程序,命令行模式仍可用(退出码有效),但默认不向控制台输出文本。
YAML 清单格式
采集结果(节选,Windows 采集会额外写入 signature):
soft_ct_version: 1
software:
name: safe-file-manager
version: 1.2.0
root: . # 采集时位置,验证时以界面所选目录为准
collected_at: "2026-05-30T02:15:00Z"
directories:
- name: bin
- name: share/icons
files:
- path: bin/app.exe
type: "application/x-dosexec"
size: 1245680
mtime: "2026-05-29T18:21:33Z"
md5: "0d4f3a2e9b78c1ad5e6f0c4b1a2d8e7f"
signature: # 仅 Windows 采集时写入
state: valid # valid / invalid / none / unsupported / unknown
signer: "Example, Inc."
cert_serial: "026f295c7f2421f49a87d93369d05f3f"
signed_at: "2026-01-27T16:14:19Z"
验证报告(*.verify.yml)包含 summary(total/match/mismatch/missing/extra)与逐条 items(含 original/current 对比)。
设计要点:路径统一相对根目录、POSIX 风格;时间统一 UTC;校验以 size + MD5 判定是否一致(mtime 仅展示)。
代码签名(Windows)
- 采集/刷新时对常见可签名文件(
.exe/.dll/.sys/.msi/...)读取 Authenticode 嵌入式签名并调用WinVerifyTrust验证。 - 提取字段:签名者(证书主题名)、证书编号(序列号)、签名时间(优先签名者签名时间,其次旧式时间戳,最后 RFC3161 时间戳)。
- 状态:
valid(验证通过)/invalid(验证未通过)/none(无嵌入签名)/unsupported(非 Windows)。 - 界面:文件信息表与验证结果表在 Windows 下新增「签名者 / 证书号码 / 签名时间」列,并可通过右键「查看代码签名信息」查看详情。
- 说明:仅识别嵌入式签名;通过安全编目(catalog)签名的系统组件会显示为「未签名」。



