在 iKuai 爱快软路由上原生运行 OpenWrt 软件包

本教程整理自 奶昔论坛帖子,作者 nyarime(奶昔论坛管理员)。
原理:基于 Naixi 定制固件,在爱快 iKuai 的 ramdisk rootfs 上叠加 OpenWrt 的 musl 运行时,从而实现 opkg 包管理。


一、背景与原理

iKuai 爱快软路由原生不支持 OpenWrt 软件包安装,但通过 Naixi 定制固件,可以在系统的持久化目录 /etc/log/naixi/ 中叠加一套完整的 OpenWrt musl chroot 环境,从而实现:

  • 原生运行 nanohtopvim 等 OpenWrt 软件包
  • 通过标准 opkg 安装任意 OpenWrt 包
  • 重启后自动恢复所有已安装的软件(持久化机制)

二、前提条件

条件 说明
硬件 x86_64 平台(爱快支持的软路由设备)
原始固件 任意官方爱快 ISO,推荐先安装 3.7.x 版本
Naixi 固件 v69 定制版(见下方下载链接)
SSH 访问 需在系统设置中开启远程维护

三、快速上手

步骤 1:安装爱快原生固件

安装任意官方爱快 ISO,由于后续会升级,随便安装一个 3.7.x 版本即可。

步骤 2:刷入 Naixi 定制固件

下载并通过爱快 Web 界面升级固件:

属性 信息
版本 Naixi v69
MD5 3fd0997a81149c1e4949aaa5e8431f33
下载地址 iKuai8_x64_3.7.19_Naixi_v69.bin

步骤 3:开启 SSH 访问

登录爱快 Web 管理界面,前往:

1
系统设置 → 登录管理 → 远程访问 → 远程维护

开启后即可通过 SSH 连接到路由器。

步骤 4:初始化 Naixi 兼容环境

SSH 登录后,执行以下命令安装 Naixi 兼容包(OpenWrt musl 运行时):

1
naixi install https://dl.naixi.net/ikuai-plugin/naixi-compat-x86_64.tar.gz

该命令会自动下载并解压 naixi-compat-x86_64.tar.gz,完成 OpenWrt 运行时环境的初始化。

安装完成后,访问 LuCI Web 界面:

属性 说明
地址 http://<路由器IP>:9090
密码 与爱快维护密码相同(SSH 密码亦相同)

提示:LuCI 界面端口为 9090,而非标准的 80 端口,请注意区分。


四、系统目录结构

Naixi 固件在爱快的 ramdisk 系统上叠加了以下目录结构:

1
2
3
4
5
6
7
8
9
10
iKuai rootfs (ramdisk,重启重置)
├── /usr/bin/ ← OpenWrt 包的命令 symlink(启动时建立)
├── /sbin/naixi ← 包管理器入口
├── /sbin/naixi_boot.sh ← 启动时自动恢复脚本
└── /etc/log/naixi/ ← 持久化存储(重启不丢失)
├── opkg-root/ ← 用户通过 opkg 安装的包
│ ├── usr/bin/ ← nano, htop, vim, ...
│ └── usr/lib/ ← libncurses.so, ...
├── openwrt-root/ ← OpenWrt rootfs(musl chroot 环境)
└── cache/ ← opkg 二进制本身的备份

关键设计/etc/log/naixi/ 目录在爱快系统中属于持久化分区,重启不会被清除,这是整个方案的核心。

库搜索路径(LD 路径顺序)

1
2
3
4
/etc/log/naixi/openwrt-root/lib
/etc/log/naixi/openwrt-root/usr/lib
/etc/log/naixi/opkg-root/usr/lib
/usr/lib

五、软件包管理

5.1 安装 OpenWrt 软件包

使用 opkg 安装时,需指定目标路径为 Naixi 的持久化目录:

1
opkg --add-dest naixi:/etc/log/naixi/opkg-root install nano

5.2 opkg 包装脚本(推荐)

