GhostLock 的执行链由 Pipeline<Frontend, Backend, Middleware> 在编译期固定:
- frontend:启动/交接(当前
root_child;umh_forward为声明但不可用的占位); - backend:漏洞原语与写入步骤(当前
cve_2026_43499;cve_2026_64560为纯头占位,不可用); - middleware:一次写的 route(
select_stack/tcp_zerocopy/multicast_waiter)。
组件如何被选择、组合与执行,由以下唯一权威决定:
- 可用性:
route/component_catalog.hpp的frontend_available/backend_available/middleware_available。identity 与执行 policy 都不携带available。 - 组合与分派:
combination_supported(selection)列出可派发三元组;dispatch_target_of(frontend, backend, middleware)给出完整组合的分派目标;orchestrator.hpp的每个 case 用static_assert(P::target == …)锁定。分派键保留完整选择:当前目录只有root_child × cve_2026_43499 × {三种 middleware},新增 frontend/backend 时必须同时扩展DispatchTarget枚举、映射与 orchestrator 分支——不能只按 middleware 决定 pipeline。 - 执行入口:
route/pipeline.hpp的Pipeline<F,B,M>::run,编译期校验catalogued、MiddlewarePolicy<M>、FrontendExecution<F>与BackendExecution<B,M>,返回RunResult。 - 绑定方式:backend 步骤模板化在 middleware 上(
Cve2026_43499Policy::run<M>/attack_write<M>), 以M::w2_fast_repair_prebuild等静态 hook 直接调用,无虚表;hook 边界[[gnu::noinline]]。
新增组件属 L 级改动:先读 design-philosophy.md 与 engineering-standards.md,产出计划并获认可,
再按本文改动。
| 位置 | 文件 | 做什么 |
|---|---|---|
| Native 注册 | profile/model.h |
RouteKind 取值、kRouteFooWaiter、kRouteCatalog 一行 |
| Native 可用性 | route/component_catalog.hpp |
middleware_available 收录新 kind |
| Native Policy | route/route_policy.hpp |
FooPolicy(能力 + supported/run + 需要的 hook 覆写声明),追加到 RoutePolicyList |
| Native 分派 | route/component_catalog.hpp + route/orchestrator.hpp |
DispatchTarget 加值、dispatch_target_of 映射、orchestrator case(Pipeline<…, FooPolicy> + target static_assert) |
| Native 实例化 | session/backend/cve_2026_43499_backend.cpp |
显式实例化 run<FooPolicy> / attack_write<FooPolicy> |
| Native 实现 | route/foo_route.{h,cpp} |
Route 类 + do_foo_fake_lock_route + policy hook 的 Android 定义 |
| Native 构建 | src/Makefile、src/CMakeLists.txt |
加入 core/route/foo_route.cpp |
| Native 传输 | profile/binary.cpp |
route 字段表(有私有参数时) |
| Native 导出 | build.gradle.kts |
routeFieldPaths 加该 route |
| Kotlin 注册 | data/route/RouteKind.kt |
(token, wire) 与配置构造 |
| Kotlin 参数 | data/route/FooConfig.kt |
有私有参数时新增 |
| 测试 | 见「四」 | catalog/policy/catalog-dispatch/contract/route/cmp_disasm |
两侧登记同一个 token 与 wire 值。src/core/tests/route_catalog_test.cpp 与
app/src/test/.../RouteCatalogAgreementTest.kt 断言同一列表,任何一边漏改都会失败。
只有这条 route 才用的参数放 route 扩展节:Kotlin FooConfig 的 entries()/apply()/from()
与 native profile/binary.cpp 的字段表键名逐字一致;导出任务 routeFieldPaths 同步。
共享代码会读的参数属于公共槽,两侧顺序必须一致。
route/foo_route.{h,cpp}:Route 类满足 RouteLifecycle(prepare → execute → disarm → destroy,
仅经 status 汇报;不用虚基类)。上半部分 host 可编译,入口与 hook 定义放 #if defined(__ANDROID__) 段。
route/route_policy.hpp 加 FooPolicy : RoutePolicyDefaults:
- 能力(
static constexpr bool,编译期):multicast、w2_fast_repair、w3_exact_target、tcp_payload_layout、allows_fallback。只写需要为true的,其余继承默认。 - 有副作用的 hook:
w2_fast_repair_prebuild/activate(session)。默认由RoutePolicyDefaults提供;覆写时在该 unit 提供定义并让声明带[[gnu::noinline]](防止 LTO 把 route 实现内联进攻击函数)。 - 纯查询(如一次性 route 的 W1 重试上限、是否需要 scratch 修复、W3 是否精确命中):不需要 hook,
在 backend 步骤内用
if constexpr (M::…)+ profile 运行时值表达。
catalog 加 DispatchTarget 值与该 kind 的映射;orchestrator 加 case:
case DispatchTarget::RootChild_Cve43499_FooWaiter: {
using P = Pipeline<session::frontend::RootChildPolicy,
session::backend::Cve2026_43499Policy,
route::FooPolicy>;
static_assert(P::target == DispatchTarget::RootChild_Cve43499_FooWaiter,
"dispatch case must match the pipeline's target");
return P::run(exploit_session, decoded, debug_dir, force_attack);
}并在 cve_2026_43499_backend.cpp 末尾补该 policy 的显式实例化(漏掉会链接失败)。
DispatchTarget 名带完整组合前缀,是为了让后端/前端维度扩展时映射与分支同步增长。
| 位置 | 文件 | 做什么 |
|---|---|---|
| identity | route/backend_policy.hpp |
FooBackend + 与 catalog 绑定的 static_assert |
| 可用性/组合 | route/component_catalog.hpp |
BackendKind 取值、backend_available、combination_supported、分派维度 |
| contract 注册 | route/backend_contract.hpp |
BackendIdentityList 加 FooBackend |
| 执行 policy | session/backend/foo_backend.{hpp,cpp} |
FooPolicy(kind + run<M> / attack_write)、identity 绑定断言、显式实例化 |
| 分派 | route/orchestrator.hpp |
新 backend × middleware 组合的 Pipeline 分支 |
| 构建/测试 | src/Makefile + backend_contract_test + profile_binary_test + Kotlin |
不可用 backend(占位):只提供 identity + kind + unavailable_reason(参考
session/backend/cve_2026_64560_backend.hpp),不实现 run、不实例化 Pipeline;可用性由 catalog
表达,wire 只携带 id(没有 backend 私有 section——未来字段必须进自己的 section,不得复用 43499 的槽)。
与 backend 同构:route/frontend_contract.hpp 提供 FrontendIdentity(仅 kind)与
FrontendExecution<F>(可用 frontend 的 run(session, chain) 精确返回 StageResult),以及
FrontendIdentityList / for_each_frontend 注册表;执行 policy 在 session/root_child_frontend.hpp
(RootChildPolicy::run 承载 startup/handoff),该头以 static_assert 绑定 identity 与 catalog;
Pipeline 以 static_assert(FrontendExecution<F>) 约束组合入口。UMH 的职责边界见
frontend_contract.hpp(child 生命周期与 KernelSU handoff 不合并;UMH 不得默认绑定 KernelSU)。
新增组件至少补这些测试:
route_catalog_test.cpp/RouteCatalogAgreementTest.kt:canonical 列表同步(middleware)。route_policy_test.cpp:能力断言与派发计数(middleware)。component_catalog_test.cpp:组合、dispatch_target与映射(新组合)。backend_contract_test.cpp:FrontendIdentity/FrontendExecution/BackendIdentity/BackendExecution/Pipeline::target(新 frontend/backend/middleware)。foo_route_test.cpp:构造/析构/几何(middleware),并登记进NATIVE_HOST_TESTS。profile_binary_test.cpp:wire 解码/拒绝(新 id)。- 新增攻击路径函数时,把它加进
tools/cmp_disasm.py的TARGETS。
make -C src ghostlock # 真机二进制
make -C src native-host-tests # 主机单元测试
make -C src lint-tidy # clang-tidy(0 findings)
python3 tools/cmp_disasm.py <baseline> build/native/ghostlock
./gradlew :app:testDebugUnitTest --offline最后在真机跑一次(冷机、固定 CPU 对、KernelSU 未加载),确认组件被选中、写验证通过,
并按 docs/analysis/device-gates/ 格式归档。未过真机不得标 supported。
新增 middleware:
-
RouteKind+kRouteCatalog(两侧一致) -
middleware_available收录 -
FooPolicy(能力 + hook)+RoutePolicyList -
DispatchTarget+dispatch_target_of+ orchestrator case(target 断言) -
cve_2026_43499_backend.cpp显式实例化 - Route 类 + 入口 + Android hook 定义
-
Makefile/CMakeLists.txt/routeFieldPaths/ route 扩展节 - 测试矩阵 +
cmp_disasm(触攻击路径时)+ 真机门禁
新增 backend:
- identity + catalog 可用性/组合 +
BackendIdentityList - 执行 policy(
run<M>/ 显式实例化 / identity 绑定断言)或占位(无 run) - orchestrator 组合分支 + 测试 + wire 解码测试
新增 frontend:
- identity(可含 unavailable reason)+ 执行 policy(handoff)+ 组合接线 + 测试