设备:我能够用真空低温烹调法恢复砖砌的中国物联网。更换损坏的电容器。有用。
它有
- ARM SOC/单片机/处理器
- WI-FI(博通)
- LCD 触摸屏 + 16 位 STM 单片机。
- i2c 总线上的 EEPROM 4Kbyte
- 1 千兆位 NAND 闪存。
- 125 M 字节的 RAM
- 主板上的 I2C 总线。
缺乏功能:我只想在设备达到目标温度后启动计时器:对于肉类,可以在加热时将食物添加到水中。不适合荷包蛋!
我下载了固件更新有效负载 motorola srecord SREC 格式,该格式与大量数据(如 BMP 和 i18n 文件)连接在一起。我使用 ghidra 查看代码 SREC 的内部:ARM 32bit/16bit big endian。
使用 unicorn 框架进行Qemu 仿真:我跟踪了 mcr 指令。似乎固件正在以这种方式配置 MPU:
侦察然后我能够识别“Boot_console_put(char *)”函数和一个内存地址,其中固件通过字符写入所有与启动消息相关的字符串:0x3402f404
控制台输出然后,当尝试访问和 I2C 从设备(可能是 eeprom)打印此内容时,模拟的固件更新有效负载似乎卡在循环中:
[boot] entering HW_MCASIC_init
[boot NVM] I2C: SDA seems stuck low!
[boot NVM] I2C: SDA seems stuck low!
[boot NVM] I2C: SDA seems stuck low!
处理 I2C 的代码似乎有点复杂,无法快速理解
问题:我想猜测固件在代码中引用的所有其他地址是什么。在 google 和 github 上搜索类似的常量/基地址和偏移量没有帮助... google 搜索结果返回主题商业链接。