¿Existe un programa que pueda escanear automáticamente la memoria de proceso para tipos de archivo conocidos?

Respuesta corta: no, en realidad no.

Respuesta larga: depende.

Cada programa carga datos y los descomprime de formas específicas. Algunos pueden cargar un archivo JPG como un blob y decodificarlo (o partes de él) a pedido, mientras que otros pueden leer el archivo como una secuencia y decodificarlo sobre la marcha, manteniendo los datos desempaquetados, o incluso sin guardar datos. . Por ejemplo, necesita almacenar en caché solo unos segundos de MP3 para tener una reproducción fluida, aunque con los sistemas actuales generalmente carga todo el archivo MP3 en la memoria, excepto en otros casos especiales.

Y no, no hay forma de identificar en la memoria que algo es una imagen u otra cosa. Son bytes, ¿cómo puedes saber realmente cómo se usarán? Claro, puede analizar los patrones de uso, pero eso significa prácticamente ejecutar la aplicación en modo de depuración.

Además, si busca algunos tipos de archivos, es posible que ni siquiera residan en la RAM, sino que se conviertan en texturas en el contexto de aceleración de hardware, por lo que se conservan en la RAM de video.

Sin embargo, la mayoría de los formatos de archivo tienen ciertos marcadores, por ejemplo, los archivos JPEG comienzan con “JFIF”, y los archivos MPEG tienen números mágicos para identificar cada cuadro, para la sincronización con la mitad de una secuencia. Buscar esos números mágicos puede ser un comienzo.

Este es un problema difícil para cualquier programa escrito correctamente que maneje datos porque un programa escrito de manera eficiente no tendrá el contenido total de un archivo en RAM de una vez (aunque hay aplicaciones que lo harán), y esto convierte el problema de reconocimiento en uno de identificando tipos de archivos por fragmentos en lugar de una simple búsqueda de números mágicos a la archivo (1) de Unix.