ENUNCIADO: Manipulando el Stack
DESCRIPCIÓN
Juan es un programador fanático de juegos que creó uno para sus amigos donde compiten contra una "inteligencia artificial" que siempre gana. Sin embargo, su amigo Carlos logró vencer al sistema.
OBJETIVO:
Hacer que el programa ejecute la sentencia donde se imprime el código ganador, explotando una vulnerabilidad en el código.
MECÁNICA DEL JUEGO
El juego consiste en una canasta vacía donde cada jugador puede agregar 1 o 2 bolitas por turno. Gana quien logre que la canasta tenga exactamente 15 bolitas al final de su turno.
CÓDIGO VULNERABLE
#include <stdio.h>
#include <stdlib.h>
void main(void){
printf("Ingrese su nombre:\n");
int turno = 2;
int suma = 0;
char nombre[80];
scanf("%s", nombre);
int n = 0;
while(suma < 15){
printf("\nElige un número:\n");
scanf("%d", &n);
while(n <= 0 || n >= 3){
printf("Reintente, 1 ó 2:\n");
scanf("%d", &n);
}
suma += n;
printf("La suma es: %d\n", suma);
turno = 1;
if(suma == 15){
break;
}
n = 3 - n;
printf("\nLa computadora eligió: %d\n", n);
suma += n;
printf("La suma es: %d\n", suma);
turno = 2;
}
if(turno == 2){
printf ("PERDISTE\n");
}else{
printf ("GANASTE: XXXXXX\n"); // En esta instrucción se muestra el código ganador.
}
}
COMPILACIÓN:
El programa fue compilado con: gcc desafio8.c -fno-stack-protector