Tutorial escrito por ccoder aka c0d3r__ ou cppcoder
c0d3r__@hotmail.com (mailto:c0d3r__@hotmail.com)");
/* Senao temos 2 argumentos mostre o uso da aplicacao e saia */
if (argc != 3)
{
puts("Uso: appname ");
return 0;
}
cCaractere = argv[1][0];
iQuantidade = atoi(argv[2]);
funcao();
system("pause");
}
/* Definicao da funcao que demonstrara o buffer overflow */
void funcao(void)
{
/* Declarado 2 buffers */
char buf1[40], buf2[40];
/* Colocamos dados dentro de buf1 */
strcpy(buf1, "Isso eh o que sera sob-escrito"); /* Copiamos 30 bytes + NULL */
printf("buf1 contem: %s\n", buf1);
/* Agora utilizamos memset pra sobescrever buf1 na stack */
/* buf1 - buf2 ira nos dar a distancia entre os buffers em outras palavras
"o tamanho real de alocacao de buf1" + quantidade sera a quantidade
de bytes que vamos preencher buf2. */
memset(buf2, cCaractere, buf1 - buf2 + iQuantidade);
/* Observamos que buf foi sob-escrito */
printf("buf1 depois: %s\n", buf1);
}
Compile o codigo fonte acima, e execute o mesmo pela linha de comando dessa forma:
programa A 29
Dessa forma iremos sob-escrever buf2 e chegar ate buf1 com A's e sob-escrever buf1 com
29 A's
Observe os diagramas abaixo para maior entedimento:
Primeiro vamos ter
<--- STACK CRESCE PRA TRAZ, OU SEJA ENDERECOS MENORES
BUF2 BUF1 4096
+-----------------------------------------+------------------------------------------+-----+
|NAO-INICIALIZADO |Isso eh o que sera sob-escrito |... |
+-----------------------------------------+------------------------------------------+-----+
Depois de menset()
<--- STACK CRESCE PRA TRAZ, OU SEJA ENDERECOS MENORES
BUF2 BUF1 4096
+-----------------------------------------+------------------------------------------+-----+
|AAAAAAAAAAAAAAAAAAAAA|AAAAAAAAAAAAAAAA |... |
+-----------------------------------------+------------------------------------------+-----+
Como viram no exemplo de buffer overflow eh possivel sob-escrever um buffer e alcancar
outras areas na memoria, a pergunta agora serah e se sob-escrevemos buf1 a ponto de
alcancar a area desconhecida ateh agora, que eh os ...
Teriamos algo, como segmentation fault, ou access violation no windows, facam seus testes
sabendo que o buffer tem no minimo 40 bytes tentem chamar o programa assim:
programa A 200
Vera que teremos uma crash, pq corrompemos a area ... da stack.
Abracos ateh a proxima, sugestoes, comentarios, duvidas, escrevam ai.
No textarea os diagramas ficaram alinhados mas na visualizacao nao ficaram, droga!
amigo meus parabens pelo tutorioal fico mto contente que vc ao inves de ficar c]discutin]do com o apoca faça tutoriais como esse pra ajudar a galera
meus parabens!
Parabens, amigo vai ajudar muita gente.. que se interresa e que não são poucos !!
u.u nosso bom e nerd ccoder
Excelente Ccoder!!!
By ME!!
Mandou bem mesmo...
Muito bom! Gostei, de verdade.
Parabéns.
HadeS