renaudallard/hikvision_R2_firmware
GitHub: renaudallard/hikvision_R2_firmware
为海康威视老款 IPC 摄像机提供现代化 Web UI 替换固件,以及完整的固件解包、修改、重签名、重打包工具链。
Stars: 2 | Forks: 0
# hikfw
[](https://github.com/renaudallard/hikvision_R2_firmware/releases/latest)
[](LICENSE)
适用于 Hikvision IPC R2 摄像机的现代 Web 界面和固件工具包。
用简洁、深色主题、且能在**任何现代浏览器**上运行的 Web UI 替代了原有的仅限 Internet Explorer 的 ActiveX 界面。提供预编译好的固件,可直接刷入原厂摄像机。
已在 **DS-2CD2420F-IW** (V5.4.800) 上测试。该固件兼容**所有 145 个 IPC R2 型号**,包括 DS-2CD2020F、DS-2CD2120F、DS-2CD2420F-IW、DS-2CD2620F、DS-2CD2x32、DS-2CD2x42 系列等。
#  修改版固件
## 下载与刷写
从 **[Releases](https://github.com/renaudallard/hikvision_R2_firmware/releases/latest)** 页面下载对应的固件:
| 固件 | 平台 | 摄像机型号 |
|----------|----------|---------------|
| `digicap_r2.dav` | IPC R2 (Hi3518E) | DS-2CD2020F, DS-2CD2120F, DS-2CD2420F-IW, DS-2CD2x42 及另外 145 个型号 |
| `digicap_r0.dav` | IPC R0 (Hi3516C) | DS-2CD2032-I, DS-2CD2132-I, DS-2CD2332-I, DS-2CD2x32 及更多 |
刷写方法:
| 方法 | 步骤 |
|--------|-------|
| **原厂 Hikvision UI** (IE) | 配置 > 系统 > 维护 > 升级,选择文件,点击升级 |
| **新 Web UI** (任意浏览器) | 系统 > 固件升级,选择文件,点击上传并升级 |
| **命令行** | `curl -u 'admin:PASSWORD' -X PUT "http://CAMERA_IP/ISAPI/System/updateFirmware" --data-binary @digicap_r2.dav` |
重启后,可以在任意浏览器通过 `http://CAMERA_IP/` 访问新的 Web UI。
## 新 Web UI 功能
| 版块 | 详情 |
|---------|---------|
| **实时预览** | 实时 JPEG 快照流,主/子码流选择器,截图,全屏 |
| **网络** | IP 地址,DHCP/静态,子网掩码,网关,DNS |
| **WiFi** | 扫描网络及信号强度条,密码连接 |
| **端口** | HTTP, HTTPS, RTSP, SDK 端口配置 |
| **视频** | 3 路流(主/子/三),编码,码率,帧率,H.264 profile,质量类型 |
| **图像** | 亮度、对比度、饱和度、锐度滑块,WDR,IR-CUT 滤镜,ISP 日/夜,镜像/翻转 |
| **OSD** | 日期/时间叠加,日期格式,显示星期,通道名称叠加 |
| **音频** | 启用/禁用音频通道 |
| **移动侦测** | 启用/禁用,灵敏度滑块 |
| **PIR** | 传感器状态及通知方式 |
| **邮件** | SMTP 服务器,SSL/TLS,认证,发件人,3 个收件人,快照附件 |
| **FTP** | 上传服务器,端口,凭据,匿名模式 |
| **DDNS** | 提供商,服务器,域名,凭据 |
| **时间** | NTP 或手动,NTP 服务器,同步间隔 |
| **用户** | 修改管理员密码 |
| **设备名称** | 重命名摄像机 |
| **系统** | 设备信息,带进度条的固件升级,配置备份/恢复,重启,存储 |
### 通过 telnet 手动安装 (R0,中文固件,旧款摄像机)
如果通过 ISAPI 的固件升级被拒绝(如中文固件、旧版本),可以直接通过 telnet 安装 Web UI。R0 平台将 IEfile.tar.gz 作为普通文件存储在 flash 上,而非 CramFS 内。
1. 启用 telnet:
curl -u 'admin:PASSWORD' -X PUT "http://CAMERA_IP/ISAPI/System/Network/telnetd" \
-d 'true ' \
-H "Content-Type: application/xml"
2. 如果是中文固件,将语言字节修补为英文:
# Telnet 登录 (常用密码: admin password, root/12345, root/hik2016)
nanddump -obf /tmp/mtd6copy /dev/mtd6
echo -ne '\x01' | dd of=/tmp/mtd6copy bs=1 seek=16 count=1 conv=notrunc
dd if=/tmp/mtd6copy of=/dev/mtdblock6
reboot
3. 构建 **gzip** 格式的 IEfile.tar.gz (R0 使用 gzip,而非 LZMA):
cd webui
tar czf IEfile.tar.gz index.asp style.css app.js
4. 通过 TFTP 传输并安装:
# 在你的机器上:提供文件服务
python3 -m py_compile # 或者使用任何监听 69 端口的 TFTP 服务器
# 在摄像机上通过 telnet 执行:
tftp -g -r IEfile.tar.gz -l /dav/IEfile.tar.gz YOUR_IP 69
sync
reboot
## 其他固件改动
- **WiFi 看门狗** - 每 30 秒 ping 网关,3 次失败后重启网络,禁用 RTL8188EU 省电模式 (IPS/LPS)
- **镜像更小** - 移除了未使用的语言包和 ActiveX 安装程序
## 兼容性
**支持三种平台:**
- **IPC R2** (Hi3518E, 2MP) - 145 个设备 ID:DS-2CD20xx, DS-2CD21xx, DS-2CD24xx, DS-2CD26xx, DS-2CDxx42 等。
- **IPC R0** (Hi3516C, 3MP+) - DS-2CD2x32 系列, DS-2CD2332-I, DS-2CD2132-I 等。
- **IPC R0 中文固件** - 相同型号但搭载中文固件。需要 telnet 访问以修补语言字节并替换 IEfile.tar.gz(见下文)。
**NVR/VMS** - RTSP, ONVIF, 和 ISAPI 未受影响。可正常配合 **Synology Surveillance Station**、**Blue Iris** 及任何其他 NVR/VMS 使用。
#  固件工具包
`hikfw.py` 是一个独立工具,用于解包、检查、修改、重签名和重新打包 Hikvision SWKH 固件文件。它独立于上面的 Web UI 项目工作。
## 安装
```
git clone https://github.com/renaudallard/hikvision_R2_firmware.git
cd hikvision_R2_firmware
pip install cryptography
```
## 使用
```
python3 hikfw.py info digicap.dav # inspect
python3 hikfw.py unpack digicap.dav -o unpacked # unpack
python3 hikfw.py repack unpacked -o modified.dav # repack (auto-resigns)
python3 hikfw.py verify modified.dav # verify signatures
```
## 修改 CramFS
```
# 提取
mkdir cramfs_root
/usr/sbin/fsck.cramfs --extract=cramfs_root unpacked/app.img
# 编辑文件...
vi cramfs_root/initrun.sh
# 重建
/usr/sbin/mkfs.cramfs -n r2_app cramfs_root unpacked/app.img
```
## IEfile.tar.gz (Web UI 打包)
尽管扩展名是 `.gz`,压缩格式取决于平台:
- **IPC R2**: LZMA 压缩。仅限裸路径(无 `./` 前缀),字典最大 8MB。
cd webui
tar cf - index.asp style.css app.js | xz --format=lzma --lzma1=dict=8MiB,lc=3,lp=0,pb=2 > IEfile.tar.gz
- **IPC R0**: 标准 gzip。
cd webui
tar czf IEfile.tar.gz index.asp style.css app.js
## 构建修改版固件
构建脚本接受一个基础固件并替换其中的 Web UI:
```
# 下载基础 firmware(包含 WiFi watchdog 和其他非 UI mods)
gh release download v0.0.0-base -p 'firmware_base.dav'
# 构建
./build_firmware.sh firmware_base.dav digicap.dav
```
**依赖:** `util-linux-extra` (cramfs tools), `xz-utils`, Python 3 + `cryptography`
当 `VERSION` 变更时,GitHub Actions 工作流会自动创建一个 release。
## Web UI 源码
源码位于 `webui/` (原生 JS,无框架,无需构建步骤):
| 文件 | 描述 |
|------|-------------|
| `index.asp` | 包含所有页面布局的 HTML 壳 |
| `style.css` | 深色主题,CSS Grid |
| `app.js` | 应用逻辑,ISAPI 通信,实时预览 |
UI 通过 ISAPI 与摄像机通信(基于 Digest 认证的 XML over HTTP)。实时预览通过 XHR 轮询 `/ISAPI/Streaming/channels/{id}/picture` 获取 JPEG 快照。
内核 (`uImage`) 从未被修改。
#  恢复
DS-2CD2420F-IW **没有 UART 引脚焊盘**。背面海康威视贴纸下有一颗隐藏的螺丝。
## TFTP 恢复
Hi3518E 的 u-boot 内置了 TFTP 恢复功能,即使内核或 CramFS 损坏也能工作。
1. 通过网线直连摄像机
2. 配置恢复用 IP:
sudo ip addr add 192.0.0.128/24 dev eth0
sudo ip addr add 192.168.1.128/24 dev eth0
3. 启动 TFTP 服务器:
gh release download v5.4.800-recovery
sudo ./hikvision_tftpd.py digicap.dav
4. 按住复位键,给摄像机上电,保持按住 10 秒以上
5. 等待 3-5 分钟以完成传输和刷写
| 摄像机 IP | TFTP 服务器 IP |
|-----------|----------------|
| 192.0.0.64 | 192.0.0.128 |
| 192.168.1.64 | 192.168.1.128 |
地址对是硬编码在 u-boot 中的,因型号而异。如果都不行,请使用 `tcpdump -i eth0 arp` 查看。
摄像机在标准 TFTP (端口 69) 之前,会在 UDP 9978/9979 上使用专有握手。包含的 `hikvision_tftpd.py`(基于 [scottlamb/hikvision-tftpd](https://github.com/scottlamb/hikvision-tftpd))可同时处理两者。
## SPI Flash 编程器 (最后手段)
```
sudo apt install flashrom
flashrom -p ch341a_spi -r backup.bin # backup first
flashrom -p ch341a_spi -w good_dump.bin # restore
```
需要完整的 flash 镜像(包含 u-boot 在内的所有分区),而不仅仅是 `digicap.dav`。
#  固件格式参考
## 平台参考
详见 [INTERNALS.md](INTERNALS.md),其中包含关于摄像机硬件、启动顺序、initramfs、SSH/防火墙架构以及交叉编译的详细说明。
## 许可证
公共领域。风险自负。修改摄像机固件可能会使保修失效,并可能导致设备变砖。
SWKH 头 (240 字节,XOR 加密)
| 偏移量 | 大小 | 字段 | |--------|------|-------| | 0x00 | 4 | Magic `SWKH` | | 0x04 | 4 | 头校验和 (字节 12..末尾的字节和) | | 0x08 | 4 | 头长度 | | 0x0C | 4 | 文件数量 | | 0x10 | 4 | 语言 | | 0x14 | 4 | 设备类别 | | 0x18 | 4 | OEM 代码 | | 0x1C | 4 | 固件版本 | | 0x20 | 4 | 总大小 | | 0x24 | 4 | 构建日期 | | 0x28 | 24 | 版本字符串 | | 0x40 | 每个 44 字节 | 文件条目 (name[32] + offset[4] + size[4] + checksum[4]) | XOR 密钥: `BA CD BC FE D6 CA DD D3 BA B9 A3 AB BF CB B5 BE`, 索引: `(i + (i >> 4)) & 0xF`_cfgUpgSecPls 签名
| 层级 | 算法 | 详情 | |-------|-----------|---------| | 外层 | Raw | 前 4 字节 = uint32 LE 加密数据长度 | | 加密 | AES-256-ECB | 密钥来自 `EVP_BytesToKey(MD5, 2 iterations)` | | 密码 | | `h@k8807H$Z5998` + 17 个空字节 | | 盐值 | | `HangZhou` | | 哈希 | SHA-0 | 非 SHA-1。旧版 OpenSSL `SHA_Init` 实现了 SHA-0。 | | RSA | Stub | 总是返回0 |固件布局
``` Offset Size Section 0x000 240 B SWKH header (XOR encrypted) 0x0F0 500 B _cfgUpgSecPls (AES-256-ECB encrypted SHA-0 hashes) 0x2E4 780 B _cfgUpgClass (device compatibility table) 0x5F0 ~3.5 MB uImage (Linux kernel, ARM zImage) 0x3586CC ~7 MB app.img (CramFS application filesystem) ```标签:Cutter, digicap.dav, Hi3518E, Hikvision, IoT安全, IPC摄像头, ISAPI, R2平台, Waymore结果处理, Web界面替换, 去IE依赖, 反向工程, 固件修改, 固件升级, 固件定制, 固件解包, 固件重打包, 嵌入式安全, 数据可视化, 海康威视, 监控设备, 网络安全, 网络摄像头, 自定义脚本, 调试辅助, 隐私保护