¿Por qué en los ataques de desbordamiento de búfer revertimos la dirección? ¿Por qué utilizamos el formato little endian?
¿Por qué invertimos la dirección / usamos little endian en los ataques de desbordamiento de búfer?
Esta afirmación no siempre es cierta. En un sistema big endian, no representaría los datos en little endian.
En un sistema little endian, los valores se representan primero con el byte menos significativo. Así que en la memoria, el entero de 32 bits 0xDEADBEEF
se representaría como 0xEFBEADDE
.
Cuando estás explotando un desbordamiento de búfer y, por ejemplo, sobrescribes el puntero de retorno para saltar a una dirección de memoria que controlas, debes especificar esta dirección en little endian. Creo que su pregunta es por qué es necesaria la pequeña notación endiana aquí, pero eso es simplemente porque es el formato que el procesador entiende. A riesgo de simplificar en exceso, está inyectando efectivamente el código de la máquina en la memoria, por lo que debe coincidir con todo lo demás. Si proporcionó una dirección en big endian, obtendría la dirección equivocada, o tal vez una totalmente inválida.
Debido a que, en general, la pila va de la parte superior de la memoria a la parte inferior, por lo que los "datos" que usa siempre se escriben de menor a mayor.
Editar:
Estosignificaqueeldesbordamientodebúferseproduceenunadireccióninferiorconrespectoalosdatosqueestáintentandodesbordar.
Marqueeste
Lea otras preguntas en las etiquetas buffer-overflow