ShellBags¶
ShellBags nedir¶
Explorer, kullanıcının açtığı her klasörün nasıl görüntülendiğini hatırlar: görünümünü, simge boyutunu, sıralama düzenini ve pencere konumunu. Bir klasörün ayarlarını yeniden bulabilmek için klasörün kimliğini kullanıcının kayıt defterinde bir kabuk öğeleri (shell item) ağacı olarak tutar; bunlar bir bağlantının hedef kimliği listesinin tuttuğu öğelerle aynıdır: bir sürücü, ardından açılan klasöre kadar her klasör. Bu ağaçlar ShellBags'tir.
Explorer'da ve açma ve kaydetme iletişim kutularında açılan klasörleri kapsarlar; çıkarılabilir sürücülerdeki, ağ paylaşımlarındaki, taşınabilir aygıtlardaki (telefonlar, kameralar), ZIP arşivlerindeki ve FTP sunucularındaki klasörler ile Denetim Masası sayfaları da buna dahildir. Klasör, sürücü veya ağ paylaşımı ortadan kalktıktan sonra da kalırlar.
En iyi sonuç: bu kullanıcının Explorer'ı bu klasörü (veya altındaki bir klasörü) göstermiştir. Bir ShellBag klasörde ne yapıldığını göstermez ve her ziyareti tarihlendirmez: aşağıdaki zamanlara bakın.
Konum¶
C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat
Local Settings\Software\Microsoft\Windows\Shell\BagMRU (Windows Vista and later)
Wow6432Node\Local Settings\Software\Microsoft\Windows\Shell\BagMRU (32-bit Explorer)
C:\Users\<user>\NTUSER.DAT
Software\Microsoft\Windows\Shell\BagMRU (desktop and network items)
Software\Microsoft\Windows\ShellNoRoam\BagMRU (Windows XP: local folders)
Bir BagMRU anahtarı, her biri bir kabuk öğesi olan numaralandırılmış değerler ve bunların sırasını (en son
açılan ilk sırada) veren bir MRUListEx değeri tutar. Her değerin, altındaki öğeler için aynı adlı bir alt
anahtarı vardır; böylece bir yol, BagMRU anahtarından bir değere kadar inen öğelerden oluşur. Bir alt
anahtarın NodeSlot değeri, klasörün görünüm ayarlarının bulunduğu Bags\<N> anahtarının numarasıdır.
Her profil için UsrClass.dat ve NTUSER.DAT dosyalarını işlem günlükleriyle (.LOG1, .LOG2) birlikte
ve bir NTUSER.DAT kullanıcısının SID'sini veren sistemin SOFTWARE kovanını toplayın.
Hangi zaman neyi söyler¶
- Kabuk öğesinin zamanları (
ItemModifiedUTC,ItemCreatedUTC,ItemAccessedUTC), Explorer öğeyi yazdığı andaki klasörün kendi dosya sistemi zamanlarıdır (FAT hassasiyeti: 2 saniye). Ziyareti değil klasörü tarihlendirirler ve sonraki ziyaretlerde güncellenmezler. FAT saatlerinin saklanmış bir UTC ofseti yoktur. Eski tarzUTCbaşlıkları ve gösterilenZsoneki görüntüleme kurallarıdır; kaynak saat diliminin kanıtı değildir.auto-parse --timezonebu alanları korur; bunları kaynak sistem bağlamıyla yorumlayın. - Bir anahtarın son yazılma zamanı,
MRUListExdeğeri yeniden yazıldığında, yani öğelerinden biri açılıp öne taşındığında değişir. Dolayısıyla bir öğenin değerinin bulunduğu anahtarın zamanı (ParentKeyLastWrittenUTC), öğenin en son açıldığı zamandır; ancak yalnızca öğe o anahtardaki en son öğe olduğunda (IsMostRecentInParenttrue,MruPosition0). Diğer öğeler için bu, bir kardeş öğenin açıldığı daha sonraki bir zamandır. - Bir öğenin kendi anahtarı (
KeyLastWrittenUTC), en son alt öğesinin açılışını aynı şekilde tarihlendirir.
Analist için uyarılar¶
- Yokluk pek bir şey kanıtlamaz. Explorer, bir klasörün görünümü kaydedildiğinde ShellBags yazar; yalnızca kısa süre görülen veya başka bir yolla (komut satırı, betik, program) açılan bir klasörün hiç kaydı olmayabilir. Kullanıcı anahtarları silebilir.
- Bir NTFS referansı, öğe yazıldığı andaki klasöre aittir (
MftEntry,MftSequence). Aynı klasörün hâlâ var olup olmadığını veya girdiyi başka bir dosyanın yeniden kullanıp kullanmadığını görmek için$MFTiçinde arayın. - Çıkarılabilir sürücüler sürücü harfleriyle adlandırılır. Harf, sürücünün o sırada sahip olduğu harftir; aygıt için USB ve bağlanmış aygıt geçmişiyle eşleştirin.
- Adlar öğeden gelir. Daha sonra yeniden adlandırılan bir klasör burada eski adını korur. Kök ve bilinen
klasörler, adli bilişim araçlarının yaygın olarak adlandırdığı şekilde adlandırılır (
This PC,Quick Access,Downloads);Guidbunların tanımlayıcısını verir. - Arama sonuçları, kitaplıklar ve Denetim Masası sayfaları diskteki klasörler değil, görünümlerdir
(
property_view,control_panel_item,control_panel_category). - Hiçbir ayrıştırıcının tanımadığı bir öğe, baytlarını
ItemTypeunknownve sınıf baytıItemClassiçinde olacak şekildeDataRawiçinde tutar. Hasarlı veya olağandışı öğelerProblemsiçinde raporlanır ve baytları da korunur. - Kirli bir kovan, günlükleri olmadan en son öğelerinden yoksun olabilir. Juntei,
--no-logsverilmedikçe kovanın yanındaki günlükleri yeniden oynatır;TransactionLogStatusbir kaydın onlardan gelip gelmediğini belirtir.
Juntei ile ayrıştırma¶
Usage: juntei parse-registry shell-bags <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find UsrClass.dat and NTUSER.DAT hives
-f, --file <FILE> Parse one UsrClass.dat or NTUSER.DAT
--log1/--log2 Supply transaction logs explicitly
--no-logs Do not replay logs
Parsing:
--code-page <NUMBER> Windows code page for ANSI names in shell items (default: 1252)
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry shell-bags -d evidence/ -o shellbags.csv
juntei parse-registry shell-bags -f UsrClass.dat -t jsonl \
| jq 'select(.ItemType == "volume" and .GUID == "{F5FB2C77-0E2F-4A16-A381-3E560C68BC83}")'
Kabuk öğelerinin kodu, parse-file lnk komutunun kabuk öğesi ayrıştırıcısı olan ys-lnk-parser ile çözülür.
Özet, en son açılan klasörleri (en yeniden başlayarak), üst anahtarlarının son yazılma zamanına göre,
kullanıcılarıyla birlikte listeler.
Çıktı alanları¶
| Alan | Yorumlama |
|---|---|
Host, User, UserSID, SourcePath, HiveType |
Ana bilgisayar, profil klasörünün adı, kullanıcının SID'si (bir UsrClass.dat dosyasının kök anahtarı onu adlandırır; NTUSER.DAT için sistemin ProfileList kaydı), kovan ve türü. |
BagKey |
Kovanın kökü altındaki öğenin anahtarı (…\BagMRU\4\3\0): değeri, bir üstündeki anahtardadır. |
MRU-Position, IsMostRecentInParent |
Üst anahtarının MRUListEx değerindeki yeri (0: en son açılan); liste onu içermiyorsa boştur. |
NodeSlot |
Bags\<N> anahtarının numarası (klasörün görünüm ayarları). |
Path |
Ağacının tepesinden ona kadar olan öğeler, \ ile birleştirilmiş olarak. [unknown], değeri eksik olan bir öğeyi temsil eder. |
ItemType, ItemClass |
Öğenin ne olduğu (root_folder, volume, directory, file, network_location, uri, ftp_folder, compressed_folder, portable_device, portable_device_folder, users_files_folder, property_view, control_panel_item, control_panel_category, cd_burn, unknown) ve sınıf baytı. |
ItemName, GUID |
Adı (bir klasörün uzun adı) ve bir kök klasörün, Denetim Masası öğesinin veya temsilci klasörün sınıf tanımlayıcısı. |
ItemModifiedUTC, ItemCreatedUTC, ItemAccessedUTC |
Kabuk öğesinden: öğe yazıldığı andaki klasörün zamanları (FAT, 2 saniye hassasiyet). |
MFT-Entry, MFT-Sequence |
Kabuk öğesinden: klasörün NTFS dosya referansı. |
ExtensionBlocks |
Öğenin kaç uzantı bloğu olduğu. |
KeyLastWrittenUTC |
Kayıt defterinden: öğenin kendi anahtarının son yazılma zamanı: en son alt öğesinin açıldığı zaman. |
ParentKeyLastWrittenUTC |
Kayıt defterinden: değerinin bulunduğu anahtarın son yazılma zamanı: IsMostRecentInParent true ise, öğenin en son açıldığı zaman. |
DataRaw |
Tam olarak anlaşılamayan veya sorunları olan bir öğe için değerin baytları (onaltılık). |
TransactionLogStatus, LogsApplied |
Kayıt defteri kurtarma bağlamı. |
Problems |
Anahtarının MRUListEx değerinin adlandırdığı ancak anahtarda bulunmayan bir değer, listenin adlandırmadığı bir değer, değeri olmayan bir alt anahtar, ikili olmayan bir değer, yanlış türde bir NodeSlot, hasarlı bir kabuk öğesi listesi. |
İnceleme stratejisi¶
- Çıkarılabilir sürücüleri (Removable Drives
Guiddeğerine sahipvolume), ağ konumlarını, FTP klasörlerini ve taşınabilir aygıtları ve bunların altındaki klasörleri listeleyin. - İlgi çekici klasörleri arayın: kullanıcının yazabildiği hazırlık konumları (
Temp,ProgramData,Public), araç ve arşiv klasörleri, diğer kullanıcıların profilleri ve artık var olmayan klasörler ($MFTiçindeki NTFS referansını kontrol edin). - Ziyaretleri yalnızca
IsMostRecentInParentdeğeri true olan öğelerinParentKeyLastWrittenUTCdeğeriyle tarihlendirin; geri kalanları dosya açılışlarını tarihlendiren LNK dosyaları, Jump Lists ve RecentDocs ile ilişkilendirin. - Silinmiş
BagMRUanahtarları ve değerleri içinparse-registry read --recover-deletedkomutunu kullanın.
Daha fazla ayrıntı¶
ProfileList üzerinden SID araması, benzersiz ve sözdizimsel olarak geçerli tek bir SID gerektirir.
Belirsiz profil klasörü eşlemeleri ve S-1-...bak gibi yedek anahtarlar UserSid değerini bilinmeyen
olarak bırakır.