Ele tem uma influência tão grande devido a uma fraqueza conhecida na API do Win32.
Os programas são gerados no Win32 por meio da CreateProcess()
chamada do sistema. Pode ser usado de várias maneiras. Pessoas provenientes de planos de fundo Unix, Linux ou OS / 2 geralmente pensam nisso como tendo dois argumentos separados para o programa (arquivo de imagem) gerar e a cauda do comando passar para o novo processo, porque nomes de arquivos e argumentos vetores / comandos caem Existem duas coisas distintas nas APIs desses sistemas operacionais. Mas, na verdade, a chamada do sistema pode ser invocada de uma forma alternativa, com o nome e os argumentos do programa reunidos em uma grande cadeia. CreateProcess()
tentará separar o nome do arquivo do programa da cauda do comando.
O problema é que ele faz isso dividindo progressivamente a cadeia em dois em cada caractere de espaço sucessivo, até que a parte esquerda corresponda a um arquivo ou diretório. Muitos programas Win32 tentam passar seqüências de caracteres como C:\Program Files\Contoso\TakeOver.exe StackExchange.com
a chamada do sistema. Isso executará o programa certo - C:\Program Files\Contoso\TakeOver.exe
- com o comando certo - StackExchange.com
- até o ponto em que uma pessoa obviamente perigosa aparecer e criar um C:\Program
arquivo como você.
Nesse ponto, a chamada do sistema acaba tentando executar o arquivo de imagem do programa C:\Program
com a cauda do comando Files\Contoso\TakeOver.exe StackExchange.com
. Deus o ajude se C:\Program
é de fato uma imagem executável do programa.
Essa é uma fraqueza geral e se aplica a qualquer nome de arquivo de programa que contenha espaços em combinação com qualquer programa que use o One Big String para gerar outros programas. Mas o caso mais comum atingido por isso é todos os programas que vivem abaixo C:\Program Files\
e um grande número de programas Win32 que usam a abordagem One Big String.
É tarde demais para alterar a API do Win32. Era tarde demais uma década atrás. E a Microsoft não pode alterar todos os programas escritos por outras pessoas que passam uma grande sequência em vez de duas para CreateProcess()
. Portanto, a Microsoft faz com que o Windows verifique, no logon do usuário, a existência C:\Program
e exiba o aviso que você vê.
E, como você pode ver, há um grande aviso de "Segurança" no documento Win32 da Microsoft, que diz aos desenvolvedores para não escreverem programas usando a abordagem One Big String, que existe há alguns anos.
Leitura adicional