Amcache¶
Amcache क्या है¶
Amcache एक Windows application-compatibility inventory है जो एक registry hive में संग्रहीत होती है। आधुनिक
सिस्टम executable फ़ाइलों को InventoryApplicationFile के अंतर्गत और Plug-and-Play devices को
InventoryDevicePnp के अंतर्गत दर्ज करते हैं; पुराने Windows संस्करण legacy Root\File layout का उपयोग करते हैं।
Executable की जाँच के लिए Amcache मूल्यवान है, क्योंकि मूल फ़ाइल के ग़ायब हो जाने के बाद भी यह पूरा path, SHA-1, फ़ाइल का आकार, PE metadata, version जानकारी, publisher text, link date और registry timestamps सुरक्षित रख सकता है। Device records जुड़े हुए hardware, drivers, installation तिथियों और identifiers की पहचान कर सकते हैं।
सर्वोत्तम निष्कर्ष: Windows ने दर्ज की गई फ़ाइल या device को inventory में शामिल किया। Executable record उपस्थिति का साक्ष्य है, निष्पादन का प्रमाण नहीं।
स्थान और संग्रह¶
प्रभावित सिस्टम से hive के साथ उसके पास मौजूद Amcache.hve.LOG, .LOG1 और .LOG2 फ़ाइलें भी एकत्र करें। Hive dirty होने पर parse-registry amcache विश्लेषण से पहले उपयोग योग्य transaction logs को मेमोरी में स्वतः replay करता है; साक्ष्य फ़ाइलें नहीं बदलतीं। Recovery विवरण parser log या terminal में मिलता है; records stdout पर भेजने पर diagnostics stderr पर जाते हैं। Logs गुम या अनुपयोगी होने पर records अधूरे रह सकते हैं या असंगत hive पढ़ा नहीं जा सकता।
विश्लेषक के लिए सावधानियाँ¶
- Amcache की executable entry यह सिद्ध नहीं करती कि किसी उपयोगकर्ता ने फ़ाइल launch की।
PublisherWindows द्वारा दर्ज किया गया PE/version-resource metadata है। यह सिद्ध नहीं करता कि collection के समय फ़ाइल पर वैध Authenticode signature था।- Hashes अनुपस्थित हो सकते हैं, और legacy/आधुनिक schemas एक जैसे values उपलब्ध नहीं कराते।
LinkDatePE header से आता है और इसे जाली बनाया, copy किया, या reproducible builds द्वारा उत्पन्न किया जा सकता है।- Key का last-write समय registry record के update का वर्णन करता है, ज़रूरी नहीं कि download, निर्माण, पहले निष्पादन या अंतिम निष्पादन का।
- Paths removable या अब मौजूद न रहे volumes को संदर्भित कर सकते हैं।
Juntei से parse करें¶
Usage: juntei parse-registry amcache <INPUT> [OPTIONS]
Input:
-d, --directory <DIR> Recursively find Amcache hives
-f, --file <FILE> Parse one Amcache.hve
Records:
--files Include every inventoried executable
--devices Include every inventoried PnP device
-a, --all Include both (default for saved structured output)
Output:
-o, --output <PATH> Save text/JSON/JSONL or a directory of CSV tables
-t, --output-type <TYPE> csv, json, jsonl, or text
# Inspect the summary and findings
juntei parse-registry amcache -f Amcache.hve
# Save all record types as CSV tables
juntei parse-registry amcache -f Amcache.hve -a -o amcache-output
# Hunt for one SHA-1 in JSONL
juntei parse-registry amcache -f Amcache.hve -t jsonl \
| jq 'select(.RecordType == "file" and .SHA1 == "0123456789abcdef0123456789abcdef01234567")'
CSV आउटपुट में summary, findings, files और devices tables होती हैं। auto-parse के साथ ये
Registry-Amcache-Summary.csv, Registry-Amcache-Findings.csv, Registry-Amcache-Files.csv और
Registry-Amcache-Devices.csv होती हैं, जो हर कंप्यूटर की FileExistence/ directory के ठीक नीचे बनती हैं, और
tables के बगल में Registry-Amcache-logs.txt होता है। कई hives होने पर extension से पहले -Source1, -Source2
आदि जोड़े जाते हैं; manifests में OutputFiles सटीक paths सूचीबद्ध करता है। Standalone CSV
exports अपने मूल table नाम और अनुरोधित output location बनाए रखते हैं। JSONL records
RecordType values summary, finding, file और device का उपयोग करते हैं।
फ़ाइल आउटपुट fields¶
| फ़ील्ड | विश्लेषक को इसका उपयोग कैसे करना चाहिए |
|---|---|
KeyName, SourceKeyPath |
सटीक स्रोत registry record और schema branch की पहचान करें। Reproducibility के लिए सुरक्षित रखें। |
KeyLastWrittenUTC, KeyLastWrittenFiletime |
Registry record के update का समय, पठनीय और कच्चे रूप में। इसे निष्पादन समय न कहें। |
SourceVolumeKeyLastWrittenUTC, SourceVolumeKeyLastWrittenFiletime |
Legacy schemas पर parent volume-key का समय; संदर्भात्मक, फ़ाइल पर हुई कार्रवाई का समय नहीं। |
FileID |
Amcache द्वारा दर्ज file identifier। बिल्कुल वैसा ही रखा जाता है; यह न मानें कि यह हमेशा SHA-1 होता है। |
SHA1, SHA256 |
Defender, threat intelligence, EDR और file repositories में मज़बूत pivots। Null का अर्थ है दर्ज नहीं किया गया। |
Name, OriginalFileName, Description |
दर्ज किए गए PE/version नाम। Masquerading पकड़ने के लिए वास्तविक path से तुलना करें; metadata हमलावर-नियंत्रित होता है। |
FullPath |
स्थान के लिए सबसे उपयोगी pivot। Case को सावधानी से normalize करें, लेकिन मूल साक्ष्य string को बनाए रखें। |
LongPathHash |
Windows का path-संबंधी identifier; records का मिलान करने में उपयोगी, content hash नहीं। |
ProgramID |
जहाँ उपलब्ध हो, फ़ाइल को application inventory record से जोड़ता है। |
Publisher |
दर्ज किया गया publisher text। इसे metadata मानें, signature सत्यापन नहीं। |
Version, BinFileVersion, ProductName, ProductVersion, BinProductVersion |
Version-resource संदर्भ। अंतर या अविश्वसनीय values masquerading विश्लेषण का समर्थन कर सकते हैं। |
BinaryType |
दर्ज किया गया architecture/type संदर्भ; फ़ाइल recover होने पर PE विश्लेषण से तुलना करें। |
LinkDate |
दर्ज किया गया PE compile/link timestamp। केवल संदेह और पुष्टि के साथ उपयोगी। |
Size |
दर्ज किया गया आकार; $MFT, Defender content या recover की गई फ़ाइल से तुलना करें। |
Language |
PE language identifier; एक कमज़ोर संदर्भात्मक संकेत, attribution नहीं। |
IsPE-File, IsOS-Component |
Windows द्वारा दर्ज classification flags। False value हानिरहित होने का प्रमाण नहीं है। |
USN |
Amcache द्वारा दर्ज NTFS update sequence value; बचे हुए USN records तक pivot करने में मदद कर सकता है। |
APPX-PackageFullName, APPX-PackageRelativeID |
Packaged applications/components को फ़ाइल से जोड़ता है। |
RegistryValues |
हर मूल registry value, type, decode किए गए value और raw hex के साथ। जब typed field अनुपस्थित हो या भविष्य/legacy fields के लिए इसका उपयोग करें। |
Device आउटपुट fields¶
| फ़ील्ड समूह | Fields और व्याख्या |
|---|---|
| स्रोत | KeyName, SourceKeyPath, KeyLastWrittenUTC, KeyLastWrittenFiletime: सटीक device record और registry update का समय। |
| पहचान | Description, BusDescription, Manufacturer, Model: मनुष्यों के लिए device विवरण; vendor strings सामान्य हो सकती हैं। |
| Hardware identifiers | HWID, CompID, Class, ClassGUID, ContainerID, DeviceInterfaceClasses: device-family और instance के लिए सबसे मज़बूत pivots। |
| स्थिति | DeviceState, ProblemCode, ParentID, MatchingID, Enumerator: Windows enumeration और संबंधों का संदर्भ। |
| Driver | DriverID, DriverName, DriverPackageStrongName, DriverVerDate, DriverVerVersion, Provider, Service, INF: driver package और service से संबंध; install की गई फ़ाइलों और services से correlate करें। |
| Installation | InstallDate, FirstInstallDate, InstallState, ExtendedInfs: दर्ज किया गया install lifecycle। तिथि का न होना इस बात का प्रमाण नहीं कि device कभी जोड़ा ही नहीं गया। |
| Filters और stack | LowerClassFilters, UpperClassFilters, LowerFilters, UpperFilters, StackID, LocationPaths: उन्नत driver-stack संदर्भ; अप्रत्याशित filter drivers समीक्षा के योग्य हैं। |
| कच्चा संरक्षण | RegistryValues: सत्यापन और असमर्थित fields के लिए पूरे typed/कच्चे स्रोत values। |
CSV में array और raw-value columns JSON suffix का उपयोग करते हैं (उदाहरण के लिए, HWID-JSON और
RegistryValuesJSON); उनकी cells में JSON होता है, जबकि JSON/JSONL मूल arrays बनाए रखते हैं।
जाँच की रणनीति¶
FullPath,SHA1,NameऔरUSNपर pivot करें।- निष्पादन के समर्थन के लिए मेल खाता Prefetch खोजें।
- फ़ाइल के निर्माण, rename, deletion और आकार को स्थापित करने के लिए
$MFTऔर USN Journal का उपयोग करें। - Publisher/version metadata की तुलना स्वतंत्र रूप से recover किए गए PE और signature सत्यापन से करें।
- Detection या removal के लिए Defender quarantine और event logs जाँचें।