本文说明为什么修改这个固件、具体改了哪些字节、以及最终如何打包成功并通过校验。
注意:文章内容仅适用于SN为3606开头的摄像头
| SN前缀 | 下载地址 | 卡刷固件名 |
|---|---|---|
| 3606 | 点击下载 | FIRMWARE_D606.bin |
| 360H | 点击下载 | FIRMWARE_D606-6.bin |
| 3605/3615 | 点击下载 | FIRMWARE_D503.bin |
| 3602/3603/3612(暂未测试) | - | FIRMWARE.bin |
| 3608(暂未测试,2017版) | 点击下载 | FIRMWARE_D600-2.bin |
| 3608(暂未测试,2018版) | 点击下载 | FIRMWARE_660R.bin |
1. 要解决的问题
摄像头在 2026 年使用时出现两个现象:
- 设备时间错误,录像文件时间不对。
- 360 手机 APP 无法添加/管理摄像头。
这两个问题都来自厂商云端服务仍在返回 2019 年的数据,以及服务器 HTTPS 证书早已过期。
2. 时间为什么错
user/bin/iscm 是负责时间同步和云端通信的程序。它启动后会访问:
http://q2.jia.360.cn/status.php但该地址现在固定返回:
Date: Sat, 28 Sep 2019 00:00:00 GMTiscm 会把响应头里的 Date 写入系统时钟。于是设备每次联网后都会把时间拨回 2019 年,录像时间自然不对。
iscm 的时间处理逻辑(0x35c10)大致是:
- 解析出的年份小于 2016 时,不更新;
- 当前时间与解析时间相差不超过 9 秒时,不更新;
- 其他情况直接
settimeofday,允许把时钟往回拨。
因此只要还访问 status.php,设备就会被拨回 2019 年。
解决办法
把 URL 改成站点根路径:
http://q2.jia.360.cn根路径返回 404,但响应头里的 Date 是当前真实时间(2026 年)。iscm 不关心 HTTP 状态码,只读取 Date,所以时间可以正确同步到 2026。
原 URL 在文件中的位置是 iscm 偏移 0x112B54,占用 32 字节的固定槽位。新 URL 写满槽位后剩余部分用 \0 补齐,不会破坏后面的字符串。
3. APP 为什么添加失败
q2.jia.360.cn 和 up.jia.360.cn 使用的是同一套证书:
- 证书主题:
*.jia.360.cn - 签发者:WoSign Class 3 OV Server CA G2
- 有效期:2016-09-29 至 2019-09-29 05:19:40
- 中间 CA 可用到 2029 年,但根证书(StartCom 签发)到 2019-12-31
设备在 2026 年进行 HTTPS 请求时,libcrypto(OpenSSL 1.0.2)会因证书过期而拒绝连接,APP 的添加/绑定流程因此失败。
解决办法
直接让证书链校验函数 X509_verify_cert 返回成功:
mov r0, #1
bx lrX509_verify_cert 位于 user/lib/libcrypto.so 偏移 0xCF560:
- 原字节:
08 30 90 e5 f8 2c 9f e5 - 新字节:
01 00 a0 e3 1e ff 2f e1
libcrypto.so.1.0.0 是指向 libcrypto.so 的符号链接,因此只需改一个文件。
注意:这会关闭该程序的证书链校验,降低安全性,仅建议在受控设备和自建/厂商云环境下使用。
4. iscm 中额外的一处 NOP
iscm 偏移 0x1997C 原本是:
bl 0x35c10这是某个 HTTP 响应处理路径里对 Date 的回写调用。主同步流程在 0x36140 通过尾调用进入 0x35c10,并不经过这里。把它改成 NOP(00 00 a0 e1)是为了避免该响应把已经同步好的时间再次覆盖。
需要说明的是:真正解决时间回拨的是 URL 修改,这处 NOP 只是去掉一个次要的回写路径。
5. 固件结构与 CRC
固件以 U360 头开始,头部关键字段:
| 偏移 | 内容 |
|---|---|
0x00 | magic "U360" |
0x04 | 整包 CRC,覆盖 file[8:] |
0x08 | 文件数,固定为 3 |
0x0C | kernel 条目 |
0x2C | rootfs 条目 |
0x4C | user 条目 |
每个条目 32 字节:
| 条目内偏移 | 内容 |
|---|---|
+0x00 | 分区数据偏移 |
+0x04 | 分区大小 |
+0x08 | 分区 CRC |
+0x0C | flags |
+0x10 | 名称(16 字节) |
三个分区的实际位置:
| 分区 | 偏移 | 大小 | CRC 字段 |
|---|---|---|---|
| kernel | 0x200 | 0x11DF18 | 0x14 |
| rootfs | 0x11E120 | 0x1EB000 | 0x34 |
| user | 0x309120 | 0x2DD000 | 0x54 |
CRC 算法是反射 CRC32,多项式 0xEDB88320,初值 0,结果不再异或。
user/bin/burn_helper 中的 d606_check_header_valid 会检查:
- magic 是否为
U360 - 文件数是否在 1..9
- 头部 CRC
- 每个分区数据 CRC
所以只要改动了 user 分区,就必须:
- 重算 user 分区 CRC,写到
0x54; - 重算整包 CRC,写到
0x04。
脚本 rebuild_bin.py 会自动完成这两步,并在写入前再次校验 kernel/rootfs/user 三个 CRC。
摄像头升级逻辑会参考这个时间判断镜像是否比当前系统更新。把新镜像的时间设成和原厂完全一样,会被当成“同版本/旧版本”而拒绝,于是出现“刷不上”。
同时 -all-root 等参数也让镜像与原厂、与已验证可刷的包不一致。
正确的打包参数
mksquashfs root user_new.sqsh \
-comp xz -b 65536 -noappend -no-xattrs -no-progress关键点:
- 不要传
-mkfs-time,让 mksquashfs 使用当前时间(2026),保证比原厂 2017 新; - 不使用
-all-root; - block size 固定
65536; - 打包后
truncate -s 3002368,正好填满0x2DD000的 user 分区; - 成品 squashfs 的
flags为0x2c0,与已验证可刷的包一致。
7. 打包流程
build.sh 会依次执行:
- 从原厂固件
0x309120切出0x2DD000字节的 user.sqsh; unsquashfs解包;patch_files.py打 3 个补丁;- 用上面的正确参数
mksquashfs重新打包; truncate到分区大小;rebuild_bin.py替换 user 分区并重算0x54、0x04;verify.py校验成品;- 输出到
out/360camera_d606a_6.2.4_patched.bin。
8. 成品校验
verify.py 会检查:
- 固件大小是否为
0x5E6120; - magic 是否为
U360,文件数是否为 3; - 头部 CRC 是否等于
CRC32(file[8:]); - kernel/rootfs 是否与原厂完全一致;
- user 分区 CRC 是否等于
0x54字段; - 新 squashfs 的
mkfs_time是否大于原厂的0x59E888D5; - 解包后三个补丁字节是否正确。
成功时输出:
VERIFY OK
size 6185248
header_crc ...
user_crc ...
mkfs_time 0x... (orig 0x59e888d5)
patches iscm url + iscm nop + libcrypto bypass9. 使用方法
Windows 下双击:
build.bat或在 WSL 中执行:
cd /mnt/d/360/360/360_new
./build.sh生成文件:
out/360camera_d606a_6.2.4_patched.bin每次重新打包,由于 mkfs_time 和并行压缩会影响字节布局,SHA256 会略有不同,这是正常的;只要最后出现 VERIFY OK 即可。
10. 刷机与回滚
- 刷机前务必保留原厂固件
360camera_d606a_6.2.4.bin。 - 用官方 APP 或设备支持的升级方式刷入
out/360camera_d606a_6.2.4_patched.bin。 - 刷入后确认系统时间能同步到 2026 年。
- 如出现问题,刷回原厂固件即可回滚。
11. 文件说明
| 文件 | 作用 |
|---|---|
build.bat | Windows 入口,自动调用 WSL 执行 build.sh |
build.sh | 完整打包流程 |
patch_files.py | 对 iscm 和 libcrypto 打 3 个补丁 |
rebuild_bin.py | 替换 user 分区并重算分区/整包 CRC |
verify.py | 校验成品结构、CRC、时间戳和补丁 |
360camera_d606a_6.2.4.bin | 原厂固件,作为打包输入和回滚备份 |
out/360camera_d606a_6.2.4_patched.bin | 最终可刷固件 |
评论2
三万动力
刷成功的 踊跃评论哈
360小水滴D302
大佬,求302固件