Como você pode suspeitar, depende muito do hardware. Em geral, você está correto, JTAG e / ou UARTs podem ser usados frequentemente para obter uma cópia do firmware (baixar uma atualização de firmware do fornecedor é geralmente a maneira mais fácil, mas presumo que não seja o que você significar).
As implementações JTAG normalmente permitem que você leia / grave memória, e os chips flash são normalmente "mapeados" na memória em algum endereço predefinido (encontrar esse endereço geralmente é uma questão de pesquisar no Google, experimentar e experimentar e erro); portanto, você pode usar ferramentas como UrJTAG e OpenOCD para ler o conteúdo do flash.
UART é apenas uma porta serial, qual interface ou opções ele fornece (se houver) depende inteiramente do desenvolvedor que criou o sistema; a maioria dos bootloaders (por exemplo, U-Boot) permitem que você leia / grave flash / memória e irá despejar o hex ASCII em sua janela de terminal. Em seguida, você precisaria analisar o hexdump e convertê-lo em valores binários reais. Novamente, YMMV e pode não haver maneira de despejar memória ou flash através do UART.
Outros dispositivos podem ter outros mecanismos que fornecem funcionalidade semelhante; por exemplo, os microcontroladores PIC da Microchip usam interfaces ICSP (In Circuit Serial Programming) para ler, gravar e depurar firmware. Essas interfaces são geralmente proprietárias e podem ou não ser documentadas (Microchip's é bem conhecido).
Os fornecedores podem tomar medidas para proteger ou desativar interfaces de depuração, como JTAG, UART e ICSP, mas muitas vezes você pode descarte o chip flash diretamente (geralmente é mais rápido do que JTAG / UART, mas pode exigir um pouco de / solda). Para dispositivos como microcontroladores que têm o chip flash embutido (ou seja, o chip flash não é exposto a você), pode ser necessário recorrer a técnicas mais avançadas para derrotar essas proteções contra cópia.
Pessoalmente, como não lido muito com sistemas baseados em microcontroladores, despejar o chip flash diretamente geralmente é a minha escolha para obter uma cópia do firmware do dispositivo.