一、 插件类型与运行体系深度解析
Ghost Proxifier 采用现代微内核与插件化架构。第三方代码永远不进入主进程内存空间,所有插件均以独立子进程受控运行。
- 随主程序安装分发(只读目录)
- 编译期 SHA-256 固化白名单
- 全局命名空间 (Global)
- 掌控所有 Target 进程与出口节点
- 商店下载 (.gpkg) 或本地导入
- 开发者 Ed25519 签名 + 官方代签
- 严格属主单向隔离 (Owner-Only)
- 受权限组约束,高危操作 30s 二次审批
1.1 插件的两大分类:内置插件 vs 外部插件
Ghost Proxifier 中的插件严格划分为两个信任层级(Two-Tier Trust Architecture):
- 内置插件 (Tier 1: Builtin / In-Tree):
随主安装包发行(位于<InstallDir>\plugins\builtin\<id>\)。主程序在编译期固化二进制 SHA-256 白名单(trust_chain.h中的kBuiltinWhitelist)。拥有全局共享命名空间 (Global),可直接调度管理系统内所有 Target 进程与出口节点。 - 外部插件 (Tier 2: External / Standard / Out-of-Tree):
通过官方插件商店下载安装(registry)或开发者模式本地导入(local)。依赖 Ed25519 证书信任链签名验证。受属主单向隔离命名空间 (Owner-Only) 约束,只能读写自己名下创建的资源,严禁窥探或篡改其他插件或用户的全局配置。
1.2 进程拓扑:插件是谁拉起来的?
很多开发者会好奇:插件是一个 DLL 注入到主进程,还是一个独立进程?答案是:绝对的独立子进程!
- 启动调用链路:
ghost_proxifier.exe(主进程) ➔supervisor.cpp(监督器) ➔ 启动ghost_plugin_host.exe(插件宿主进程) ➔ 拉起具体插件子进程。 - Job Object 物理绑定:
ghost_plugin_host.exe在启动插件时,使用CREATE_SUSPENDED挂起进程,将其加入 Windows Job Object(设置了JOB_OBJECT_LIMIT_KILL_ON_JOB_CLOSE),然后再ResumeThread。这保证了一旦宿主退出或发生崩溃,所有插件子进程会被 Windows 内核强制一次性物理回收,绝不会在后台残留僵尸进程。 - Low-IL 与特权剥离沙箱:外部插件默认在受限令牌(Restricted Token)与低完整性级别(Low-IL
S-1-16-4096)下运行,受 Windows 内核的No-Write-Up策略保护。插件无法写入当前用户的中高完整性文件目录,彻底隔绝恶意代码修改宿主配置。
1.3 Token 体系与注入机制(为什么不用命令行或环境变量?)
Ghost Proxifier 系统中存在三种 Token,各司其职:
X-Ghost-Token:主界面(UI WebView)专用的全权会话 Token,外部插件绝对无法获取。X-Ghost-Host-Token:宿主管理进程特权 Token,仅用于握手与宿主健康同步。X-Ghost-Plugin-Token:宿主为每个插件独立签发的 128 位随机 GUID 临时凭据。
答案是:严格通过进程的标准输入流(stdin)第一行 JSON 握手数据下发!
数据只在主宿主与插件两个进程的内核缓冲区中瞬时流转,不落盘、不广播,由插件在内存中解析持有,重启即换。
{
"v": 1,
"pluginId": "io.github.yourname.my-plugin",
"token": "4a7f9b8c-1234-5678-abcd-ef0123456789", <--- 插件内存临时凭据
"apiBase": "http://127.0.0.1:23551",
"dataDir": "C:\\Users\\...\\AppData\\Local\\GhostProxifier\\data\\...",
"stopEvent": "GhostPluginStop_..."
}
- 命令行传参极度危险:Windows 下同一登录会话中的任何普通程序,都可通过 WMI 查询、Process Explorer 或读取目标进程 PEB 查看到完整的启动命令行。如果把 Token 写在命令行参数里,等同于向本机所有运行中的程序明文广播凭据!
- 环境变量存在继承泄漏:环境变量极其容易在调用系统 API、启动子进程时被隐式继承或扩散,同样可通过 PEB 轻松跨进程读取。
1.4 内置插件 vs 外部插件:核心差异矩阵
| 特性维度 | Tier 1: 内置特权插件 (builtin) | Tier 2: 外部沙箱插件 (external / local) |
|---|---|---|
| 部署位置 | <InstallDir>\plugins\builtin\<id>\ (只读安装目录) |
%LOCALAPPDATA%\GhostProxifier\plugins\<id>\ (用户数据目录) |
| 完整性校验 | 编译期 SHA-256 固化白名单 | 开发者 Ed25519 签名 + 官方代签证书信任链 |
| 运行凭据 | 签发 Builtin 标记的特权 Token |
签发 Standard 标记的普通 Token |
| 资源命名空间 | 全局命名空间 (Global) | 严格属主隔离 (Owner-Only) |
| Target 目标权限 | 可直接控制、启停系统中任意 Target | 只能管理自己名下的 Target;启动需用户原生弹窗审批 |
| Upstream 节点权限 | 自由调度全局节点 | 只能 CRUD 属于自己的节点;节点账密明文恒被脱敏为 ****** |
| 外网出网权限 | 天然拥有出网能力 | 默认严禁向外联网,必须显式申请 ghost.egress.v1 |
| 生命周期 | 随 Ghost 主程序升级,不可删除(仅可禁用) | 独立生命周期,用户可随时安装、升级、卸载 |
| 最低版本要求 | 随主程序发行 | 依赖版本化权限组,最低需 Ghost Proxifier 1.2.2 或更高 |
1.5 为什么做这种分级别与多权限隔离?(架构初衷)
产品定位:浏览器的软硬件指纹伪装通常交由专业的指纹浏览器处理,而 Ghost Proxifier 专注于系统底层的 Winsock 接管与进程级网络流量治理。分级信任源于以下四个核心考量:
******,彻底封死脚本窃取企业代理账密的可能;拉进程、建隧道等动作均有审计日志与原生人工审批。ghost.egress.v1 闸门),避免私自劫持全局流量造成网络环路。