为了简化每次都要输入 --add-dest 参数,可以创建一个包装脚本:

1
2
3
4
5
#!/bin/sh
# /usr/bin/opkg(覆盖原始 opkg)
exec /usr/bin/opkg.real \
--add-dest naixi:/etc/log/naixi/opkg-root \
--force-depends --force-checksum --force-space "$@"

每次启动时,/sbin/naixi_boot.sh 会自动将已安装包的命令链接到 /usr/bin/

1
2
3
4
5
for f in /etc/log/naixi/opkg-root/usr/bin/*; do
name=$(basename "$f")
[ -e /usr/bin/$name ] && continue # 不覆盖系统原有命令
ln -sf "$f" /usr/bin/$name
done

这样保证重启后所有已安装命令立即可用。


六、进阶:Nyarc 固件逆向工程工具

Nyarc = Nyarime Advanced Reverse-engineering Console
下载地址:Nyarc Pro Beta

Nyarc 是配套的爱快固件逆向分析工具,支持固件检测、解密、修改和重打包。

6.1 固件检测

1
2
3
4
5
6
7
8
9
# 检测固件类型
nyarc --fw-detect iKuai8_x64_3.7.19.bin

# 输出示例:
# Size: 45.6MB
# Vendor: iKuai
# Format: ikuai_firmware
# Version: 3.7.19
# firmwareid: 10001 (免费版)

6.2 固件解密

1
2
3
4
5
6
7
# 解密 rootfs(自动检测 fixed/dynamic key)
nyarc --ikuai-decrypt firmware.bin decrypted.xz

# 输出示例:
# 🔑 Mode: fixed (key=77b1fa93742cb39d3383553e848a5291)
# ✅ Hash verification: SUCCESS
# ✅ Decrypted: decrypted.xz (34.9MB)

已知加密密钥(固定密钥)

密钥 说明
77b1fa93742cb39d3383553e848a5291 Fixed Key(常见版本)
9be61ec6f06181c3e68de54899c704bb Dynamic Key 示例
58c0343a82e1447e89f423e39095a090 备用密钥
ab25f5f19c125f7620d27906de49f256 备用密钥

6.3 解压 rootfs

1
2
3
4
5
6
7
8
9
10
# 解密后得到 XZ 压缩的 ext2 镜像
xz -d decrypted.xz

# 挂载(需要 Linux 环境)
mkdir /tmp/rootfs
mount -o loop decrypted /tmp/rootfs

# 浏览目录结构
ls /tmp/rootfs/
# bin dev etc lib lib64 mnt proc root sbin sys tmp usr var www

6.4 修改 rootfs

解压挂载后可以直接修改 rootfs 内的文件,常见修改包括:

1
2
3
4
5
6
7
8
9
10
11
# 1. 设置已知 SSH 密码(省去忘记密码的烦恼)
sed -i 's|^root:.*|root:$1$naixi233$AgpY4n3TdEDVt/AjLuM/y.:17857:0:99999:7:::|' \
/tmp/rootfs/etc/shadow

# 2. 阻断爱快云控回连(阻断 59.110.6.135)
sed -i 's/59.110.6.135/127.0.0.1/g' \
/tmp/rootfs/usr/ikuai/script/client.sh

# 3. 插入 Naixi 启动脚本(实现持久化包恢复)
sed -i 's/return$/\/sbin\/naixi_boot.sh \&\n\treturn/' \
/tmp/rootfs/usr/ikuai/script/plugins.sh

6.5 重打包固件

1
2
3
4
5
6
7
8
9
10
11
# 卸载 rootfs
umount /tmp/rootfs

# XZ 压缩(注意:必须使用 CRC32 校验,否则爱快无法识别!)
xz -6 --check=crc32 decrypted

# 加密 rootfs(fixed key 模式)
nyarc --ikuai-encrypt decrypted.xz encrypted.enc fixed

# 加密 rootfs(dynamic key 模式,需指定密钥)
nyarc --ikuai-encrypt decrypted.xz encrypted.enc dynamic 9be61ec6f06181c3e68de54899c704bb

⚠️ 关键约束:XZ 压缩时必须使用 --check=crc32,这是爱快固件格式的硬性要求。

6.6 一键解包与构建(推荐方式)

一键解包

1
2
3
4
5
6
7
8
9
10
11
12
nyarc --ikuai-unpack firmware.bin /tmp/ikuai/

# 输出目录结构:
# /tmp/ikuai/
# ├── header.json ← 固件元信息
# ├── vmlinuz ← 内核
# └── rootfs/ ← 解密+解压后的根文件系统
# ├── etc/
# ├── usr/
# └── ...

# 现在可以直接修改 /tmp/ikuai/rootfs/ 下的文件

一键重打包

1
2
3
4
5
6
7
nyarc --ikuai-repack /tmp/ikuai/ output.bin

# 输出示例:
# ✅ XZ压缩 (CRC32)
# ✅ rootfs加密 (fixed key)
# ✅ Header更新 (length/md5/sha256)
# ✅ output.bin (45.6MB)

分步操作(高级用法)

1
2
3
4
5
6
7
8
9
10
# 1. 解密 rootfs
nyarc --ikuai-decrypt firmware.bin rootfs.xz

# 2. 加密 rootfs
nyarc --ikuai-encrypt rootfs.xz rootfs.enc fixed
# dynamic key 方式:
nyarc --ikuai-encrypt rootfs.xz rootfs.enc dynamic <key_hex>

# 3. 重建 bin(需要指定原始固件作为 Header 来源)
nyarc --ikuai-repack ext2.img output.bin --base firmware.bin

6.7 安全扫描

1
2
3
4
5
6
7
8
# 扫描 rootfs 中的安全问题
nyarc --scan /tmp/rootfs

# 输出示例:
# 🛡️ Security Score: 0/100
# 🔴 Critical: 75 🟠 High: 74 🟡 Medium: 417
# 🔴 Hardcoded Password in /etc/shadow
# 🟠 Weak Hash (MD5)

七、插件数据库(pmd)

爱快的插件管理使用加密的 pmd 数据库:

1
2
3
密钥: ikupdat-d~#-
格式: Salted__ + AES-256-CBC + EVP_BytesToKey(MD5, count=1)
内容: JSON 数组 [{"name", "version", "secret_key", "arch"}]

已知插件密钥

密钥 备注
354a738f7b2756a848f3b8de541ec57 插件密钥 A
354a738f7b2756a848f3b8de541ec58 插件密钥 B
70946f9965a3c140b28e36a82ed148b 插件密钥 C
jJ9FzkgwUm6bL3dG 插件密钥 D
challstr@holly~ 插件密钥 E

八、注意事项

  1. 重启重置问题:iKuai 的主 rootfs 是 ramdisk,每次重启会重置。Naixi 方案通过 /etc/log/naixi/ 持久化目录 + 启动恢复脚本解决此问题。

  2. XZ 压缩格式:重打包时必须使用 xz --check=crc32,否则爱快无法识别固件。

  3. 命令冲突:symlink 机制不会覆盖爱快系统原有命令([ -e /usr/bin/$name ] && continue),安全性有保障。

  4. 固件升级:升级爱快官方固件会覆盖 Naixi 定制内容,需重新刷入 Naixi 固件。

  5. 云控阻断:修改 client.sh 屏蔽云控 IP 仅供学习研究,请在合规范围内使用。


九、参考资源

资源 链接
奶昔论坛原帖 https://forum.naixi.net/thread-11395-1-1.html
爱快历史固件 https://lucienshui.github.io/ikuai-firmware/
Naixi 固件下载 https://dl.naixi.net/ikuai-naixi/
Nyarc 工具下载 https://dl.naixi.net/nyarc/pro-beta/
奶昔论坛 https://forum.naixi.net/