memory-forensics

Comprehensive memory forensics skill for analyzing RAM dumps and volatile memory artifacts. Enables detection of malware, rootkits, process injection, credential harvesting, and other memory-resident threats that leave no disk footprint.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "memory-forensics" with this command: npx skills add sherifeldeeb/agentskills/sherifeldeeb-agentskills-memory-forensics

Memory Forensics

Comprehensive memory forensics skill for analyzing RAM dumps and volatile memory artifacts. Enables detection of malware, rootkits, process injection, credential harvesting, and other memory-resident threats that leave no disk footprint.

Capabilities

  • Memory Image Acquisition: Guide acquisition of memory dumps using various tools (WinPMEM, LIME, DumpIt, FTK Imager)

  • Process Analysis: Enumerate running processes, detect hidden/injected processes, analyze process trees

  • DLL/Module Analysis: Identify loaded modules, detect DLL injection, find hollowed processes

  • Network Connection Analysis: Extract active network connections, listening ports, socket information

  • Registry Hive Extraction: Extract registry hives from memory for offline analysis

  • Credential Extraction: Locate and extract credentials, password hashes, Kerberos tickets

  • Malware Detection: Detect code injection, API hooks, SSDT hooks, IDT modifications

  • String Extraction: Extract strings, URLs, IPs, and other IOCs from memory regions

  • Timeline Generation: Create memory-based timelines of process execution and system events

  • Rootkit Detection: Identify kernel-level rootkits, hidden drivers, DKOM techniques

Quick Start

from memory_forensics import MemoryAnalyzer, ProcessScanner, MalwareDetector

Initialize analyzer with memory image

analyzer = MemoryAnalyzer("/path/to/memory.raw")

Get system profile

profile = analyzer.identify_profile() print(f"Detected OS: {profile.os_name} {profile.version}")

Scan for processes

scanner = ProcessScanner(analyzer) processes = scanner.list_processes(include_hidden=True)

Detect malware indicators

detector = MalwareDetector(analyzer) findings = detector.scan_all()

Usage

Task 1: Memory Image Acquisition

Input: Target system requiring memory acquisition

Process:

  • Select appropriate acquisition tool based on OS

  • Verify tool integrity (hash validation)

  • Execute acquisition with minimal system impact

  • Calculate and record hash of acquired image

  • Document acquisition metadata

Output: Raw memory dump with integrity verification

Example:

from memory_forensics import MemoryAcquisition

Windows acquisition guidance

acquisition = MemoryAcquisition()

Get tool recommendations

tools = acquisition.recommend_tools( os_type="windows", os_version="10", acquisition_type="live" )

Generate acquisition command

cmd = acquisition.generate_command( tool="winpmem", output_path="E:\evidence\memory.raw", format="raw" ) print(f"Execute: {cmd}")

Create acquisition documentation

doc = acquisition.create_documentation( case_id="INC-2024-001", examiner="John Doe", target_hostname="WORKSTATION01", acquisition_tool="WinPMEM 4.0", hash_algorithm="SHA256" )

Task 2: Process Analysis

Input: Memory image file path

Process:

  • Load memory image and identify OS profile

  • Enumerate all processes (visible and hidden)

  • Analyze process tree relationships

  • Detect anomalous processes

  • Identify process injection indicators

Output: Comprehensive process listing with anomaly flags

Example:

from memory_forensics import MemoryAnalyzer, ProcessScanner

analyzer = MemoryAnalyzer("/evidence/memory.raw") scanner = ProcessScanner(analyzer)

List all processes with details

processes = scanner.list_processes( include_hidden=True, include_terminated=False )

for proc in processes: print(f"PID: {proc.pid}, Name: {proc.name}, PPID: {proc.ppid}") print(f" Created: {proc.create_time}") print(f" Command Line: {proc.cmdline}") print(f" Suspicious: {proc.is_suspicious}")

Detect hidden processes

hidden = scanner.find_hidden_processes() for proc in hidden: print(f"HIDDEN: PID {proc.pid} - {proc.name}")

Analyze process tree

tree = scanner.build_process_tree() tree.print_tree()

Find orphan processes

orphans = scanner.find_orphan_processes()

