有限的 U-Boot 选项,这里有任何内存读取可能性吗?

逆向工程 记忆 硬件
2021-07-09 10:29:56

在我正在查看的这个非常精简的固件中(海康威视相机被歪曲了),这就是我必须使用的全部内容。不存在其他固件,并且该open-seasame命令提出了加密挑战,因此没有 root。

此列表中是否有任何内容可以通过 uboot 转储固件?

有用于 micro-SD 卡的焊盘,但我没有焊接任何东西,也没有用示波器测试/探测过它。

The following commands are supported:
boot    erase   help    reset
saveenv printenv        setenv  upbs
format  update  upfusb  upf
updatebusb      updateb gos     go
mii     gpio    ping
Use help to get help on a specific command
2个回答

好吧,我想出了两种方法。

  • 第一个是困难的方法。我查了一些资源,发现upf海康威视摄像头上命令应该可以更新固件,它使用TFTP将固件加载到0x02000000地址。
    参考:https : //ipcamtalk.com/threads/hikvision-g1-5-5-firmware-exploring-the-cam-attempting-unlock.40814/
    https://ipcamtalk.com/threads/unrestricted-root-shell- on-g1-cameras.23213/ 所以,您可以使用upf命令从您的计算机接收文件,然后将其加载到内存 0x02000000 处,在加载完成之前,您可以通过切断连接来中断更新操作,这样您就可以返回 uboot 提示符并进行其他操作,传输的数据仍然存在于内存中。
    然后还有一个go命令,它可以使处理器执行您提供的地址。
    将它们全部包装起来,您可以使用上面描述的技术将任意数据加载到固定的内存地址中,然后您可以控制处理器执行任意地址,这样您就可以编写shellcode从nand读取并打印它们。

  • 第二种方法更简单。您可以尝试查看printenv的输出,可能有一些有趣的环境变量控制更新进度和启动进度。您有机会上传自定义的小 rom,而无需覆盖原始 rom。

无论如何,我建议您使用像 JTAG 这样的调试器来转储内存,这要容易得多,除非您必须进行一些焊接。

uboot 中的 go 命令允许您指定地址并提供参数。您可以潜在地使用此调用 printf(),提供指向格式字符串的指针和指向您希望读取的内容的指针。