kindle 咪咕 恢复模式
MODEL NO. SY69JL
序列号:G000MRXXXXXXXXFQ
进入恢复模式/fastboot:长按电源按钮(同时插入USB数据线?)

- 入口:
0x810125cc,通过strncmp(cmd, "download:", 9)匹配 - 缓冲区地址:
0x8c000000,仅在0x8101203c以mov r6, #0x8c000000加载(全二进制唯一一处) - 尺寸校验:
0x810125f0:simple_strtoul(cmd+9, &endptr, 16)→ 解析十六进制尺寸为 uint320x81012618:cmp r8, #0→ 拒绝零尺寸0x81012634:ldr r3, [r7, #0x1c]→ 从运行时结构体加载 max-download-size0x81012638:cmp r8, r3+0x8101263c:bls(无符号 ≤)→ 超限则 FAIL "data too large"
- 结论:校验是干净的 32 位无符号比较,无整数溢出/截断风险。上限来自运行时结构体偏移
+0x1c,对应getvar:max-download-size返回值(0x1c800000 = 478MB)。
- 唯一消费者:
boot命令处理器(0x81011eac),在0x8101203c加载0x8c000000后逐字节读取并解析镜像头 - 无其他引用:全二进制搜索确认
mov rd, #0x8c000000仅出现一次;无任何全局变量存储该地址 upload:/uploadraw::存在于分发器(0x810129ec/0x81012a04),但均为空桩,匹配后直接设r8=0返回 OKAY,不读缓冲区get_staged/stage:不存在于二进制中- 关键事实:
boot在0x8101268c调用verify_unlock(0x81004514),被锁拦截
表格
| 命令 | Handler VMA | 加锁 | 备注 |
|---|---|---|---|
getvar:* |
~`0x81012400` | ❌ | product/serialno/downloadsize/unlock_code/status/version/spl |
erase: |
0x810125a8 |
❌ | 直接返回 "Not support erase for EMMC" |
download: |
0x810125cc |
❌ | 解析尺寸+校验+发 DATA 响应 |
boot |
0x81012678 |
✅ | verify_unlock @ 0x8101268c |
flash: |
0x81012730 |
✅ | verify_unlock @ 0x81012784 |
flash:unlock: |
0x81012748 |
❌* | 调 erase_unlock_code,非绕过 |
continue |
0x810129b4 |
❌ | 设标志位,返回 OKAY |
upload: |
0x810129ec |
❌ | 空桩,无实现 |
uploadraw: |
0x81012a04 |
❌ | 空桩,无实现 |
oem gpt init |
0x81012a4c |
❌ | 直接 OKAY |
oem flags |
0x81012a90 |
✅ | verify_unlock @ 0x81012aa4 |
oem relock |
0x81012b94 |
❌ | 调 erase_unlock_code |
download:处理器本身不执行任何内存写入。它仅解析尺寸、校验、发送DATA%08x响应后返回- 实际 USB 数据接收由 USB gadget 驱动回调处理,不在命令分发器内
- 即使 USB 驱动将数据写入
0x8c000000,尺寸校验(bls)确保不超过max-download-size,且该值是 32 位无符号比较,无溢出路径 - 缓冲区位于
0x8c000000(DDR 高区),相邻区域为未映射或保留内存,溢出不会覆盖 U-Boot 代码段(0x81000000)或关键数据结构
download:不加锁,但它只设置尺寸元数据并触发 USB 数据接收——不直接写0x8c000000- 下载缓冲区
0x8c000000在整个二进制中仅被boot命令读取 boot命令被verify_unlock锁保护(0x8101268c)- 没有其他未加锁命令(
upload:是空桩、erase:不支持、continue不涉及缓冲区)消费该内存 - 尺寸校验安全,无溢出利用空间

浙公网安备 33010602011771号