Detect process hollowing

hollowed = scanner.detect_hollowing() for proc in hollowed: print(f"HOLLOWED: {proc.pid} - {proc.name}") print(f" Image path mismatch: {proc.image_mismatch}")

Task 3: DLL and Module Analysis

Input: Memory image and target process(es)

Process:

  • Enumerate loaded DLLs for target processes

  • Identify unsigned or suspicious modules

  • Detect DLL injection techniques

  • Compare loaded modules to expected baseline

  • Extract suspicious modules for analysis

Output: Module analysis report with injection indicators

Example:

from memory_forensics import MemoryAnalyzer, ModuleScanner

analyzer = MemoryAnalyzer("/evidence/memory.raw") module_scanner = ModuleScanner(analyzer)

Analyze all loaded modules

modules = module_scanner.enumerate_modules(pid=4892)

for mod in modules: print(f"Module: {mod.name}") print(f" Base: 0x{mod.base_address:x}") print(f" Size: {mod.size}") print(f" Path: {mod.path}")

Detect DLL injection

injections = module_scanner.detect_dll_injection() for inj in injections: print(f"INJECTION in PID {inj.target_pid}:") print(f" Technique: {inj.technique}") print(f" Injected DLL: {inj.dll_name}") print(f" Source PID: {inj.source_pid}")

Find unlinked modules

unlinked = module_scanner.find_unlinked_modules()

Detect reflective DLL loading

reflective = module_scanner.detect_reflective_loading()

Extract suspicious module

module_scanner.extract_module( pid=4892, module_name="suspicious.dll", output_path="/evidence/extracted/" )

Task 4: Network Connection Analysis

Input: Memory image file

Process:

  • Extract active TCP/UDP connections

  • Identify listening ports and services

  • Map connections to processes

  • Detect suspicious external connections

  • Extract connection artifacts

Output: Network connection inventory with process mapping

Example:

from memory_forensics import MemoryAnalyzer, NetworkScanner

analyzer = MemoryAnalyzer("/evidence/memory.raw") net_scanner = NetworkScanner(analyzer)

Get all network connections

connections = net_scanner.get_connections()

for conn in connections: print(f"PID {conn.pid} ({conn.process_name}):") print(f" Protocol: {conn.protocol}") print(f" Local: {conn.local_addr}:{conn.local_port}") print(f" Remote: {conn.remote_addr}:{conn.remote_port}") print(f" State: {conn.state}")

Find connections to suspicious IPs

suspicious = net_scanner.find_suspicious_connections( threat_intel_feed="/feeds/malicious_ips.txt" )

Get listening ports

listening = net_scanner.get_listening_ports() for port in listening: print(f"Port {port.port}/{port.protocol} - PID {port.pid}")

Detect covert channels

covert = net_scanner.detect_covert_channels()

Export to CSV

net_scanner.export_connections("/evidence/network_connections.csv")

Task 5: Credential Extraction

Input: Memory image file

Process:

  • Locate credential storage structures

  • Extract password hashes (NTLM, LM)

  • Find Kerberos tickets

  • Identify cached credentials

  • Extract plaintext passwords (if available)

Output: Extracted credentials for further analysis

Example:

from memory_forensics import MemoryAnalyzer, CredentialExtractor

analyzer = MemoryAnalyzer("/evidence/memory.raw") cred_extractor = CredentialExtractor(analyzer)

Extract all credentials

credentials = cred_extractor.extract_all()

Get NTLM hashes

ntlm_hashes = cred_extractor.get_ntlm_hashes() for cred in ntlm_hashes: print(f"User: {cred.username}") print(f"Domain: {cred.domain}") print(f"NTLM Hash: {cred.ntlm_hash}")

Extract Kerberos tickets

tickets = cred_extractor.get_kerberos_tickets() for ticket in tickets: print(f"Service: {ticket.service_name}") print(f"Client: {ticket.client_name}") print(f"Expiry: {ticket.expiry_time}")

Find LSA secrets

lsa_secrets = cred_extractor.get_lsa_secrets()

Extract cached domain credentials

cached = cred_extractor.get_cached_credentials()

Export credentials report

cred_extractor.export_report("/evidence/credentials_report.json")

