원클릭으로
yara-sigs
// Scan a state snapshot's memory dumps with YARA signatures to detect packers, crypto constants, malware, and more
// Scan a state snapshot's memory dumps with YARA signatures to detect packers, crypto constants, malware, and more
Capture a full debuggee state snapshot (all committed memory regions + processor state) to disk for offline analysis
Smart trace-based OEP finder for packed/protected PE executables. Traces through packer stubs using intelligent stepping, anti-debug evasion, and heuristic OEP detection, then captures a state snapshot at the original entry point.
Hunt for vulnerabilities in a running debuggee by analyzing imports/exports, triaging attack surface, and iteratively testing for bugs with PoC generation.
Load, unpack, and analyze shellcode in x64dbg. Use this skill when the user wants to analyze shellcode, load a shellcode blob into a debugger, unpack encoded/encrypted shellcode, or perform static/dynamic analysis of shellcode payloads.
Decompile a function to C-like pseudocode using angr
Compare two state snapshots to identify register and memory changes between two points in time
| name | yara-sigs |
| description | Scan a state snapshot's memory dumps with YARA signatures to detect packers, crypto constants, malware, and more |
| allowed-tools | mcp__x64dbg__get_debugger_status, mcp__x64dbg__pause, mcp__x64dbg__disconnect, mcp__x64dbg__connect_to_session, Bash, Read, AskUserQuestion, Skill |
Scan debuggee memory (via a state snapshot) against a large YARA signature database to identify packers, crypto constants, anti-debug tricks, malware families, and more.
Follow these steps exactly:
Run pip show yara-python via Bash. If not installed, tell the user to run pip install yara-python and stop.
Run git --version via Bash. If not installed, tell the user to install Git and stop.
Check if the directory ${CLAUDE_PLUGIN_ROOT}\yarasigs exists (use dir). If it does not exist, clone it:
git clone --recurse-submodules https://github.com/x64dbg/yarasigs "${CLAUDE_PLUGIN_ROOT}\yarasigs"
If the directory exists but looks incomplete (missing Yara-Rules or citizenlab subdirectories), update submodules:
git -C "${CLAUDE_PLUGIN_ROOT}\yarasigs" submodule update --init --recursive
The YARA database contains many rule categories. If the user specified what they want to scan for in their invocation, use that. Otherwise, ask the user what they want to scan for using AskUserQuestion with these options:
Map the selection to rule category paths:
| Selection | Rule paths (relative to yarasigs/) |
|---|---|
| Packers & compilers | packer.yara, packer_compiler_signatures.yara, Yara-Rules/packers/ |
| Crypto constants | crypto_signatures.yara, Yara-Rules/crypto/ |
| Anti-debug / anti-VM | Yara-Rules/antidebug_antivm/ |
| All signatures | All .yar and .yara files recursively |
Check if a recent snapshot exists in ${CLAUDE_PLUGIN_ROOT}\snapshots (use dir).
To take a fresh snapshot, invoke the state-snapshot skill via Skill("state-snapshot"). After it completes, note the snapshot directory path.
Execute the scan script:
python "${CLAUDE_PLUGIN_ROOT}\skills\yara-sigs\yara_scan.py" --snapshot-dir <snapshot_path> --yarasigs-dir "${CLAUDE_PLUGIN_ROOT}\yarasigs" --categories <category> [--module-filter <module_name>]
Where <category> is one of: packers, crypto, antidebug, or all.
Module filtering: If the user asks to focus on a specific module (e.g. the main executable), pass --module-filter <name> where <name> is a substring of the module name as shown in the memory map (e.g. secret_encryptor). This merges all of the module's sections into a single buffer before scanning, which is critical for YARA rules whose patterns span multiple PE sections (e.g. MD5 init constants in .text + T-table in .rdata). Always prefer using --module-filter when scanning a specific module rather than relying on per-region scanning.
The script writes results to <snapshot_path>/yara_results.json and prints a summary to stdout.
Read <snapshot_path>/yara_results.json if it exists and the stdout summary is not sufficient.
Present findings organized by:
memory_map.json)If no matches were found, tell the user and suggest trying a broader category (e.g., "all").