Skip to content

Awazs12/Scene-Port-Hider-by-eBPF

 
 

Repository files navigation

Scene Port Hider by eBPF

这是一个 KernelSU 模块,用来隐藏 Scene 常用 TCP 端口 87888765 的端口探测。

模块分两部分:

  • eBPF:隐藏 bind() 型端口探测。
  • service.d 脚本:隐藏部分 connect() 型端口探测。

默认目标应用包名是 Scene:

com.omarea.vtools

Root 方案兼容性

模块采用通用 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_bindsys_bindSyS_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 自动构建。

1. Fork 仓库

打开本仓库,点右上角 Fork,创建到自己的 GitHub 账号下面。

进入自己 Fork 后的仓库,点 Actions

如果 GitHub 提示启用 Actions,就点启用。

2. 从自己的手机导出 BTF

电脑连接手机,确认 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

3. 上传 BTF 到自己的 Fork

打开自己 Fork 的 GitHub 仓库。

进入 btf 文件夹,点:

Add file -> Upload files

上传刚刚导出的:

vmlinux.btf

确保上传后的路径是:

btf/vmlinux.btf

然后点 Commit changes

4. 运行 GitHub Actions 构建

进入自己 Fork 的仓库:

Actions -> Build KernelSU module -> Run workflow

第一次建议这样选:

Create a GitHub Release after building: false

然后点绿色的 Run workflow

第一次构建会比较久,因为 GitHub Actions 需要下载 Android NDK,并编译 libbpflibelfzlib

后续构建会使用缓存,通常会快一些。

5. 下载构建好的模块

Actions 成功后,进入那次运行记录。

在页面底部 Artifacts 里下载:

hideSceneport_module

下载后解压,里面会有:

hideSceneport_module.zip

这个就是 KernelSU 模块包。

如果运行 workflow 时把 Create a GitHub Release after building 设为 true,也可以直接在仓库 Releases 页面下载 hideSceneport_module.zip

6. 安装模块

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.alibelf.alibbpf.a
  • 编译 hideport_loaderhideport.bpf.o
  • 打包生成 ../hideSceneport_module.zip

常见问题

为什么别人构建的包我不能直接用?

因为 eBPF CO-RE 依赖目标内核的 BTF 信息。不同手机或不同内核的结构可能不同。

同机型同系统版本有机会通用,但不保证。最稳妥的方式是用自己的手机导出 vmlinux.btf 后重新构建。

Actions 构建出来的文件大小和本地不一样正常吗?

正常。

hideport_loader 是静态链接程序,里面包含 libbpflibelfzlib 等依赖。不同构建环境生成的二进制大小可能不同。

只要刷入后日志显示 hideport loaded,并且 Scene 正常打开即可。

日志在哪里?

模块日志在:

/data/adb/modules/hideSceneport/hideport.log
/data/adb/modules/hideSceneport/hide_scene.log

刷入后 Scene 打不开怎么办?

先禁用模块并重启。

然后检查日志,确认是否是自己手机导出的 vmlinux.btf 构建出来的包。

如果是从别人那里下载的预编译包,建议重新按上面的步骤自助构建。

安装时报 Kernel BTF mismatch 是什么?

说明这个模块不是用当前手机的 /sys/kernel/btf/vmlinux 构建出来的。

请重新从当前手机导出 vmlinux.btf,上传到自己的 Fork,再跑一次 GitHub Actions。

捐赠

如果您觉得这个模块对您有帮助,可以考虑请作者喝杯咖啡:

微信支付 支付宝
微信支付 支付宝

About

隐藏Scene运行时的端口

Resources

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages

  • Shell 67.0%
  • C 26.9%
  • PowerShell 4.8%
  • Assembly 1.3%