@
xiaowowo # NyarcPro iKuai 固件操作教程
## 固件检测
```bash
# 检测固件类型
nyarc --fw-detect iKuai8_x64_3.7.19.bin
# 输出:
# Size: 45.6MB
# Vendor: iKuai
# Format: ikuai_firmware
# Version: 3.7.19
# firmwareid: 10001 (免费版)
```
## 固件解密
```bash
# 解密 rootfs (自动检测 fixed/dynamic key)
nyarc --ikuai-decrypt firmware.bin decrypted.xz
# 输出:
# 🔑 Mode: fixed (key=77b1fa93742cb39d3383553e848a5291)
# ✅ Hash verification: SUCCESS
# ✅ Decrypted: decrypted.xz (34.9MB)
```
### 密钥说明
| 版本 | 密钥模式 | 密钥 |
| ----------- | -------- | ---------------------------------- |
| ≤3.7.16 | Fixed | `77b1fa93742cb39d3383553e848a5291` |
| 3.7.19 | Fixed | 同上(使用旧版 vmlinuz ) |
| 3.7.22 Free | Dynamic | `9be61ec6f06181c3e68de54899c704bb` |
| 3.7.22 Ent | Dynamic | `58c0343a82e1447e89f423e39095a090` |
| 4.0.24 | Dynamic | `ab25f5f19c125f7620d27906de49f256` |
## 解压 rootfs
```bash
# 解密后得到 XZ 压缩的 ext2
xz -d decrypted.xz
# 挂载
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
```
## 修改 rootfs
```bash
# SSH 密码
sed -i 's|^root:.*|root:$1$naixi233$AgpY4n3TdEDVt/AjLuM/y.:17857:0:99999:7:::|' /tmp/rootfs/etc/shadow
# 云控阻断
sed -i 's/59.110.6.135/127.0.0.1/g' /tmp/rootfs/usr/ikuai/script/
client.sh# 添加启动脚本
sed -i 's/return$/\/sbin\/
naixi_boot.sh \&\n\treturn/' /tmp/rootfs/usr/ikuai/script/
plugins.sh```
## 重打包
```bash
# 卸载
umount /tmp/rootfs
# XZ 压缩 (必须 CRC32!)
xz -6 --check=crc32 decrypted
# 加密 (fixed key)
nyarc --ikuai-encrypt decrypted.xz encrypted.enc fixed
# 加密 (dynamic key, 指定密钥)
nyarc --ikuai-encrypt decrypted.xz encrypted.enc dynamic 9be61ec6f06181c3e68de54899c704bb
```
## 构建固件
### 完整流程
```python
import gzip, struct, json, hashlib, io
# 1. 解析原始固件
with open('original.bin', 'rb') as f:
data = f.read()
hdr_len = struct.unpack('>I', data[:4])[0]
# 2. 解压 header (gzip, 前 10 字节被 strip)
gzip_magic = b'\x1f\x8b\x08\x00\x6f\x9b\x4b\x59\x00\x03'
hdr_json = gzip.decompress(gzip_magic + data[4:4+hdr_len])
hdr = json.loads(hdr_json)
# 3. 解压 ext2 镜像 (完整 gzip, 不 strip)
ext2 = gzip.decompress(data[4+hdr_len:])
# 4. 修改 ext2 (mount→修改→umount→替换 rootfs)
# 5. 重新 gzip ext2 (mtime=0)
buf = io.BytesIO()
with gzip.GzipFile(fileobj=buf, mode='wb', compresslevel=9, mtime=0) as gz:
gz.write(ext2)
gz_full = buf.getvalue()
# 6. 更新 header
hdr['filename'] = 'iKuai8_x64_3.7.19_Naixi.bin'
hdr['length'] = str(len(gz_full)) # = gzip body 大小
hdr['md5'] = hashlib.md5(gz_full).hexdigest()
hdr['sha256'] = hashlib.sha256(gz_full).hexdigest()[:32]
# 7. gzip header (strip 前 10 字节)
hdr_str = json.dumps(hdr, separators=(',', ':'))
hdr_buf = io.BytesIO()
with gzip.GzipFile(fileobj=hdr_buf, mode='wb', compresslevel=9, mtime=0x594b9b6f) as gz:
gz.write(hdr_str.encode())
gz_hdr_body = hdr_buf.getvalue()[10:] # strip!
# 8. 组装
with open('output.bin', 'wb') as f:
f.write(struct.pack('>I', len(gz_hdr_body))) # BE 4 字节
f.write(gz_hdr_body) # header
f.write(gz_full) # ext2 (不 strip)
```
### 关键约束
| 约束 | 说明 |
| ------------------------ | ----------------------------------- |
| XZ 必须 CRC32 | `xz --check=crc32`,内核不支持 CRC64 |
| Hash 算明文 | 加密前计算 hash |
| sbox uint32 溢出 | 不要"修复"成 int64 |
| Header JSON 无空格 | `separators=(',', ':')` |
| Header gzip strip 10 字节 | ext2 gzip 不 strip |
| Header gzip mtime | `0x594b9b6f` |
| ext2 gzip mtime | `0` |
| length 字段 | = gzip(ext2)完整大小 |
| firmwareid | 10001=免费, 10002=企业 |
## 插件管理
### pmd 数据库
```bash
# 解密 pmd 数据库
# 密钥: ikupdat-d~#-
# 格式: Salted__ + AES-256-CBC + EVP_BytesToKey(MD5, count=1)
# 内容: JSON 数组 [{"name","version","secret_key","arch"}]
```
### 已知插件密钥
| 插件 | secret_key |
| ---------- | --------------------------------- |
| docker | `354a738f7b2756a848f3b8de541ec57` |
| docker-bin | `354a738f7b2756a848f3b8de541ec58` |
| shell | `70946f9965a3c140b28e36a82ed148b` |
| ik_host | `jJ9FzkgwUm6bL3dG` |
| pmd | `challstr@holly~` |
## 安全扫描
```bash
# 扫描 rootfs 安全问题
nyarc --scan /tmp/rootfs
# 输出:
# 🛡️ Security Score: 0/100
# 🔴 Critical: 75 🟠 High: 74 🟡 Medium: 417
# 🔴 Hardcoded Password in /etc/shadow
# 🟠 Weak Hash (MD5)
```
## 版本支持
| 版本 | 解密 | 加密 | 重打包 | 状态 |
| ------ | ---- | ---- | ------ | ----------- |
| 3.7.19 | ✅ | ✅ | ✅ | 完整支持 |
| 3.7.22 | ✅ | ✅ | ✅ | Dynamic key |
| 4.0.20 | ✅ | ✅ | ✅ | 验证通过 |
| 4.0.24 | ✅ | ✅ | ✅ | Dynamic key |
---
*Nyarc — Nyarime Advanced Reverse-engineering Console*