Cette page documente ce que USN Parser fait à votre entrée, pourquoi on peut faire confiance à la sortie, et où sont les limites. Elle sert pour la chaîne de garde — si vous citez USN Parser dans un rapport, c'est la page à référencer.
Entrées
$UsnJrnl:$J: obligatoire. Flux de données alternatif sparse extrait de la racine du volume\$Extend\$UsnJrnl. Doit être précisément le flux$J—$Maxne porte que le dimensionnement.$MFT: optionnel. La Master File Table du même volume. Sert uniquement à résoudre les références parentales en chemins complets.
Les deux fichiers sont lus en mémoire et passés au parseur WebAssembly. Le navigateur transmet le buffer d'octets au worker via postMessage avec une liste de transfert explicite — plus rapide et évite des copies traînant en mémoire.
Algorithme de parsing
On compile usnrs (Airbus CERT, Apache-2.0) vers wasm32-unknown-unknown. Il implémente la structure USN_RECORD_V2 documentée dans la référence NTFS de Microsoft.
Le lecteur :
- Saute la région de zéros sparse en tête jusqu'au premier octet non nul (début du premier enregistrement).
- Avance, lisant le
RecordLength(4 octets) à chaque offset pour passer au suivant. - S'arrête au premier groupe de 4 octets nuls (fin des enregistrements valides).
- Pour chaque enregistrement, valide que la version majeure/mineure est bien
2.0puis décode l'en-tête fixe et le nom de fichier de longueur variable.
Quand un $MFT est fourni, on résout les chemins complets en remontant la chaîne des références parents. On ne commit un chemin complet que si le nom feuille résolu correspond au filename du journal — ce qui évite qu'une entrée MFT obsolète produise un chemin faussement confiant.
Sortie
Chaque enregistrement expose :
usn(u64) : position dans le journaltimestampMs(i64) : FILETIME Windows converti en millisecondes Unix UTCfilename(UTF-16 décodé)fullPath(string ou null) : seulement quand$MFTa été fourni et correspondreasons(string[]) : bitmaskReasondéveloppé en noms lisiblesattributes(string[]) : attributs NTFS positionnésmftEntry,mftSequence,parentMftEntry,parentMftSequence
La sortie reste en mémoire navigateur jusqu'à la fermeture de l'onglet.
Limites
- Pas encore de support
USN_RECORD_V3. V3 (références fichier de longueur variable, introduit avec ReFS) n'est pas produit sur des volumes NTFS standards, donc rarement gênant en pratique. - Le wrap du ring buffer est invisible : on ne sait pas ce qui a été écrasé avant le plus ancien enregistrement. Croisez avec
$LogFileet Volume Shadow Copies si vous avez besoin d'historique plus profond. - Pas de validation de timestamp : on fait confiance au FILETIME inscrit. Pour détecter du timestomping, le post SI vs FN décrit le contrôle croisé standard contre
$MFT.
Chaîne de garde
Si vous avez besoin d'une référence pour un rapport : la version d'USN Parser est identifiable via le commit hash déployé en pied du dépôt GitHub. L'artefact wasm est reproductible depuis la source via wasm-pack build --release ; le hash du .wasm est stable par révision source.