GitHub Explorer

Sandboxie 作者的任务管理器:75 万行只写 14 万

GitHub: https://github.com/DavidXanatos/TaskExplorer

一句话总结

Sandboxie-Plus 的开源化维护者 David Xanatos「站在 Process Hacker 肩上」,用约 14 万行自写的 Qt 应用层,把成熟的内核内省 C 库 phlib 重壳成一个现代化、有跨平台志向的强力 Windows 任务管理器——它不告诉你「哪些程序在跑」,而是深挖「程序在干什么」。

值得关注的理由

  • 「复用而非重造」的务实工程范式样本:全仓 75 万行里约 85% 是 vendored 的第三方源码(Process Hacker 的 phlib/phnt/KSystemInformer 内核驱动 + Qt 绘图库 qwt),作者真正自写的只有 TaskExplorer/ 下约 14 万行。这层「C 内核库 ↔ Qt model/view」的桥接抽象,是任何想给重型 C/C++ 系统库做现代化前端的人都能照搬的设计。
  • 作者背书极硬:David Xanatos 是著名沙箱软件 Sandboxie-Plus 的接手者与开源化推手,13 年 GitHub 账号、949 粉丝,全线产品(wumgr、priv10/MajorPrivacy)一致聚焦「用户掌控、开源透明、反封闭花园」。可信度在 Windows 安全/系统工具圈属顶级。
  • 细分蓝海里的差异化卡位:在 Process Hacker/System Informer 这一「Windows 进程内省事实标准」之上,TaskExplorer 用 Qt 换掉原生 Win32 GUI,预留 Linux 移植接缝,并与 Sandboxie 生态打通——是「既依赖根基、又与根基竞争」的独特存在。近 25 天月入 100+ star,明显加速。

项目展示

线程视图

线程/栈回溯面板:可逐线程查看调用栈回溯,远超内置任务管理器的「线程数」一个数字。

句柄视图

句柄视图:句柄列表带文件名、偏移与大小,是逆向/排障定位「谁占用了这个文件/资源」的关键能力。

项目画像

维度数据
GitHubhttps://github.com/DavidXanatos/TaskExplorer
Star / Fork3615 / 286
代码行数753K(tokei 全仓;其中约 85% 为 vendored 第三方源码,作者自写应用层 ≈13.3 万行)。语言:C 32.8% / C Header 29.2%(主要来自 vendored phlib/phnt)+ C++ 20.2%(作者 Qt 代码)+「TypeScript」12.7%(实为 Qt Linguist 翻译 XML,非 TS)+ C# 1.5%
项目年龄84 个月(约 7 年,2019-05 起)
开发阶段低维护(成熟稳定,近 90 天仅 5 commit、近 30 天 0,但 2026-05 仍在打 v1.8.0 补丁,未放弃)
贡献模式独立开发(主作者占 ~85% 贡献,其余多为社区翻译者)
热度定位中等热度 / 细分精品(被低估,近期高速增长)
质量评级代码[良好] 文档[一般] 测试[无]

作者视角:为什么存在这个项目

创始人/作者背景

David Xanatos(维也纳,Xanasoft,xanasoft.com)是 Windows 安全/系统内核工具领域的资深个人开发者。他最知名的身份是 Sandboxie-Plus 的接手维护者与开源化推手——Sandboxie 经 Invincea→Sophos 几度易手后,由他自 2020 年起接管并彻底开源化。他还做过 wumgr(Windows 更新管理)、priv10/MajorPrivacy(隐私+防火墙)、NeoScriptTools。整条产品线一致聚焦「Windows 安全、隐私、系统内省、用户掌控、反封闭花园」,他甚至公开反对 Google 对 Android 开发者的强制验证。这种价值观直接塑造了 TaskExplorer 的选择:GPL-3.0 全开源、自带可审计的内核驱动、与 Sandboxie 生态打通。

问题判断