Task 6: Malware Detection

Input: Memory image file

Process:

  • Scan for known malware signatures

  • Detect code injection techniques

  • Identify API hooks and SSDT modifications

  • Find hidden/rootkit artifacts

  • Analyze suspicious memory regions

Output: Malware detection findings with IOCs

Example:

from memory_forensics import MemoryAnalyzer, MalwareDetector

analyzer = MemoryAnalyzer("/evidence/memory.raw") detector = MalwareDetector(analyzer)

Run comprehensive malware scan

findings = detector.scan_all()

Detect code injection

injections = detector.detect_code_injection() for inj in injections: print(f"Injection found in PID {inj.pid}:") print(f" Type: {inj.injection_type}") print(f" Address: 0x{inj.address:x}") print(f" Size: {inj.size}")

Scan with YARA rules

yara_matches = detector.scan_yara( rules_path="/rules/malware_rules.yar" ) for match in yara_matches: print(f"YARA Match: {match.rule_name}") print(f" PID: {match.pid}") print(f" Offset: 0x{match.offset:x}")

Detect API hooks

hooks = detector.detect_api_hooks() for hook in hooks: print(f"Hook: {hook.function_name}") print(f" Original: 0x{hook.original_address:x}") print(f" Hooked: 0x{hook.hook_address:x}")

Check SSDT integrity

ssdt_mods = detector.check_ssdt()

Detect DKOM (Direct Kernel Object Manipulation)

dkom = detector.detect_dkom()

Export IOCs

detector.export_iocs("/evidence/memory_iocs.json")

Task 7: Registry Analysis from Memory

Input: Memory image file

Process:

  • Locate registry hives in memory

  • Extract hives to disk

  • Parse registry keys and values

  • Identify suspicious registry entries

  • Extract persistence mechanisms

Output: Registry analysis with persistence indicators

Example:

from memory_forensics import MemoryAnalyzer, RegistryAnalyzer

analyzer = MemoryAnalyzer("/evidence/memory.raw") reg_analyzer = RegistryAnalyzer(analyzer)

List available registry hives

hives = reg_analyzer.list_hives() for hive in hives: print(f"Hive: {hive.name} at 0x{hive.virtual_address:x}")

Extract hive to file

reg_analyzer.extract_hive( hive_name="SYSTEM", output_path="/evidence/SYSTEM_hive" )

Query specific key

value = reg_analyzer.query_key( hive="SOFTWARE", key_path="Microsoft\Windows\CurrentVersion\Run" )

Find persistence mechanisms

persistence = reg_analyzer.find_persistence() for entry in persistence: print(f"Persistence: {entry.location}") print(f" Value: {entry.value}") print(f" Type: {entry.persistence_type}")

Get recently modified keys

recent = reg_analyzer.get_recent_modifications(hours=24)

Search registry for pattern

matches = reg_analyzer.search(pattern="*.exe", include_values=True)

Task 8: String and IOC Extraction

Input: Memory image or specific memory regions

Process:

  • Extract ASCII and Unicode strings

  • Identify URLs, IPs, domains

  • Find email addresses and file paths

  • Extract potential C2 indicators

  • Correlate IOCs with threat intelligence

Output: Extracted IOCs categorized by type

Example:

from memory_forensics import MemoryAnalyzer, IOCExtractor

analyzer = MemoryAnalyzer("/evidence/memory.raw") ioc_extractor = IOCExtractor(analyzer)

Extract all IOCs

iocs = ioc_extractor.extract_all()

Get URLs

urls = ioc_extractor.extract_urls() for url in urls: print(f"URL: {url.value}") print(f" Found at: 0x{url.offset:x}") print(f" Process: {url.process_name}")

Get IP addresses

ips = ioc_extractor.extract_ips() for ip in ips: print(f"IP: {ip.value} ({ip.geo_location})")

Get domains

domains = ioc_extractor.extract_domains()

Get file paths

paths = ioc_extractor.extract_file_paths()

Extract strings from specific process

