Entiendo cómo funciona pero, por ejemplo, después de leer 4 bytes, ¿cómo se entiende si originalmente era un número entero o 4 caracteres diferentes? Ambos podrían dar un resultado significativo.
Entiendo cómo funciona pero, por ejemplo, después de leer 4 bytes, ¿cómo se entiende si originalmente era un número entero o 4 caracteres diferentes? Ambos podrían dar un resultado significativo.
Lo mismo que todo, de verdad. Investigación y experimentación. Para algo como los datos en el kernel de Linux, la fuente es pública y puede saber qué byte estará donde esté (tal vez se requiera realizar una depuración del kernel para estar seguro, pero aún puede obtenerlo). Es lo mismo que tuvo que hacer para averiguar qué "mala especulación" causó para obtener los datos deseados en caché en primer lugar.
Para Windows haría su investigación a través de los encabezados en el kernel SDK, o en libros como "Windows Internals". Es, nuevamente, la misma investigación que harías para averiguar qué compensaciones estás buscando. La depuración del núcleo puede ayudar.
El único enfoque de "rociar y rezar" sería buscar señaladores. Algunas estructuras de datos comienzan con un identificador de 4 o más bytes para que puedan verificar la validez de los datos proporcionados (en Windows, estos suelen llamarse dwMagic
). Una vez que haya encontrado uno jugoso (nuevamente, de la investigación necesita saber qué es uno jugoso) entonces conoce un desplazamiento relativo (de la investigación) de dónde se encuentran los datos que desea. Pero hay una gran cantidad de espacio de direcciones para buscar, por lo que "rociar y rezar" es un poco poco confiable.
Los bytes son bytes. Si algo se lee como un entero, un carácter, una imagen, un audio, etc., es una propiedad de un programa, no de los datos. Puede tomar una foto y luego abrirla en un programa de procesamiento de textos si lo desea. Hay varias formas de "metadatos" que brindan información acerca de qué "supuestamente" debe interpretarse algo, como las extensiones de archivo. También puede ver si coincide con los datos típicos de un tipo particular: puede verificar si los datos, interpretados como caracteres, forman una palabra en un idioma conocido, etc. Pero, en última instancia, si toma datos, debe decidir qué hacer. hacer con eso, y "¿Se estaba interpretando esto como un personaje?" Es solo una pequeña parte de eso. Si robas una contraseña, por ejemplo, debes averiguar cuál es la contraseña para .