
Static and dynamic analysis tool for detecting malicious code, suspicious binaries, and privacy violations
Install - Usage - Dynamic Analysis - YARA Rules - CI/CD
Docs: English | Tiếng Việt
Static and dynamic analysis tool for detecting malicious code, suspicious binaries, and privacy violations. Analyzes source code, compiled executables (.exe, .dll, .elf), macOS bundles (.app, .dmg, .pkg), mobile apps (.apk, .ipa), and application packages with YARA rules, Docker behavioral sandboxing, MobSF mobile analysis, payload deobfuscation, and multi-format reporting (JSON, HTML, SARIF).
pip install malware-check
pipx install malware-check
git clone https://github.com/momenbasel/malware-check.git
cd malware-check
pip install -e ".[dev]"
This installs the core CLI. Binary analysis via pefile/lief, AI-powered file
detection via magika, and YARA scanning via yara-python are optional extras.
# Core + binary analysis + AI file detection + YARA
pip install malware-check[full]
# Or install only what you need
pip install malware-check[binary]
pip install malware-check[detect]
pip install malware-check[yara]
# Or install extras manually
pip install pefile lief magika yara-python
pip install malware-check[detect]
When installed, malware-check uses Magika to improve
cross-platform file identification, enrich file_type metadata, and route extensionless or
disguised files to the correct analyzer based on content instead of filename alone.
# Requires Docker - https://docs.docker.com/get-docker/
# Build the sandbox image (one-time setup)
malware-check build-sandbox
malware-check info
The info command will show whether Magika-powered file detection is available.
Install as a Claude Code skill so Claude can analyze files for you:
# Install the skill from GitHub
npx skills install momenbasel/malware-check --skill malware-check
# Or manually: copy skill/SKILL.md to your skills directory
cp -r skill/ ~/.claude/skills/malware-check/
Then in Claude Code, say: "scan this file for malware" or "is this binary safe?" and Claude will use malware-check automatically.
You also need the CLI tool installed:
pip install malware-check pefile lief yara-python
Install the tool and add to your Codex agent instructions:
# 1. Install the CLI
pip install malware-check pefile lief yara-python
# 2. Add to your Codex instructions (codex.md or system prompt)
echo 'Use `malware-check scan <path> --verbose` to analyze files for malware.' >> AGENTS.md
# 3. Or install as a Codex skill
cp -r skill/ .codex/skills/malware-check/
For any AI coding agent that supports tool use or custom instructions:
# 1. Install
pip install malware-check
# 2. Add to agent instructions:
# "When asked to check code/binaries for malware, use: malware-check scan <target> --verbose"
# "For reports: malware-check scan <target> --format html -o report.html"
# "For CI/CD: malware-check scan <target> --format sarif -o report.sarif --exit-code"
malware-check scan suspicious_file.py
# Best results when malware-check[detect] is installed
malware-check scan suspicious_payload --verbose
malware-check scan /path/to/project --verbose
# Build sandbox first (one-time)
malware-check build-sandbox
# Scan with behavioral analysis
malware-check scan malware.exe --dynamic
malware-check scan /Applications/SuspiciousApp.app --dynamic --verbose
# JSON report
malware-check scan target/ --format json -o report.json
# HTML dashboard
malware-check scan target/ --format html -o report.html
# SARIF for CI/CD
malware-check scan target/ --format sarif -o results.sarif
# Exit with non-zero code on findings (for CI gates)
malware-check scan . --format sarif -o results.sarif --exit-code
malware-check info
name: Security Scan
on: [push, pull_request]
jobs:
malware-check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Install malware-check
run: pip install malware-check
- name: Run scan
run: malware-check scan . --format sarif -o results.sarif --exit-code
- name: Upload SARIF
if: always()
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
malware-check/
├── src/malware_check/
│ ├── cli.py # Click CLI entry point
│ ├── scanner.py # Orchestrator + optional Magika-based file detection
│ ├── models.py # Finding, FileAnalysis, ScanResult data models
│ ├── analyzers/
│ │ ├── code.py # Source code pattern matching (40+ rules)
│ │ ├── binary.py # PE/Mach-O/ELF analysis
│ │ ├── privacy.py # PII, tracking, permissions
│ │ ├── yara_engine.py # YARA rule compilation and scanning
│ │ └── dynamic.py # Docker sandbox behavioral analysis
│ └── reporters/
│ ├── console_reporter.py # Rich terminal output
│ ├── json_reporter.py # JSON export
│ ├── html_reporter.py # HTML dashboard (Jinja2)
│ └── sarif_reporter.py # SARIF 2.1.0 for CI/CD
├── rules/yara/ # Bundled YARA rules
├── tests/ # pytest test suite
└── pyproject.toml # Project metadata
Add custom rules to any directory and pass via --yara-rules:
malware-check scan target/ --yara-rules /path/to/my/rules/
Rules support metadata fields for severity, category, confidence, CWE, and MITRE ATT&CK mapping:
rule My_Custom_Rule {
meta:
description = "Detect custom malware pattern"
severity = "critical"
category = "backdoor"
confidence = "0.90"
mitre = "T1059"
cwe = "CWE-94"
recommendation = "Remove malicious code"
strings:
$pattern = "suspicious_string"
condition:
$pattern
}
The Docker sandbox provides behavioral analysis with full isolation:
Monitored behaviors:
# Clone and install dev dependencies
git clone https://github.com/momenbasel/malware-check.git
cd malware-check
pip install -e ".[dev]"
# Optional: include Magika, YARA, and binary extras while developing
pip install -e ".[dev,full]"
# Run tests
pytest
# Lint
ruff check src/ tests/
MIT License - see LICENSE for details.
| Category | Detection Examples |
|---|
| Reverse Shells | Python socket+subprocess, bash /dev/tcp, netcat, PowerShell TCPClient, socat |
| Backdoors | Web shells (PHP/JSP/ASP.NET), command injection (Python/JS/Java/Ruby/Go/C), bind shells, hidden routes, remote code loading, user creation, SSTI, unsafe deserialization |
| Obfuscation | Base64+eval chains, char code construction, hex payloads, dynamic imports |
| Crypto Miners | Stratum pool connections, mining APIs, wallet addresses (BTC/ETH/XMR) |
| Ransomware | File encryption walks, ransom messages, encrypt+rename patterns |
| Credential Theft | Hardcoded secrets, clipboard theft, environment harvesting, browser credential files |
| Supply Chain | Suspicious npm/pip install hooks, dependency confusion, custom registries |
| Persistence | Cron/schtasks creation, registry Run keys, LaunchAgent/Daemon, SUID manipulation |
| Privilege Escalation | SUID bit manipulation, setuid(0), chown root |
| Anti-Analysis | Debugger detection, VM detection, TLS callbacks, ptrace usage |
| Keyloggers | GetAsyncKeyState, SetWindowsHookEx, pynput, CGEventTapCreate |
| Privacy | Tracking SDKs (40+), PII fields (SSN, credit cards, biometrics, health), invasive permissions, device fingerprinting |
| Binary Indicators | Packed binaries (UPX, high entropy), RWX sections, suspicious imports, unsigned/tampered code |
| Protection | Implementation |
|---|
| Network Isolation | --network none (default) |
| Memory Limit | 512MB |
| CPU Limit | 1 core |
| Process Limit | 100 PIDs |
| Read-only FS | --read-only with tmpfs for /tmp and /evidence |
| Capabilities | All dropped (--cap-drop=ALL) |
| Privilege Escalation | Blocked (--security-opt=no-new-privileges) |
| Timeout | Configurable (default 30s) |
| Technique | ID | Detection |
|---|
| Command and Scripting Interpreter | T1059 | Reverse shells, eval/exec patterns |
| Server Software Component: Web Shell | T1505.003 | PHP/JSP/ASP web shells |
| Obfuscated Files or Information | T1027 | Base64, char codes, hex encoding |
| Resource Hijacking | T1496 | Crypto mining pools and tools |
| Data Encrypted for Impact | T1486 | Ransomware file encryption |
| Input Capture: Keylogging | T1056.001 | Keyboard hooks and loggers |
| Scheduled Task/Job | T1053 | Cron, schtasks, LaunchAgent |
| Boot or Logon Autostart | T1547 | Registry Run keys |
| Process Injection | T1055 | VirtualAllocEx + WriteProcessMemory |
| Credentials from Password Stores | T1555 | Browser credential file access |
| Abuse Elevation Control | T1548 | SUID bit manipulation |
| Debugger Evasion | T1622 | Anti-debug API calls |
| Supply Chain Compromise | T1195 | Malicious install hooks |