Dialog Buka dan Simpan Sebagai (OpenSaveMRU)¶
Apa itu riwayat dialog¶
Ketika sebuah program menampilkan dialog umum Open atau Save As, Windows mencatat di
NTUSER.DAT milik pengguna:
- berkas mana yang dibuka atau disimpan:
OpenSavePidlMRUmemiliki satu subkey per ekstensi (docx,ps1, …) dan*untuk semua ekstensi, masing-masing berupa daftar most-recently-used; - program mana yang menggunakan dialog, dan folder tempat dialog itu berada:
LastVisitedPidlMRU(danLastVisitedPidlMRULegacyuntuk program yang menggunakan dialog versi lama); - program yang menampilkan dialog:
CIDSizeMRU(ukuran dialog per program), danFirstFolder(path program dan sebuah folder); - pada Windows 2000 dan XP,
OpenSaveMRU(path per ekstensi) danLastVisitedMRU(program dan foldernya sebagai path).
Sejak Windows Vista, berkas dan folder disimpan sebagai shell item list, struktur yang sama dengan target sebuah pintasan: setiap item merupakan bagian dari path (This PC, sebuah drive, sebuah folder, berkasnya), dan item berkas atau folder dapat membawa waktu dan referensi berkas NTFS-nya sendiri.
Kesimpulan terbaik: sebuah program menggunakan dialog Open atau Save As untuk membuka atau menyimpan berkas ini, atau di folder ini, dalam sesi pengguna ini. Hanya entri terbaru dari setiap daftar yang memiliki tanggal: waktu penulisan terakhir key-nya.
Lokasi¶
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\CurrentVersion\Explorer\ComDlg32\
OpenSavePidlMRU\<extension> shell item lists, MRUListEx order (Vista and later)
OpenSavePidlMRU\* every extension
LastVisitedPidlMRU program name, then a shell item list
LastVisitedPidlMRULegacy the same
CIDSizeMRU program name
FirstFolder program path, then a folder path
OpenSaveMRU\<extension> paths, MRUList order (2000 and XP)
LastVisitedMRU program name, then a folder path (2000 and XP)
Kumpulkan NTUSER.DAT beserta log transaksinya untuk setiap profil.
Peringatan bagi analis¶
- Satu waktu per daftar. Waktu penulisan terakhir sebuah key berubah ketika salah satu entrinya berpindah ke
depan daftarnya, sehingga waktu itu hanya menandai entri di posisi 0 (
IsMostRecent,LastUsedUTC). Entri lainnya berurutan, dari terbaru ke terlama menurun dalam daftar, tetapi tidak bertanggal. - Berkas yang sama di dua daftar. Sebuah berkas ada di daftar ekstensinya dan di
*; jangan menghitungnya sebagai dua kali penggunaan.*memberikan urutan lintas ekstensi. - Dibuka atau disimpan. Daftar-daftar ini tidak menyatakan yang mana. Korelasikan dengan record
$MFTdan Jurnal USN milik berkas, berkas LNK, dan jump list. - Waktu item adalah waktu berkas, bukan waktu dialog.
ItemModifiedUTC,ItemCreatedUTC, danItemAccessedUTCadalah waktu berkas saat item ditulis, dengan presisi 2 detik (FAT). Item dari known folder (CLSID_ThisPCDocumentsRegFolder,Downloads, …) sering kali tidak memilikinya. Timestamp FAT ini tidak memiliki offset zona waktu. Sufiks kolomUTCadalah konvensi tampilan, bukan bukti bahwa jam aslinya menggunakan UTC; korelasikan dengan zona waktu sistem sumber dan timestamp lain sebelum membandingkannya dengan FILETIME registry. Lihat panduan file time dari Microsoft. - Path adalah shell path. Path dimulai dari desktop:
This PC\C:\Users\…, sebuah known folder, sebuah library (UsersLibraries\Documents\…), atau lokasi jaringan. Path yang dimulai dengan folder atau berkas berada di desktop. Path kosong adalah desktop itu sendiri. - Item yang tidak didekode. Item dengan tipe yang tidak dikenal oleh parser shell item ditampilkan berdasarkan
kelasnya (
[class 0x00]), tipenyaunknown, dan byte daftarnya ada diDataRaw. - Program berupa nama.
LastVisitedPidlMRUdanCIDSizeMRUmenyimpan nama berkas (WINWORD.EXE), bukan path.FirstFoldermenyimpan path. - Daftar pendek dan dibersihkan. Setiap daftar menyimpan entri dalam jumlah terbatas, dan alat pembersih
menghapus key-nya. Gunakan
parse-registry read --recover-deleteduntuk nilai yang telah dihapus.
Mengurai dengan Juntei¶
Usage: juntei parse-registry open-save-mru <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find NTUSER.DAT hives
-f, --file <FILE> Parse one NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
--code-page <CP> Code page of shell item names that aren't Unicode (default 1252)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry open-save-mru -d evidence/ -o opensavemru.csv
juntei parse-registry open-save-mru -f NTUSER.DAT -t jsonl \
| jq 'select(.List == "OpenSavePidlMRU" and .Extension != "*")'
Ringkasan mencantumkan entri per daftar, program yang menggunakan dialog, dan berkas
terbaru setiap hive (entri pertama dari *).
Field keluaran¶
| Field | Interpretasi |
|---|---|
Host, User, UserSID, SourcePath |
Host, pemilik profil (dari path atau shell folder), SID dari ProfileList sistem, dan hive. |
List |
OpenSavePidlMRU, LastVisitedPidlMRU, LastVisitedPidlMRULegacy, CIDSizeMRU, FirstFolder, OpenSaveMRU, atau LastVisitedMRU. |
Extension |
Subkey ekstensi (docx, *); kosong untuk daftar lainnya. |
MRU-Position, IsMostRecent |
Posisi di daftar key (0 adalah yang terbaru); kosong jika daftar tidak menyebutkan nilai tersebut. |
ValueName |
Nomor nilai (MRUListEx) atau hurufnya (MRUList). |
Program |
Program yang menampilkan dialog. |
Path |
Berkas atau folder: nama-nama shell item yang digabungkan, atau path yang disimpan sebagai teks. |
ItemType |
Tipe shell item terakhir: file, directory, root_folder, volume, network_location, property_view, unknown, … |
ItemModifiedUTC, ItemCreatedUTC, ItemAccessedUTC |
Waktu berkas atau folder, sebagaimana dicatat oleh shell item-nya. |
MFT-Entry, MFT-Sequence |
Referensi berkas NTFS yang dicatat oleh shell item. |
LastUsedUTC |
Waktu penulisan terakhir key, hanya untuk entri terbaru. |
KeyPath, KeyLastWrittenUTC |
Key dan waktu penulisan terakhirnya: waktu entri terbarunya, bukan waktu setiap baris. |
DataRaw |
Byte nilai (hex) jika tidak dapat didekode, atau shell item list jika tipe sebuah item tidak dikenal. |
TransactionLogStatus, LogsApplied |
Konteks pemulihan registry. |
Problems |
Nilai yang disebutkan daftar tetapi tidak ada di key, nilai yang tidak disebutkan daftar, tipe yang salah, nama atau daftar yang terpotong. |
Strategi investigasi¶
- Baca
*secara berurutan per pengguna, danLastUsedUTCuntuk berkas terbaru. - Cari skrip, arsip, executable, dan dokumen di lokasi yang dapat ditulisi pengguna, removable, atau jaringan, serta berkas yang namanya menyerupai kredensial atau hasil ekspor.
- Gunakan
LastVisitedPidlMRUuntuk mengaitkan sebuah program dengan folder yang terakhir digunakannya, sertaCIDSizeMRUdanFirstFolderuntuk program yang pernah menggunakan dialog sama sekali. - Korelasikan path dan
MftEntrydengan$MFT, Jurnal USN, berkas LNK, jump list, ShellBags, dan RecentDocs.