MuiCache¶
MuiCache क्या है¶
जब कोई उपयोगकर्ता कोई program शुरू करता है, तो Windows shell में दिखाए जाने वाले नाम के लिए program के version resources
पढ़ता है (FileDescription, उदाहरण के लिए cmd.exe के लिए "Windows Command Processor")
और उसे प्रति उपयोगकर्ता MuiCache में cache करता है। Windows 8 और बाद के संस्करण company
(CompanyName) भी cache करते हैं। Cache की key program का पूरा path होता है:
- Windows 8 और बाद के: प्रति program दो values,
<path>.FriendlyAppNameऔर<path>.AppCompany। - Windows Vista और 7: प्रति program एक value,
<path>, जिसमें friendly name होता है। - Windows XP: वही रूप,
NTUSER.DATमें।
MuiCache किसी उपयोगकर्ता के shell session के लिए program-निष्पादन के सुराग दे सकता है, जिनमें removable drives, network shares और अब मौजूद न रहे folders पर के programs भी शामिल हैं, उस नाम और company के साथ जो फ़ाइल ने स्वयं दिए थे।
सर्वोत्तम निष्कर्ष: इस shell profile ने किसी फ़ाइल का path, विवरण और company cache किया। इसे अन्य निष्पादन artifacts से correlate करें। Profile उस account की पहचान नहीं करता जिसके रूप में process चला। MuiCache में प्रति program कोई समय और कोई run count नहीं होता।
स्थान¶
C:\Users\<user>\AppData\Local\Microsoft\Windows\UsrClass.dat Windows Vista and later
Local Settings\Software\Microsoft\Windows\Shell\MuiCache
C:\Documents and Settings\<user>\NTUSER.DAT Windows XP
Software\Microsoft\Windows\ShellNoRoam\MUICache
LangID (cache की गई strings की भाषा) कोई program नहीं है और छोड़ दिया जाता है। @<file>,-<number>
(@shell32.dll,-22019) नाम वाली values वे resource strings हैं जिन्हें shell ने अपने
menus और file types के लिए cache किया, programs नहीं; इन्हें छोड़ दिया जाता है और summary में गिना जाता है। Windows Vista
और बाद के संस्करणों पर NTUSER.DAT में कोई MuiCache नहीं होता।
हर profile के लिए UsrClass.dat (और NTUSER.DAT) को उनके transaction logs के साथ, और host तथा
उपयोगकर्ता नामों के लिए सिस्टम के SYSTEM और SOFTWARE hives एकत्र करें।
विश्लेषक के लिए सावधानियाँ¶
- Profile का owner ज़रूरी नहीं कि process का account हो। किसी अन्य account से शुरू किया गया
program इस उपयोगकर्ता के session में window दिखा सकता है और इस उपयोगकर्ता के cache में metadata छोड़ सकता है।
UserऔरUserSidhive के owner की पहचान करते हैं, process के security context की नहीं। - प्रति program कोई समय नहीं।
KeyLastWrittenUTCkey का last write है: उसके किसी भी program में हुआ सबसे हालिया बदलाव, न कि कोई विशेष program कब चला। Prefetch, BAM, UserAssist और event logs समय देते हैं। - केवल वे programs नहीं जिन्हें उपयोगकर्ता ने हाथ से शुरू किया। Shell द्वारा स्वयं load की गई कोई DLL या program
(
Open with, किसी shell extension, किसी installer के child के लिए) दिखाई दे सकता है, जैसेexplorerframe.dllयाshell32.dll। - नाम फ़ाइल से आता है।
FriendlyAppNameऔरAppCompanyवही हैं जो फ़ाइल के version resources ने चलते समय बताया। Malware कोई भी विवरण और company होने का दावा कर सकता है; rename किया गया tool अपना मूल विवरण बनाए रखता है, जो उसे उजागर कर सकता है (svchost.exeनाम की फ़ाइल जिसका friendly name कोई remote access tool है)। - प्रति path एक entry. उसी program को फिर से चलाने पर entry नहीं जुड़ती; किसी अन्य path पर रखी copy से जुड़ती है। फ़ाइल हटाए जाने के बाद भी program की entry बनी रह सकती है।
- एक path के लिए दोनों रूप. जब किसी path का friendly name दोनों रूपों में हो (upgrade किया गया profile), तो हर एक को अपना record मिलता है, ताकि कोई value खो न जाए।
- क्षतिग्रस्त values. जो value string नहीं है, वैध UTF-16 नहीं है या पूरी पढ़ी नहीं जा सकती, वह अपने
bytes (
FriendlyAppNameRaw,AppCompanyRaw) बनाए रखती है औरProblemsमें report की जाती है। अमान्य UTF-16 दिखाए गए text में replacement characters भी उत्पन्न कर सकता है; मूल bytes के लिए raw column का उपयोग करें।
Juntei से parse करें¶
Usage: juntei parse-registry muicache <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
Output:
-o, --output <FILE> Save records
-t, --output-type <TYPE> csv, json, or jsonl
juntei parse-registry muicache -d evidence/ -o muicache.csv
juntei parse-registry muicache -f UsrClass.dat -t jsonl \
| jq 'select(.Path | test("\\\\(Users|ProgramData|Temp)\\\\"; "i"))'
Summary Windows और Program Files folders के बाहर के programs (user folders,
अन्य drives, network shares) उनके उपयोगकर्ताओं के साथ, और छोड़ी गई resource strings की संख्या सूचीबद्ध करती है।
अन्य नामों वाले Program Files folders (अन्य भाषाओं के Windows पर) भी सूचीबद्ध होते हैं।
Relative paths और environment-variable folder से बाहर निकलने वाले paths सूचीबद्ध रहते हैं। साधारण
drive paths की जाँच परीक्षक के file system तक पहुँचे बिना . और .. घटकों को resolve करने के बाद
की जाती है।
आउटपुट fields¶
| फ़ील्ड | व्याख्या |
|---|---|
Host, User, UserSID, SourcePath |
Host, profile folder का नाम, उपयोगकर्ता का SID (UsrClass.dat की root key इसका नाम देती है; अन्यथा सिस्टम की ProfileList), और hive। |
HiveType |
UsrClass.dat या NTUSER.DAT। |
Path |
Program का path: .FriendlyAppName या .AppCompany के बिना value का नाम। |
FriendlyAppName |
Program का विवरण, <path>.FriendlyAppName या <path> से। |
AppCompany |
Program की company, <path>.AppCompany से (Windows 8 और बाद के)। |
KeyPath, KeyLastWrittenUTC |
MuiCache key, और उसका last write: उसके किसी भी program में हुआ सबसे हालिया बदलाव। |
FriendlyAppNameRaw, AppCompanyRaw |
Value के bytes (hex), जब वे साफ़ decode होने वाला text न हों। |
TransactionLogStatus, LogsApplied |
Registry recovery का संदर्भ: replayed जब logs ने program की कोई value लिखी। |
Problems |
ऐसी values जो strings नहीं हैं, वैध UTF-16 नहीं हैं या पढ़ी नहीं जा सकतीं। |
जाँच की रणनीति¶
- User-writable स्थानों (
\Users\,Downloads,Temp,ProgramData), अन्य drives और network shares पर के programs, तथा administration, remote access और archiving tools देखें। - File name की तुलना उसके friendly name और company से करें: mismatch rename किए गए tool या masquerading फ़ाइल को उजागर कर सकता है।
- Prefetch, BAM और UserAssist (यह कब चला), Amcache और ShimCache (फ़ाइल का
hash और उपस्थिति), और
$MFT(क्या फ़ाइल अब भी मौजूद है) से correlate करें। - हटाई गई MuiCache values के लिए
UsrClass.datपरparse-registry read --recover-deletedका उपयोग करें।