ARM芯片gpio/从固件代码识别

逆向工程 拆卸 手臂 静态分析 吉德拉 固件分析
2021-06-30 03:37:35

设备:我能够用真空低温烹调法恢复砖砌的中国物联网。更换损坏的电容器。有用。

它有

  • 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:

MPU的布局 基地址

侦察然后我能够识别“Boot_console_put(char *)”函数和一个内存地址,其中固件通过字符写入所有与启动消息相关的字符串:0x3402f404

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 搜索结果返回主题商业链接。

0个回答
没有发现任何回复~