ZTE G7615 host hook 点--->光猫主系统启动后插入DIY脚本
本帖最后由 anysoft 于 2026-7-16 11:43 编辑G7615 host 启动流程与 hook 点
有了这些hook点,配合/opt/cu/apps目录可读写,/usr/sbin overlay,默认PATH优先级,可以在光猫启动后启动自己的程序,比如dropbear,高级web管理台(diy的)等等等功能,AI vibe Coding 可以自由的飞翔了~~~(ufw都可以关闭了)
默认PATH
/sbin:/usr/sbin:/usr/bin:/bin:/dbus/bin:/dbus/sbin:/dbus/usr/bin:/dbus/usr/sbin:/usr/ovs/bin:/usr/ovs/sbin:/var/tmp/wireless
本文记录 G7615 rootfs 中 host 侧启动链路,以及可在可写持久分区中插入自定义命令的 hook 点。分析对象是 host 主系统;/opt/cu/framework 下的 UFW/LXC rootfs 不计入 host 启动脚本。
结论
host 启动过程中可稳定利用的持久 hook 点主要来自 /opt/cu/apps 这个 UBIFS 可写分区。关键机制是开机中途将 /usr/sbin overlay 到 /opt/cu/apps/usrsbin,使后续裸命令查找优先命中可写上层目录。
可挂 hook 点共 5 个:
启动优先级Hook 路径触发位置推荐真实转发目标风险等级
1/opt/cu/apps/usrsbin/dbus-uuidgen在 `/etc/init.d/dbus-rcS` 执行:
dbus-uuidgen --ensure
/usr/bin/dbus-uuidgen "$@"中
2/opt/cu/apps/usrsbin/getkerpdinfo在 `/etc/init.d/rcS` 中执行:
getkerpdinfo
无需转发,Hook 执行完成后:
exit 0
低
3/opt/cu/apps/usrsbin/lowpower在 `/etc/init.d/rcS` 中执行:
lowpower rgmii
lowpower ipsec
/bin/lowpower "$@"中低
4/opt/cu/apps/usrsbin/pc在 `/etc/init.d/rcS` 中后台执行:
pc &
/bin/pc "$@"高
5/opt/cu/apps/tt/ufwmg`dbus-rcS` 创建 `/usr/sbin/ufwmg` 指向该文件后,在后续业务启动 UFW 时触发。/bin/ufwmg "$@"中高
如果只需要一个早期 host hook,优先考虑 /opt/cu/apps/usrsbin/dbus-uuidgen。如果希望利用厂商已有预留逻辑,并且接受它触发时间更靠后,则可使用 /opt/cu/apps/tt/ufwmg。
host 启动主流程
[*]/init 执行 exec /bin/busybox init。
[*]BusyBox init 读取 /etc/inittab。
[*]/etc/inittab 未直接启用普通 ::sysinit:/etc/init.d/rcS,而是通过 shellproxy 启动:
/bin/shellproxy ttyAMA0 115200 /etc/init.d/rcS /dev/ttyp0
[*]/etc/init.d/rcS 执行 mount -a,设置 PATH:
PATH="/sbin:/usr/sbin:/usr/bin:/bin:/dbus/bin:/dbus/sbin:/dbus/usr/bin:/dbus/usr/sbin:/usr/ovs/bin:/usr/ovs/sbin:/var/tmp/wireless"
[*]rcS source /etc/default/S00tagparam,挂载 /tagparam:
mount -n -t jffs2 -o nosuid /dev/mtdblock3 /tagparam
[*]rcS source /etc/default/S01userconfig,挂载一批 tmpfs 和可写持久分区:
mount -n -t jffs2 -o nosuid /dev/mtdblock5 /userconfigmount -t ubifs ubi0_0 /opt/cu/apps -o nosuid
[*]rcS 挂载 /kmodule 后,按顺序执行 /etc/rcS.d/S??*:
/etc/rcS.d/S02wlan/etc/rcS.d/S20tsmac/etc/rcS.d/S30network/etc/rcS.d/S43BSPDriver/etc/rcS.d/S99modules
[*]S02wlan 挂载 /wlan:
mount -n -t jffs2 -o nosuid /dev/mtdblock4 /wlan
[*]rcS 创建 /CuInform overlay:
mount -t overlay overlay -o lowerdir=/usr/pre_plugin/pre_CuInform_$host_name,upperdir=/opt/cu/apps/CuInformUpper,workdir=/opt/cu/apps/CuInformWork /CuInform
[*]rcS source /etc/init.d/dbus-rcS。
[*]dbus-rcS 创建 /usr/sbin overlay:
mount -t overlay overlay -o lowerdir=/usr/sbin,upperdir=/opt/cu/apps/usrsbin,workdir=/opt/cu/apps/usrsbin_work /usr/sbin
[*]overlay 后,dbus-rcS 执行裸命令:
dbus-uuidgen --ensure
[*]dbus-rcS 处理 ufwmg 链接:
if [ -f /opt/cu/apps/tt/ufwmg ]; then ln -sf /opt/cu/apps/tt/ufwmg /usr/sbin/ufwmgelif [ -f /bin/ufwmg ]; then ln -sf /bin/ufwmg /usr/sbin/ufwmgfi
[*]返回 rcS 后,继续执行:
getkerpdinfolowpower rgmiilowpower ipsecpc&hostname -F /proc/csp/boardtype
[*]pc 启动后管理 dbus-daemon、cspd 等 host 业务;cspd 再拉起 httpd、scpd、telnetd、voip、upnpd、nas_main、mqttd 等进程。后续 UFW/LXC 框架会通过 ufwmg service ... 启动。
hook 点详解
1. /opt/cu/apps/usrsbin/dbus-uuidgen
这是最早的明确 hook 点。dbus-rcS 挂上 /usr/sbin overlay 后立刻调用 dbus-uuidgen --ensure。原始二进制位于 /usr/bin/dbus-uuidgen,但 PATH 中 /usr/sbin 排在 /usr/bin 前面,所以 /opt/cu/apps/usrsbin/dbus-uuidgen 会优先命中。
推荐 wrapper:
#!/bin/sh
/bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
exec /usr/bin/dbus-uuidgen "$@"
优点:
[*]触发早,在 pc 启动之前。
[*]与业务进程关系较弱,转发目标明确。
风险:
[*]如果 wrapper 阻塞,整个 rcS 会卡在 dbus-uuidgen 这里。
[*]如果不转发真实 /usr/bin/dbus-uuidgen,可能影响 DBus machine-id 初始化。
2. /opt/cu/apps/usrsbin/getkerpdinfo
rcS 中有裸命令:
getkerpdinforootfs
中未找到明确的真实 getkerpdinfo 文件,因此可将它作为纯 hook 使用:
#!/bin/sh
/bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
exit 0
优点:
[*]触发早,在 pc 启动之前。
[*]不需要转发真实程序,失败影响相对小。
风险:
[*]如果脚本阻塞,同样会卡住 rcS。
[*]如果真实设备某些版本存在厂商 getkerpdinfo,不转发可能丢失诊断信息采集。
3. /opt/cu/apps/usrsbin/lowpower
rcS 在部分地区码条件下执行:
lowpower rgmii
lowpower ipsec
真实程序位于 /bin/lowpower,可通过 /opt/cu/apps/usrsbin/lowpower 包装:
#!/bin/sh
/bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
exec /bin/lowpower "$@"
优点:
[*]在 pc 之前触发。
[*]会被调用两次,可在 hook 中用 flag 防止重复执行。
风险:
[*]不转发会影响低功耗/硬件省电设置。
[*]某些地区码为 334 时,该分支不会执行,因此不是所有配置下都稳定触发。
防重复示例:
#!/bin/sh
flag=/tmp/boot_hook.lowpower.done
if [ ! -f "$flag" ]; then
touch "$flag"
/bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
fi
exec /bin/lowpower "$@"
4. /opt/cu/apps/usrsbin/pc
rcS 最后用裸命令后台启动:
pc&
真实程序位于 /bin/pc。可包装为:
#!/bin/sh
/bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
exec /bin/pc "$@"
优点:
[*]一定处在 host 主业务启动前。
[*]若需要在 cspd/httpd/telnetd 等业务进程前准备环境,这个点位置合适。
风险:
[*]这是最高风险点。pc 是主进程管理器,负责拉起和监控核心业务。
[*]wrapper 写错、权限错误、没有 exec /bin/pc "$@",会导致 DBus、CSPD、Web、Telnet、VoIP 等 host 业务异常。
5. /opt/cu/apps/tt/ufwmg
dbus-rcS 明确预留了可写替换逻辑:
if [ -f /opt/cu/apps/tt/ufwmg ]; then
ln -sf /opt/cu/apps/tt/ufwmg /usr/sbin/ufwmg
fi#!/bin/sh
/bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
exec /bin/ufwmg "$@"
页:
[1]