Repository navigation
Conversation
⚠️ 本 PR 仅作建议,未做实际验证(编译验证通过,真机运行未验证)。 1) 接入参考仓库完整反 vr.ko 流程 - cfi_stage: 常驻内核读写(configfs fops 伪造 + pipe 物理读写) - cfi_stage: neutralize_vr_probes 探针外科手术式中和 (读 probestub,按模块内 delta 定位 sys_exit 槽位,只改那一个槽) - w2b: 逐任务去 tag(thread_info.flags bit 0x400 + task+0x06 / +0x2c) 2) 恢复被 overlay 覆盖掉的 1.3 原载荷功能 - detect_device_brand_runtime / load_boot_image - probe_vrko_from_vendor_boot(运行时解析 tag A/B) - recover_sys_exit_tp_funcs(从内核内嵌 kallsyms/BTF 恢复) - 老式粗粒度 sys_exit 指针清零改用 GHOSTLOCK_LEGACY_SYSEXIT_KILLSWITCH 门住(默认关) 原因:它必须读 sys_exit_tp.funcs[],与细粒度中和硬冲突 3) 执行顺序调整:反 vr.ko 移到 KSU 移交之后 改前 Backend → 【CFI+中和】 → Frontend handoff 改后 Backend → Frontend handoff → 【CFI+中和】 原因:在 framework 未稳、KSU 未接管时改写 ashmem_misc.fops 与 sys_exit 探针数组,正是导致软重启的时序 新增文件: src/core/session/backend/{cfi_layout.hpp,cfi_stage.hpp,cfi_stage.cpp} src/core/tests/cfi_stage_test.cpp app/src/main/assets/kernel_profiles/6.6.89-android15-8-g1f71897ac249-abogki467805059-4k.conf 编译验证(非真机运行验证): aarch64 交叉编译通过 build/native/ghostlock = 259,768 B APK BUILD SUCCESSFUL,libghostlock.so 与源码构建 sha256 一致 标志串:vr neutralize ×12 / neutralized ×2 / vendor_boot ×16
hmascs
marked this pull request as ready for review
October 3, 2026 17:54
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
完整适配反 vr.ko 逻辑 + 恢复 1.3 载荷功能 + 调整执行顺序
本 PR 仅作建议,未做实际验证。
neutralize_vr_probes的ok=1、vr.ko 探针槽位定位、逐任务 tag 清除的实际效果,均没有在本机跑通确认。
&ashmem_misc.fops与sys_exittracepoint 的 funcs 数组,属高危内核数据写;一旦地址推导有偏差,可能造成设备无法启动。不要未经真机验证就分发。
本 PR 做了什么
1. 接入参考仓库的完整反 vr.ko 流程
把 CVE-2026-43499-Neo11Plus 的反
vr.ko 两层机制完整接进本工程:
exploit/src/*src/core/session/backend/cfi_stage.cppthread_info.flagsbit 0x400 +task+0x06/task+0x2c)root.c: patch_task_vr_tagw2b阶段probestub,按模块内 delta 定位sys_exit槽位,只改那一个槽)root.c: neutralize_vrcfi_stage.cpp: neutralize_vr_probes新增文件:
src/core/session/backend/cfi_layout.hppsrc/core/session/backend/cfi_stage.hppsrc/core/session/backend/cfi_stage.cppsrc/core/tests/cfi_stage_test.cpp2. 恢复被 overlay 覆盖掉的 1.3 原载荷功能
cve_2026_43499_backend.cpp在接入 overlay 时被整体替换(45 KB → 30 KB),导致下列功能丢失,本 PR 全部补回:
bootimg::detect_device_brand_runtime(品牌检测:属性优先,boot 字节回落)bootimg::load_boot_image(boot / vendor_boot / kcore 三路加载)bootimg::probe_vrko_from_vendor_boot(运行时解析 vr.ko 的 tag A/B 偏移)bootimg::recover_sys_exit_tp_funcs(profile 缺失时从内核内嵌 kallsyms/BTF 恢复)一处刻意的取舍:把
sys_exit.funcs指针整体清零的老式粗粒度写,用编译期开关GHOSTLOCK_LEGACY_SYSEXIT_KILLSWITCH默认关闭。原因是它与第 1 项的细粒度中和硬冲突:neutralize_vr_probes必须读sys_exit_tp.funcs[]才能定位 vr.ko 的模块内探针槽,若先被整体清零,CFI 扫描会落空。解析/恢复逻辑全部保留并启用,只门住那一笔冲突的内核写。
3. 调整执行顺序:反 vr.ko 移到 KSU 移交之后
原顺序(会软重启):
改后:
理由:CFI 阶段会替换
&ashmem_misc.fops并改写sys_exit探针数组,在 framework 尚未稳定、KernelSU 尚未接管时做这些,正是把设备带进软重启的时序。
改动位置:
src/core/session/backend/cve_2026_43499_backend.cpp:移除run_cfi_stage<M>调用(留注释说明去向)src/core/route/pipeline.hpp:在Frontend::run()之后派发session::backend::run_cfi_stage<Middleware>(exploit_session)Done),现在也会执行反 vr.ko,不再直接
DiagnosticStop返回Termux / aarch64 构建适配(3 处必须改)
overlay 的
Makefile是按桌面 NDK 写的,在 Termux aarch64 上需要:NDK_ROOT为空 → 编译器路径变成/toolchains/...NDK_ROOT指向一个假 NDK 目录;aarch64-linux-android35-clang{,++}必须是转发脚本(不能做符号链接:Termux 包装器按自身目录找clang++)-static-libstdc++,Termux clang 会翻成-lc++_shared→ 链接失败LDFLAGS="-fPIE -pie -pthread -flto"CXX_SRCS完全没列core/bootimg/*→detect_device_brand_runtime未定义CXX_SRCS编译验证结果(非真机运行验证)
build/native/ghostlock= 259,768 Blibghostlock.so与源码构建产物sha256 逐字节一致(
f912bc3f27096891)vr neutralize×12、neutralized×2、ghostlock_guard×5、vendor_boot×16、recovered tag_A×1合并前建议补充的验证
dmesg不再出现scheduling while atomicvr无法加载、su/ KernelSU 不再被杀cmp_disasm对比攻击路径地址未漂移