这是一个 KernelSU 模块,用来隐藏 Scene 常用 TCP 端口 8788 和 8765 的端口探测。
模块分两部分:
- eBPF:隐藏
bind()型端口探测。 - service.d 脚本:隐藏部分
connect()型端口探测。
默认目标应用包名是 Scene:
com.omarea.vtools模块采用通用 Magisk 模块结构,理论兼容:
- KernelSU
- Magisk
- APatch / APM
当前主要在 KernelSU 环境测试通过。
Magisk 和 APatch 用户需要自行确认设备内核满足 eBPF、BTF、kprobe 等要求。这个模块能否正常工作,主要取决于内核能力,而不是 root 管理器本身。
这个模块和手机内核强相关。不同手机、不同系统版本、不同内核构建出来的模块不一定通用。
推荐每个用户都用自己手机的 /sys/kernel/btf/vmlinux 自助构建一次。
不要直接拿别人设备构建出来的包乱刷。
新版本模块会在安装时检查内核 BTF 指纹。如果模块包里的指纹和当前手机 /sys/kernel/btf/vmlinux 不一致,安装会被拒绝,避免刷错设备。
这个模块不是所有 root 设备都能用。建议满足以下条件再尝试:
- 设备是 arm64 / arm64-v8a。
- 已安装 KernelSU,并且 ADB 可以获取 root 授权。
- 当前内核支持 eBPF、BPF map 和 kprobe。
- 当前内核存在
/sys/kernel/btf/vmlinux。 - 当前内核能挂载 bind 相关 kprobe 符号,例如
__sys_bind、__se_sys_bind、sys_bind、SyS_bind或__arm64_sys_bind。 - 系统可用
iptables/ip6tables,并支持-m owner --uid-owner。
普通用户可以先执行:
su
ls -lh /sys/kernel/btf/vmlinux
exit如果提示文件不存在,当前公开自助构建方案基本不支持这台设备。
如果想进一步检查:
su
uname -a
getprop ro.product.cpu.abi
cat /proc/kallsyms | grep -E "(__sys_bind|__se_sys_bind|sys_bind|SyS_bind|__arm64_sys_bind)" | head
command -v iptables && command -v ip6tables
exit一般建议 Android 12 以后、内核 5.4 以后、有 /sys/kernel/btf/vmlinux 的 arm64 设备再尝试。这个版本线不是绝对要求,因为有些厂商会回移植 eBPF/BTF,也有些新内核会裁剪相关能力。
这条路线最简单:不需要自己安装 Android Studio、NDK、bpftool 或 libbpf,只需要 Fork 仓库,然后让 GitHub Actions 自动构建。
打开本仓库,点右上角 Fork,创建到自己的 GitHub 账号下面。
进入自己 Fork 后的仓库,点 Actions。
如果 GitHub 提示启用 Actions,就点启用。
电脑连接手机,确认 ADB 可用:
adb devices然后执行:
adb shell su -c "cp /sys/kernel/btf/vmlinux /data/local/tmp/vmlinux.btf && chmod 0644 /data/local/tmp/vmlinux.btf"
adb pull /data/local/tmp/vmlinux.btf vmlinux.btf
adb shell su -c "rm -f /data/local/tmp/vmlinux.btf"注意:不要用下面这种方式导出:
adb shell su -c "cat /sys/kernel/btf/vmlinux" > vmlinux.btf这种方式容易把二进制 BTF 文件弄坏。必须使用 adb pull。
如果导出时报错,通常是以下原因之一:
- 手机没有 root 权限。
- ADB 没有拿到 root 授权。
- 当前内核没有
/sys/kernel/btf/vmlinux。
打开自己 Fork 的 GitHub 仓库。
进入 btf 文件夹,点:
Add file -> Upload files
上传刚刚导出的:
vmlinux.btf
确保上传后的路径是:
btf/vmlinux.btf
然后点 Commit changes。
进入自己 Fork 的仓库:
Actions -> Build KernelSU module -> Run workflow
第一次建议这样选:
Create a GitHub Release after building: false
然后点绿色的 Run workflow。
第一次构建会比较久,因为 GitHub Actions 需要下载 Android NDK,并编译 libbpf、libelf 和 zlib。
后续构建会使用缓存,通常会快一些。
Actions 成功后,进入那次运行记录。
在页面底部 Artifacts 里下载:
hideSceneport_module
下载后解压,里面会有:
hideSceneport_module.zip
这个就是 KernelSU 模块包。
如果运行 workflow 时把 Create a GitHub Release after building 设为 true,也可以直接在仓库 Releases 页面下载 hideSceneport_module.zip。
把 hideSceneport_module.zip 放到手机。
打开 KernelSU Manager:
模块 -> 从本地安装 -> 选择 hideSceneport_module.zip -> 重启
重启后执行:
su
cat /data/adb/modules/hideSceneport/hideport.log
cat /data/adb/modules/hideSceneport/hide_scene.log
ps -A | grep hideport
exit正常情况下,hideport.log 里应该能看到类似内容:
hidden port: 8788
hidden port: 8765
attached direct probe to __sys_bind
hideport loaded
同时 Scene 应该可以正常打开。
默认配置在 hideport.conf:
PKG=com.omarea.vtools
PORTS="8788 8765"
ENABLE_EBPF=1
WAIT_FOR_PROCESS=0一般用户不需要改。
如果 Scene 包名、端口或运行方式发生变化,可以在构建前修改 hideport.conf,然后重新构建模块。
如果你不想用 GitHub Actions,也可以在 Linux 或 WSL 中本地构建。
连接手机后执行:
bash tools/build_for_connected_device.sh脚本会自动:
- 从手机拉取
/sys/kernel/btf/vmlinux。 - 生成
src/vmlinux.h。 - 下载 Android NDK r25c。
- 编译 Android arm64 的
libz.a、libelf.a和libbpf.a。 - 编译
hideport_loader和hideport.bpf.o。 - 打包生成
../hideSceneport_module.zip。
因为 eBPF CO-RE 依赖目标内核的 BTF 信息。不同手机或不同内核的结构可能不同。
同机型同系统版本有机会通用,但不保证。最稳妥的方式是用自己的手机导出 vmlinux.btf 后重新构建。
正常。
hideport_loader 是静态链接程序,里面包含 libbpf、libelf、zlib 等依赖。不同构建环境生成的二进制大小可能不同。
只要刷入后日志显示 hideport loaded,并且 Scene 正常打开即可。
模块日志在:
/data/adb/modules/hideSceneport/hideport.log
/data/adb/modules/hideSceneport/hide_scene.log
先禁用模块并重启。
然后检查日志,确认是否是自己手机导出的 vmlinux.btf 构建出来的包。
如果是从别人那里下载的预编译包,建议重新按上面的步骤自助构建。
说明这个模块不是用当前手机的 /sys/kernel/btf/vmlinux 构建出来的。
请重新从当前手机导出 vmlinux.btf,上传到自己的 Fork,再跑一次 GitHub Actions。
如果您觉得这个模块对您有帮助,可以考虑请作者喝杯咖啡:
| 微信支付 | 支付宝 |
|---|---|
![]() |
![]() |

