Estos recursos savedState son utilizados por macOS para soportar la "reanudación" de aplicaciones:
Una de las nuevas características en OS X Lion y OS X Mountain Lion es la habilidad de "Reanudar" para todas las aplicaciones para guardar su último estado, lo que significa que cuando vuelvas a abrir la aplicación o reinicies tu Mac, la aplicación se "reanudará" y se volverá a abrir mostrando todas las ventanas y datos que se estaban utilizando por última vez.
http://osxdaily.com/2011/07/17/delete-specific-application-saved-states-from-mac-os-x-10-7-lion-resume/
He utilizado estos recursos savedState para recuperar la actividad de línea de comandos de hackers mientras respondía a incidentes de seguridad informática.
Dentro de un directorio savedState, hay al menos dos archivos:
windows.plist
, y
data.data
windows.plist
contiene información del diseño de las ventanas y otros metadatos. data.data
es un archivo que contiene registros encriptados cuyo texto plano incluye un blob serializado NSKeyedArchiver con estado específico de la aplicación. Puedes usar los campos NSDataKey
de windows.plist
como claves AES para descifrar los registros en data.data
utilizando el modo CBC con IV | 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |
.
El diseño de un registro (encriptado) dentro de data.data
es:
typedef struct SavedStateRecord {
char magic[4]; // "NSCR"
char version[4]; // "1000"
uint32_t window_id; // little endian
uint32_t cipher_text_size; // little endian
uint8_t cipher_text[cipher_text_size];
} SavedStateRecord;
Una vez que el registro se descifra, el diseño se ve algo como:
// little endian
typedef struct SavedStateRecordPlaintext {
uint32_t unk1; // a menudo 0x0
uint32_t class_name_size;
char class_name[class_name_size];
char magic[4]; // "rchv"
uint32_t size;
// Esto es una estructura de datos serializada NSKeyedArchiver.
// En práctica, un bplist con una interpretación específica.
uint8_t buf[size];
} SavedStateRecordPlaintext;
A partir de ahí, puedes extraer el bplist de la estructura NSKeyedArchiver y manipularlo. La interpretación del estado bplist es específica de la aplicación.
He escrito un analizador para soportar la informática forense que está disponible aquí: https://gist.github.com/williballenthin/994db929b1448fdf73baf91207129dec
CrowdStrike también tiene un analizador y recursos que se describen aquí: https://www.crowdstrike.com/blog/reconstructing-command-line-activity-on-macos/