anysoft 发表于 2026-7-16 11:25:00

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]
查看完整版本: ZTE G7615 host hook 点--->光猫主系统启动后插入DIY脚本