proc_strings = ioc_extractor.extract_strings( pid=4892, min_length=4, encoding="both" # ascii and unicode )

Correlate with threat intel

enriched = ioc_extractor.enrich_iocs( threat_feed="/feeds/threat_intel.json" )

Export IOCs in STIX format

ioc_extractor.export_stix("/evidence/memory_iocs.stix")

Task 9: Rootkit Detection

Input: Memory image file

Process:

  • Check kernel integrity

  • Detect hidden drivers

  • Analyze SSDT/IDT modifications

  • Find DKOM artifacts

  • Identify inline kernel hooks

Output: Rootkit detection results with remediation guidance

Example:

from memory_forensics import MemoryAnalyzer, RootkitDetector

analyzer = MemoryAnalyzer("/evidence/memory.raw") rootkit_detector = RootkitDetector(analyzer)

Run comprehensive rootkit scan

results = rootkit_detector.scan_all()

Check for hidden drivers

hidden_drivers = rootkit_detector.find_hidden_drivers() for driver in hidden_drivers: print(f"Hidden Driver: {driver.name}") print(f" Base: 0x{driver.base:x}") print(f" Size: {driver.size}")

Analyze SSDT

ssdt_hooks = rootkit_detector.analyze_ssdt() for hook in ssdt_hooks: print(f"SSDT Hook: {hook.function}") print(f" Expected: 0x{hook.expected:x}") print(f" Actual: 0x{hook.actual:x}")

Check IDT (Interrupt Descriptor Table)

idt_mods = rootkit_detector.analyze_idt()

Detect inline hooks in kernel

inline_hooks = rootkit_detector.detect_inline_hooks()

Check kernel callbacks

callbacks = rootkit_detector.analyze_callbacks() for cb in callbacks: print(f"Callback: {cb.type}") print(f" Address: 0x{cb.address:x}") print(f" Module: {cb.module}")

Generate rootkit report

rootkit_detector.generate_report("/evidence/rootkit_analysis.html")

Task 10: Memory Timeline Analysis

Input: Memory image file

Process:

  • Extract timestamps from memory structures

  • Correlate process creation times

  • Analyze recent file handles

  • Build execution timeline

  • Identify temporal anomalies

Output: Memory-based timeline of system activity

Example:

from memory_forensics import MemoryAnalyzer, MemoryTimeline

analyzer = MemoryAnalyzer("/evidence/memory.raw") timeline = MemoryTimeline(analyzer)

Generate comprehensive timeline

events = timeline.generate()

for event in events: print(f"{event.timestamp}: {event.event_type}") print(f" Source: {event.source}") print(f" Details: {event.details}")

Get process timeline

proc_timeline = timeline.get_process_timeline()

Get network timeline

net_timeline = timeline.get_network_timeline()

Find events around specific time

window = timeline.get_events_around( timestamp="2024-01-15T10:30:00", window_minutes=30 )

Export to timeline format

timeline.export_csv("/evidence/memory_timeline.csv") timeline.export_json("/evidence/memory_timeline.json")

Generate visual timeline

timeline.generate_html_report("/evidence/timeline_report.html")

Configuration

Environment Variables

Variable Description Required Default

VOLATILITY_PATH

Path to Volatility installation No System PATH

YARA_RULES_PATH

Default YARA rules directory No ./rules

SYMBOL_PATH

Path to debug symbols No None

THREAT_INTEL_FEED

Threat intelligence feed URL No None

Options

Option Type Description

profile

string Force specific OS profile

output_format

string Output format (json, csv, html)

verbose

boolean Enable verbose output

use_yara

boolean Enable YARA scanning

parallel

boolean Enable parallel processing

Examples

Example 1: Incident Response Memory Analysis

Scenario: Investigating a potential ransomware infection

from memory_forensics import MemoryAnalyzer, ProcessScanner, MalwareDetector, NetworkScanner

Load memory dump from infected system

analyzer = MemoryAnalyzer("/evidence/infected_host.raw")

Step 1: Identify suspicious processes

scanner = ProcessScanner(analyzer) suspicious = scanner.find_suspicious_processes() print(f"Found {len(suspicious)} suspicious processes")

Step 2: Check for known ransomware indicators

detector = MalwareDetector(analyzer) ransomware_iocs = detector.scan_yara("/rules/ransomware.yar")

Step 3: Identify C2 connections

net_scanner = NetworkScanner(analyzer) external_conns = net_scanner.find_external_connections() suspicious_c2 = net_scanner.check_against_threat_intel("/feeds/c2_ips.txt")

Step 4: Extract encryption keys (if in memory)

keys = detector.find_crypto_keys()

Step 5: Generate comprehensive report

analyzer.generate_report( output_path="/evidence/ransomware_analysis.html", include_timeline=True, include_iocs=True )

Example 2: Credential Theft Investigation

Scenario: Investigating Mimikatz or similar credential harvesting

from memory_forensics import MemoryAnalyzer, CredentialExtractor, ProcessScanner

analyzer = MemoryAnalyzer("/evidence/dc_memory.raw")

Look for Mimikatz artifacts

scanner = ProcessScanner(analyzer) mimikatz_indicators = scanner.search_command_lines( patterns=["sekurlsa", "logonpasswords", "lsadump"] )

Extract compromised credentials

extractor = CredentialExtractor(analyzer) credentials = extractor.extract_all()

Check for Kerberos ticket theft (Golden/Silver ticket)

tickets = extractor.get_kerberos_tickets() for ticket in tickets: if ticket.is_suspicious(): print(f"ALERT: Suspicious ticket for {ticket.service_name}")

Document affected accounts

extractor.generate_affected_accounts_report("/evidence/compromised_accounts.csv")

Example 3: Rootkit Investigation

Scenario: Investigating suspected kernel-level compromise

from memory_forensics import MemoryAnalyzer, RootkitDetector, ModuleScanner

analyzer = MemoryAnalyzer("/evidence/server_memory.raw")

Comprehensive rootkit analysis

rootkit_detector = RootkitDetector(analyzer)

Check kernel integrity

integrity = rootkit_detector.verify_kernel_integrity() if not integrity.is_clean: print("ALERT: Kernel modifications detected!") for mod in integrity.modifications: print(f" - {mod.description}")

Find hidden components

hidden_drivers = rootkit_detector.find_hidden_drivers() hidden_processes = rootkit_detector.find_hidden_processes()

Analyze all hooks

all_hooks = rootkit_detector.find_all_hooks()

Generate remediation guidance

rootkit_detector.generate_remediation_guide("/evidence/rootkit_remediation.md")

Limitations

  • Memory analysis accuracy depends on image acquisition quality

  • Encrypted memory regions may not be analyzable

  • Some anti-forensics techniques may evade detection

  • Profile identification may fail for custom or rare OS versions

  • Large memory dumps (>32GB) may require significant processing time

  • Credential extraction requires appropriate access permissions

  • YARA scanning effectiveness depends on rule quality

Troubleshooting

Common Issue 1: Profile Detection Failure

Problem: Unable to automatically detect OS profile Solution:

  • Manually specify profile using --profile option

  • Ensure memory image is not corrupted

  • Check if OS version is supported

Common Issue 2: Incomplete Process Listing

Problem: Known processes not appearing in output Solution:

  • Enable hidden process detection

  • Check for memory corruption

  • Verify image acquisition was complete

Common Issue 3: Slow Analysis Performance

Problem: Analysis taking too long Solution:

  • Enable parallel processing

  • Use targeted scans instead of full analysis

  • Ensure adequate system resources

Common Issue 4: YARA Scan Errors

Problem: YARA rules failing to load Solution:

  • Validate YARA rule syntax

  • Check rule file encoding (UTF-8)

  • Update YARA to latest version

Related Skills

  • disk-forensics: Complements memory analysis with persistent storage investigation

  • malware-forensics: Detailed malware analysis of extracted samples

  • timeline-forensics: Integrate memory timeline with other data sources

  • artifact-collection: Evidence collection and preservation procedures

  • incident-response: Overall IR workflow integration

References

  • Memory Analysis Reference

  • Volatility Plugin Guide

  • Memory Acquisition Best Practices

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Security

threat-intelligence

No summary provided by upstream source.

Repository SourceNeeds Review
Security

malware-forensics

No summary provided by upstream source.

Repository SourceNeeds Review
Security

vulnerability-management

No summary provided by upstream source.

Repository SourceNeeds Review