查看: 69|回复: 0

[教程] ZTE G7615 host hook 点--->光猫主系统启动后插入DIY脚本

[复制链接]
发表于 6 小时前 |广东| 显示全部楼层 |阅读模式
本帖最后由 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
  1. /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:

  1. #!/bin/sh

  2. /bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
  3. exec /usr/bin/dbus-uuidgen "$@"
复制代码



优点:

  • 触发早,在 pc 启动之前。
  • 与业务进程关系较弱,转发目标明确。

风险:
  • 如果 wrapper 阻塞,整个 rcS 会卡在 dbus-uuidgen 这里。
  • 如果不转发真实 /usr/bin/dbus-uuidgen,可能影响 DBus machine-id 初始化。




2. /opt/cu/apps/usrsbin/getkerpdinfo

rcS 中有裸命令:
  1. getkerpdinforootfs
复制代码


中未找到明确的真实 getkerpdinfo 文件,因此可将它作为纯 hook 使用:
  1. #!/bin/sh

  2. /bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
  3. exit 0
复制代码





优点:
  • 触发早,在 pc 启动之前。
  • 不需要转发真实程序,失败影响相对小。

风险:
  • 如果脚本阻塞,同样会卡住 rcS。
  • 如果真实设备某些版本存在厂商 getkerpdinfo,不转发可能丢失诊断信息采集。




3. /opt/cu/apps/usrsbin/lowpower

rcS 在部分地区码条件下执行:
  1. lowpower rgmii
  2. lowpower ipsec
复制代码




真实程序位于 /bin/lowpower,可通过 /opt/cu/apps/usrsbin/lowpower 包装:


  1. #!/bin/sh

  2. /bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
  3. exec /bin/lowpower "$@"
复制代码




优点:
  • 在 pc 之前触发。
  • 会被调用两次,可在 hook 中用 flag 防止重复执行。

风险:
  • 不转发会影响低功耗/硬件省电设置。
  • 某些地区码为 334 时,该分支不会执行,因此不是所有配置下都稳定触发。

防重复示例:


  1. #!/bin/sh

  2. flag=/tmp/boot_hook.lowpower.done
  3. if [ ! -f "$flag" ]; then
  4.     touch "$flag"
  5.     /bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
  6. fi

  7. exec /bin/lowpower "$@"
复制代码



4. /opt/cu/apps/usrsbin/pc

rcS 最后用裸命令后台启动:
  1. pc&
复制代码




真实程序位于 /bin/pc。可包装为:
  1. #!/bin/sh

  2. /bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
  3. 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 明确预留了可写替换逻辑:

  1. if [ -f /opt/cu/apps/tt/ufwmg ]; then
  2.     ln -sf /opt/cu/apps/tt/ufwmg /usr/sbin/ufwmg
  3. fi
复制代码
  1. #!/bin/sh

  2. /bin/sh /opt/cu/apps/tt/boot_hook.sh >/tmp/boot_hook.log 2>&1 &
  3. exec /bin/ufwmg "$@"
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

相关侵权、举报、投诉及建议等,请发 E-mail:yesdong@qq.com

Powered by Discuz! X5.0 Licensed © 2001-2026 Discuz! Team.44152102000001

在本版发帖QQ客服返回顶部