Se eu entendi corretamente, acredito que isso funcionará para você:
#!/bin/bash
file=passwd.orig
out=passwd.mod
offset=0x5
dd if="$file" of="$out" conv=notrunc bs=1 count=$(($offset))
printf '\x41' | dd of="$out" conv=notrunc bs=1 seek=$(($offset))
dd if="$file" of="$out" conv=notrunc bs=1 seek=$((offset+1)) skip=$(($offset + 1))
Você precisa de ambos os seek
para colocar a "cabeça de gravação" na posição correta e skip
para evitar que esses bytes sejam gravados (novamente) na saída.
Melhor
Se tudo que você precisa fazer é alterar (substituir) um byte, você pode fazer isso diretamente em uma cópia do arquivo, como este simples par de comandos (e POSIX) fará:
#!/bin/sh
file=passwd.orig out=passwd.mod offset=0x05
cp "$file" "$out"
printf '\x41' | dd of="$out" conv=notrunc bs=1 seek=$(($offset))
Se você quiser "inserir" um byte, precisará dos comandos acima, mas com algumas alterações nos deslocamentos. Por favor, pergunte se é isso que você precisa.