作者看到的不是「Windows 缺一个任务管理器」——Process Hacker(现 System Informer)早已是事实标准。他看到的是另一条被忽视的轴:Process Hacker 的 GUI 与 Win32/phlib 数据死耦合,无法跨平台,且界面停留在传统 Win32 风格。于是他没有重造内核轮子,而是复用 phlib 作数据底座,自己只写一层 Qt 应用——换来现代化界面、未来的 Linux 移植可能,以及与自家 Sandboxie 生态的深度集成。时机上,这与他 2020 年起全面接手 Sandboxie、需要一个能深挖沙箱进程的进程浏览器高度吻合(典型的 dogfooding + 生态延伸)。

解法哲学

  • 明确选择「复用而非重造」:内核态/系统查询全部交给成熟的 phlib + KSystemInformer 驱动,自己只写应用层,把精力投在差异化(Qt GUI + 跨平台 + Sandboxie 集成)上。
  • 明确选择开放透明:GPL-3.0,源码可审,自带内核驱动(代价是承接 Process Hacker 的信任包袱,见 Issue #114 驱动签名讨论)。
  • 明确不做的事:不自研内核组件、不做云端/SaaS、(v1.7 起)放弃 32 位 Windows 以减负。

战略意图

TaskExplorer 是作者「Windows 系统掌控工具矩阵」中的进程内省支柱,与 Sandboxie-Plus(沙箱)、MajorPrivacy(隐私/防火墙)互补,并共享基建(Qt 辅助库 MiscHelpers/、在线更新器 UpdUtil/)。纯开源 + Patreon 捐赠,无 open-core/商业化痕迹。7 年低维护但 2025 年(Qt6 迁移 + TaskHelper 重构)有明显复活。

核心价值提炼

创新之处

  1. 「Qt 重壳 + Process Hacker phlib 内核」的桥接范式(新颖度 4/5 · 实用性 4/5 · 可迁移性 4/5):不重写内核库,而是用 CastPhString/CastQString 字符串桥 + 抽象 CSystemAPI/CProcessInfo,把一整套成熟 C 内核库「翻译」成 Qt model/view 喂给现代 GUI——既蹭满 PH 的能力,又获得跨平台与 UI 现代化的接缝。
  2. Qt-free 特权 worker + 命名管道 CVariant RPC 的权限分离(新颖度 3/5 · 实用性 4/5 · 可迁移性 4/5):v1.7 起拆出独立 TaskHelper.exe,刻意不依赖 Qt(只链 phlib + 自研序列化),保持小巧可审计;与 GUI 通过 named pipe 走「长度前缀 + CVariant 序列化」的定长帧通信,承担提权操作(RunAsTrustedInstaller / 改优先级 / 释放内存)。
  3. DynData 自更新解决内核结构版本漂移(新颖度 4/5 · 实用性 3/5 · 可迁移性 2/5):把易随 Windows 内核版本失效的偏移数据外置为可热更新的 ksidyn.bin,复用上游 SystemInformer 的发布物,无需重发驱动即可适配新系统。
  4. 多产品线共享基建(新颖度 2/5 · 实用性 3/5 · 可迁移性 3/5):与 Sandboxie-Plus 共用 Qt 辅助库与 Sandboxie 风格在线更新器,沙箱进程标记 + Original Token 查看打通生态。

可复用的模式与技巧

  1. OS 无关抽象基类 + 按平台分目录实现:抽象 CSystemAPI/CProcessInfo(QObject 纯虚),GUI 只绑抽象 QSharedPointer,平台差异列用 #ifdef WIN32 门控——给原生库做跨平台 GUI 前端的通用范式。
  2. 带 refcount 处理的双向 FFI 字符串 cast 原语:CastPhString(转出即 PhDereferenceObject)/CastQString(PhCreateStringFromUnicodeString)——任何 C 库 ↔ Qt/C++ 类型绑定边界都能照搬。
  3. out-of-process 特权 worker + 长度前缀消毒帧 + Qt-free 序列化 RPC:TaskHelper + SendCVariant/RecvCVariant(带 100MB 上限消毒)——桌面应用权限分离与高危操作隔离。
  4. set-diff(Added/Changed/Removed)增量更新信号 → 模型 Sync():高频数据下保选中/滚动态、免全量重置,全程 QReadWriteLock 保护、异步枚举用 QFutureWatcher——实时进程/网络/日志表格视图通用做法。
  5. Result 类型(STATUS/ERR()/OK,FlexError.h)承载 NTSTATUS:以返回值而非异常传播错误——与 C API 大量交互、不想用异常的 C++ 代码库。
  6. 外置可热更新的内核偏移数据(DynData):解耦驱动二进制与内核版本漂移。

关键设计决策

  • 平台无关抽象基类,为 Linux 移植预留接缝:API/SystemAPI.h 定义抽象 CSystemAPI(大量纯虚 UpdateProcessList() 等),Windows 侧 CWindowsAPI/CWinProcess 落地,API/Linux/LinuxAPI.cpp 提供同名子类但全是空壳(方法直接 return true)。换来「GUI 永不直接碰 phlib」的干净解耦,代价是抽象基类大量样板、Linux 实现至今仍是占位——跨平台是架构志向而非已实现能力,需如实看待。
  • 特权分离三层架构:主 GUI 进程 ↔ TaskHelper.exe(Qt-free 特权 worker/服务)↔ KTaskExplorer.sys(KSystemInformer 内核驱动,KphConnect + DynData)。把高危操作下沉到无重型依赖的独立进程,主进程瘦身、攻击面收窄,代价是引入跨进程 IPC 与序列化复杂度。
  • 字符串/内存模型的 FFI 边界设计:phlib 用引用计数 PPH_STRING + NT 结构体,Qt 用 QString/QSharedPointer,两套内存模型靠 CastPhString/CastQString 两个原子函数无缝互转;CWinProcess::InitStaticData(_SYSTEM_PROCESS_INFORMATION*) 是主战场(WinProcess.cpp 达 127KB)。海量逐字段桥接样板正是那 14 万行应用层的主体——这也是「价值不在代码量」的原因。

竞品格局与定位

竞品对比矩阵

维度TaskExplorerSystem Informer(前 Process Hacker)Process Explorer(Sysinternals)Windows 任务管理器
GUI 框架Qt(现代化 + 跨平台志向)原生 Win32原生 Win32原生 Win32
内省深度深(句柄/线程栈/内存编辑/ETW)深(同源 phlib,更权威)中(句柄/DLL,网络弱)浅(屏蔽受保护进程)
开源GPL-3.0 ✓MIT ✓闭源闭源(内置)
内核驱动自带(重编译 systeminformer.sys)自带(官方)微软签名系统级
生态集成Sandboxie 沙箱集成插件体系无无
维护活跃度低维护(7 年长尾)高(官方继任)缓慢(微软)随系统
Star 量级3.6K万级(~12K+)闭源无 star内置

差异化护城河

  • 生态护城河:Sandboxie 集成 + 与自家工具线共享更新器/辅助库,这是 System Informer 不会做的。
  • 技术差异化:Qt 重壳带来的跨平台接缝(Linux 高级 GUI 任务管理器卡位)与现代界面。
  • 信任护城河:开源可审 + 知名作者背书(Sandboxie 作者)。
  • 但需诚实承认:内核能力本身非独占——它借自上游 phlib,护城河在「壳」与「生态」而非「核」。

竞争风险

最可能被 System Informer 覆盖——它是 TaskExplorer 的技术根基,活跃度与资源全面占优。若 System Informer 推出现代化/跨平台 GUI,TaskExplorer 的差异化将被大幅蚕食。7 年低维护节奏(近 90 天仅 5 commit)也是长期可持续性风险。

生态定位

Process Hacker/System Informer 内核能力的「Qt 现代化前端 + Sandboxie 生态绑定」分支,在「Linux 高级 GUI 任务管理器」这一细分蓝海里抢卡位,与上游是「既依赖又竞争」的微妙关系。

套利机会分析

  • 信息差:知名度(3.6K star)远落后于其技术根基 System Informer(万级)与实际工程质量,且作者背书极硬——属于「高质量 + 活跃 + 知名度尚未匹配实力」的潜力股。
  • 技术借鉴:「C 库 ↔ Qt model/view 桥接」「Qt-free 特权 worker + 长度前缀 RPC 权限分离」「OS 无关抽象基类 + 平台分目录」三套模式,对任何要给重型原生库做跨平台桌面前端的团队都是现成蓝本。
  • 生态位:填补了「现代 Qt GUI + 跨平台志向 + 深度进程内省 + 沙箱集成」的空白;正面对手只有 System Informer 与 Process Explorer,偏蓝海而非红海厮杀。
  • 趋势判断:近 25 天月入 100+ star、明显加速,与 v1.7.x/v1.8.0 连发、Qt6.8 升级、微软签名驱动 + EV 代码签名等稳定性里程碑吻合——成熟项目的「二次生长」信号。

风险与不足

  • 构建门槛极高(Issue #86「无法从源码构建」19 评论):嵌入 Process Hacker、phlib、qwt、zlib 多套源码树 + Qt + MSVC + 内核驱动的混合工具链,对外部贡献者几乎劝退,也是项目长期单人主导的客观成因。
  • 跨平台仍是空头支票:API/Linux/LinuxAPI.cpp 至今是空壳,「Linux 高级 GUI 任务管理器」是志向而非现实,勿被宣传误导。
  • 无任何应用层测试:质量靠手测 + Issue 反馈驱动;CI(.github/workflows/main.yml)仅 workflow_dispatch 触发且只编内核驱动产物,不构建 App、不跑测试。
  • 无架构/设计文档:理解架构需读码或借助外部 DeepWiki;CHANGELOG 详尽但含较多拼写错误。
  • 信任成本:自带需加载的内核驱动,对安全敏感环境是天然顾虑(Issue #114)。
  • 巴士因子=1:7 年单人维护、近期低频,作者一旦停手,社区难以接力(构建门槛太高)。

行动建议

  • 如果你要用它:你是逆向/安全研究者、需深挖「程序在干什么」(线程栈回溯、句柄文件名、内存字符串搜索、ETW 网络追踪)且偏好现代 Qt 界面 + 开源可审,或本就是 Sandboxie 用户——选它。若只求权威稳定、要微软签名背书或更活跃维护,选 System Informer 或 Process Explorer。
  • 如果你要学它:重点读 TaskExplorer/API/Windows/ProcessHacker.cpp(CastPhString/CastQString/InitKSI 桥接核心)、API/Windows/WinProcess.cpp(phlib→Qt 字段翻译)、API/SystemAPI.h + API/ProcessInfo.h(OS 无关抽象基类)、TaskHelper/Main.cpp(Qt-free 特权进程 + named pipe RPC)、GUI/Models/ProcessModel.h(增量 set-diff 模型)。
  • 如果你要 fork 它:最有价值的方向是把 API/Linux/ 的空壳真正实现(读 /proc 填充抽象基类),兑现「Linux 高级 GUI 任务管理器」的承诺——抽象接缝已经铺好,这是回报最高的切入点;其次是补应用层测试、简化构建链降低贡献门槛。

知识入口

资源链接
DeepWikihttps://deepwiki.com/DavidXanatos/TaskExplorer (已收录,含架构/内核组件/API 参考)
Zread.ai未收录
关联论文无
在线 Demo无(桌面原生应用;官网 https://xanasoft.com/ 提供截图与安装包)

相关报告