Pelo que entendi, /bin
temos alguns executáveis binários que são apenas programas C compilados. Por curiosidade, decidi brincar com eles e abri ls
com sudo
privilégios usando nano
, e adicionei o caractere 0
no início. Salvei o arquivo e, para minha diversão, verifiquei que, de fato, executar o ls
comando em um terminal não funciona.
O que eu não esperava é que depois de excluir esse caractere que adicionei, o ls
comando continuasse não funcionando e apresentando falhas de segmentação.
Se os arquivos contidos nele /bin
não são nada além de código de máquina com uns e zeros, por que excluir um caractere que adicionamos anteriormente não produz um programa que funciona?
Editar um arquivo binário com um editor destinado a texto pode ou não funcionar - na prática, geralmente não funciona. O editor pode fazer várias alterações, como corrigir terminações de linha (por exemplo, se uma sequência de bytes no arquivo continha
\r\n
, o editor pode "consertar" isso para\n
, ou corrigir ocorrências de apenas\n
para\r\n
), adicionar uma nova linha final se o arquivo não terminasse com uma, etc. Há uma grande probabilidade de que ols
binário tenha sido corrompido por algumas dessas alterações. Você pode comparar a saída deod -c
ouhexdump
nos arquivos originais e modificados para ver o que mudou, exatamente. E considere usar um editor hexadecimal no futuro ( Por favor, recomende um editor hexadecimal para shell ) para editar arquivos que não sejam de texto.Repetir seu experimento e então comparar com o original
binwalk
mostra que o motivo é de fato a conversão do caractere0x0D
(CR) para0x0A
(LF):Provavelmente um desses bytes era parte de um endereço de memória ou uma instrução envolvida na criação de um endereço. Endereço de memória inválido resulta então na falha de segmentação.
Quando você abre o arquivo, o nano informa isso como
(Converted from Mac format)
.Você pode desabilitar essa conversão e a adição de uma nova linha final dando as opções de linha de comando
nano -LN
. Com essas opções, o resultado é idêntico ao original, mas editar arquivos binários dessa forma ainda é propenso a corrupção.