Questa pagina documenta cosa USN Parser fa al tuo input, perché ci si può fidare dell'output e dove sono i limiti. Serve a supportare una catena di custodia forense — se citi USN Parser in un report, questa è la pagina da riferenziare.
Input
$UsnJrnl:$J: obbligatorio. Un flusso di dati alternativo sparse estratto dalla radice del volume\$Extend\$UsnJrnl. Deve essere specificamente il flusso$J—$Maxporta solo il dimensionamento del journal.$MFT: opzionale. La Master File Table dello stesso volume. Usata unicamente per risolvere i riferimenti alle directory padre in percorsi completi.
Entrambi i file vengono letti in memoria e passati al parser WebAssembly. Il browser passa il buffer di byte al worker via postMessage con una lista di trasferimento esplicita, più veloce e senza copie accidentali che restano in memoria.
Algoritmo di parsing
Compiliamo usnrs (Airbus CERT, Apache-2.0) per wasm32-unknown-unknown. Implementa la struttura USN_RECORD_V2 documentata nella reference NTFS di Microsoft.
Il reader:
- Salta la regione sparse-zero iniziale fino al primo byte non nullo (inizio del primo record).
- Avanza, leggendo il
RecordLength(4 byte) a ogni offset per passare al record successivo. - Si ferma al primo gruppo di 4 byte nulli (fine dei record validi).
- Per ogni record, valida che la versione major/minor sia
2.0e decodifica l'intestazione fissa più il nome del file di lunghezza variabile.
Quando si fornisce un $MFT, risolviamo i percorsi completi camminando lungo la catena dei riferimenti padre. Confermiamo un percorso completo solo quando il nome foglia risolto coincide con il filename del journal — evitando che una entry MFT obsoleta produca un percorso con falsa fiducia.
Output
Ogni record espone:
usn(u64): posizione nel journaltimestampMs(i64): FILETIME di Windows convertito in millisecondi Unix, UTCfilename(UTF-16 decodificato)fullPath(string o null): solo quando$MFTè stato fornito e ha combaciatoreasons(string[]): bitmaskReasonespansa in nomi leggibiliattributes(string[]): attributi NTFS marcati sul filemftEntry,mftSequence,parentMftEntry,parentMftSequence
L'output resta in memoria del browser fino alla chiusura del tab.
Limiti
- Niente supporto a
USN_RECORD_V3ancora. V3 (riferimenti file a lunghezza variabile, introdotto con ReFS) non viene prodotto su volumi NTFS standard, quindi raramente rilevante in pratica. - Il wrap del ring buffer è invisibile: non sappiamo cosa è stato sovrascritto prima del record più vecchio. Incrocia con
$LogFilee Volume Shadow Copies se serve storia più profonda. - Niente validazione dei timestamp: ci fidiamo del FILETIME scritto nel record. Per rilevare timestomping, il post SI vs FN descrive il controllo incrociato standard contro
$MFT.
Catena di custodia
Se serve una reference per un report: la versione di USN Parser è identificabile dal commit hash deployato in fondo al repository GitHub. L'artefatto wasm è riproducibile dalla sorgente via wasm-pack build --release; l'hash del .wasm è stabile per revisione del codice.