renaudallard/hikvision_R2_firmware

GitHub: renaudallard/hikvision_R2_firmware

为海康威视老款 IPC 摄像机提供现代化 Web UI 替换固件,以及完整的固件解包、修改、重签名、重打包工具链。

Stars: 2 | Forks: 0

# hikfw [![最新版本](https://img.shields.io/github/v/release/renaudallard/hikvision_R2_firmware?label=firmware&color=blue)](https://github.com/renaudallard/hikvision_R2_firmware/releases/latest) [![许可证](https://img.shields.io/badge/license-public%20domain-green)](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 系列等。 # ![#3b82f6](https://placehold.co/12x12/3b82f6/3b82f6.png) 修改版固件 ## 下载与刷写 从 **[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 使用。 # ![#22c55e](https://placehold.co/12x12/22c55e/22c55e.png) 固件工具包 `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`) 从未被修改。 # ![#ef4444](https://placehold.co/12x12/ef4444/ef4444.png) 恢复 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`。 # ![#9ca3af](https://placehold.co/12x12/9ca3af/9ca3af.png) 固件格式参考
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) ```
## 平台参考 详见 [INTERNALS.md](INTERNALS.md),其中包含关于摄像机硬件、启动顺序、initramfs、SSH/防火墙架构以及交叉编译的详细说明。 ## 许可证 公共领域。风险自负。修改摄像机固件可能会使保修失效,并可能导致设备变砖。
标签:Cutter, digicap.dav, Hi3518E, Hikvision, IoT安全, IPC摄像头, ISAPI, R2平台, Waymore结果处理, Web界面替换, 去IE依赖, 反向工程, 固件修改, 固件升级, 固件定制, 固件解包, 固件重打包, 嵌入式安全, 数据可视化, 海康威视, 监控设备, 网络安全, 网络摄像头, 自定义脚本, 调试辅助, 隐私保护