# Malwoverview [GitHub release (latest by date)](https://github.com/alexandreborges/malwoverview/releases/tag/v8.1.0) [GitHub last commit](https://github.com/alexandreborges/malwoverview/releases) [GitHub Release Date](https://github.com/alexandreborges/malwoverview/releases) [GitHub](https://github.com/alexandreborges/malwoverview/blob/master/LICENSE) [GitHub stars](https://github.com/alexandreborges/malwoverview/stargazers) [Twitter Follow](https://twitter.com/ale_sp_brazil) [![Downloads](https://static.pepy.tech/personalized-badge/malwoverview?period=month&units=international_system&left_color=grey&right_color=orange&left_text=Last%2030%20days)](https://pepy.tech/project/malwoverview) [Downloads/Total](https://pepy.tech/project/malwoverview) [![CodeQL](https://github.com/alexandreborges/malwoverview/actions/workflows/github-code-scanning/codeql/badge.svg)](https://github.com/alexandreborges/malwoverview/actions/workflows/github-code-scanning/codeql) ![Alt text](pictures/picture_1.jpg?raw=true "Title") ![Alt text](pictures/picture_2.jpg?raw=true "Title") ![Alt text](pictures/picture_3.jpg?raw=true "Title") ![Alt text](pictures/picture_4.jpg?raw=true "Title") ![Alt text](pictures/picture_5.jpg?raw=true "Title") ![Alt text](pictures/picture_6.jpg?raw=true "Title") ![Alt text](pictures/picture_7.jpg?raw=true "Title") ![Alt text](pictures/picture_8.jpg?raw=true "Title") ![Alt text](pictures/picture_9.jpg?raw=true "Title") ![Alt text](pictures/picture_10.jpg?raw=true "Title") ![Alt text](pictures/picture_11.jpg?raw=true "Title") ![Alt text](pictures/picture_12.jpg?raw=true "Title") ![Alt text](pictures/picture_13.jpg?raw=true "Title") ![Alt text](pictures/picture_14.jpg?raw=true "Title") ![Alt text](pictures/picture_15.jpg?raw=true "Title") ![Alt text](pictures/picture_16.jpg?raw=true "Title") ![Alt text](pictures/picture_17.jpg?raw=true "Title") ![Alt text](pictures/picture_18.jpg?raw=true "Title") ![Alt text](pictures/picture_19.jpg?raw=true "Title") ![Alt text](pictures/picture_20.jpg?raw=true "Title") ![Alt text](pictures/picture_21.jpg?raw=true "Title") ![Alt text](pictures/picture_22.jpg?raw=true "Title") ![Alt text](pictures/picture_23.jpg?raw=true "Title") Copyright (C) 2018-2026 Alexandre Borges (https://exploitreversing.com) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. See GNU Public License on . ## Current Version: 8.1.0 (Codename: Revolutions) Important note: Malwoverview does NOT submit samples to any endpoint by default, so it respects possible Non-Disclosure Agreements (NDAs). There're specific options that explicitly submit samples, but these options are explained in the help. ## ABOUT Malwoverview.py is a first response tool for threat hunting, which performs an initial and quick triage of malware samples, URLs, IP addresses, domains, malware families, IOCs and hashes. Additionally, Malwoverview is able to get dynamic and static behavior reports, submit and download samples from several endpoints. In few words, it works as a client to main existing sandboxes. This tool aims to : 01. Determine similar executable malware samples (PE/PE+) according to the import table (imphash) and group them by different colors (pay attention to the second column from output). Thus, colors matter! 02. Show hash information on Virus Total, Hybrid Analysis, Malshare, Polyswarm, URLhaus, Alien Vault, Malpedia and ThreatCrowd engines. 03. Determining whether the malware samples contain overlay and, if you want, extract it. 04. Check suspect files on Virus Total, Hybrid Analysis and Polyswarm. 05. Check URLs on Virus Total, Malshare, Polyswarm, URLhaus engines and Alien Vault. 06. Download malware samples from Hybrid Analysis, Malshare, URLHaus, Polyswarm and Malpedia engines. 07. Submit malware samples to VirusTotal, Hybrid Analysis and Polyswarm. 08. List last suspected URLs from URLHaus. 09. List last payloads from URLHaus. 10. Search for specific payloads on the Malshare. 11. Search for similar payloads (PE32/PE32+) on Polyswarm engine. 12. Classify all files in a directory searching information on Virus Total and Hybrid Analysis. 13. Make reports about a suspect domain using different engines such as VirusTotal, Malpedia and ThreatCrowd. 14. Check APK packages directly from Android devices against Hybrid Analysis and Virus Total. 15. Submit APK packages directly from Android devices to Hybrid Analysis and Virus Total. 16. Show URLs related to an user provided tag from URLHaus. 17. Show payloads related to a tag (signature) from URLHaus. 18. Show information about an IP address from Virus Total, Alien Vault, Malpedia and ThreatCrowd. 19. Show IP address, domain and URL information from Polyswarm. 21. Perform meta-search on Polyswarm Network using several criteria: imphash, IPv4, domain, URL and malware family. 22. Gather threat hunting information from AlienVault using different criteria. 23. Gather threat hunting information from Malpedia using different criteria. 24. Gather threat hunting information from Malware Bazaar using different criteria. 25. Gather IOC information from ThreatFox using different criteria. 26. Gather threat hunting information from Triage using different criteria. 27. Get evaluation to hashes from a given file against Virus Total. 28. Submit large files (>= 32 MB) to Virus Total. 29. Malwoverview uses Virus Total API v.3, so there isn't longer any option using v.2. 30. Retrieve information about a given IP address from IPInfo service. 31. Retrieve combined information about a given IP address from multiple services. 32. Offer extra option to save any downloaded file to a central location. 33. List and search vulnerabilities from NIST through different criterias. 34. Query VulnCheck database - Community/Free tier. 35. Gather threat hunting information from Shodan using different criteria. 36. Check IP reputation from AbuseIPDB. 37. Check IP classification from GreyNoise (community API). 38. Perform domain and IP Whois/RDAP lookups. 39. Cross-service hash correlation across VirusTotal, Hybrid Analysis, Triage, and AlienVault. 40. Batch hash check against Malware Bazaar from a file containing hashes. 41. Batch hash check against Hybrid Analysis from a file containing hashes. 42. Batch hash check against Triage from a file containing hashes. 43. Directory scan against Malware Bazaar, Hybrid Analysis, and Triage. 44. Extract IOCs (hashes, IPs, URLs, domains, CVEs) from text files. 45. Scan files or directories with YARA rules. 46. Interactive REPL mode for continuous threat hunting sessions. 47. JSON and CSV structured output formats. 48. Result caching with configurable TTL (SQLite-based). 49. HTTP/HTTPS/SOCKS5 proxy support for all API requests. 50. MITRE ATT&CK technique mapping for behavior reports. 51. TUI (Text User Interface) dashboard mode with panel-based navigation. 52. Gather threat hunting information from URLScan.io — submit URLs, retrieve scan results, and search scans. 53. LLM-powered threat enrichment — AI-generated risk assessment, MITRE ATT&CK mapping, and analyst recommendations appended to any query result. Supports Claude, Gemini, OpenAI, and Ollama (local). 54. Batch IP check against VirusTotal from a file containing IP addresses, showing a summary table (IP Address, Country, AS Owner, Detection). 55. Hunt on VirusTotal with YARA rules: submit and follow Retrohunt jobs, list the matched files, and create and list Livehunt rulesets and notifications. 56. Scan with a whole directory of YARA rules, each file compiled in its own namespace. 57. Search Malware Bazaar samples by YARA rule name, and download and extract the YARAify rule set from abuse.ch. 58. Download the complete Malpedia YARA ruleset for a given TLP level. 59. List the MalShare file types seen in the last 24 hours, and list the hashes of any of those types. 60. Batch hash check against URLHaus from a file containing hashes. 61. Certificate Transparency pivots through crt.sh, with no API key: enumerate the subdomains seen in issued certificates and list the certificates themselves. 62. Inspect, prune and empty the local result cache. 63. Interactive mode and TUI reach every service the command line reaches, and the TUI exports its results to json and csv. 64. Local PE triage of a file or directory with no API key, listing file type, size, overlay, overlay size and entropy, and highlighting the files above an entropy threshold. 65. Android scans hash every APK of a package, including the split APKs, instead of the base APK alone. 66. Authenticode signature checking with no API key, reporting whether a binary is signed and whether the signature is still valid, and naming the signer of a tampered file. 67. Every embedded signature of a multi-signed binary is reported, each with its own digest algorithm, certificate, thumbprint and serial number, so a second signer is never hidden behind the first. 68. The VirusTotal file check (-v 1) and hash report (-v 8) show the signature block: whether the certificate verified, the signer and counter signer chains, the signing date and every certificate with its status, algorithm, validity dates, serial number and thumbprint. ## CONTRIBUTORS Alexandre Borges (https://github.com/alexandreborges) | project owner and main developer Artur Marzano (https://github.com/Macmod) | co-main developer Corey Forman (https://github.com/digitalsleuth) | responsible for REMnux integration Christian Clauss (https://github.com/cclauss) ## HOW TO CONTRIBUTE TO THIS PROJECT Since version 6.0.0, there is a new branch named "dev". All contributions and proposals must be done into this "dev" branch. Professionals who want to contribute must open an issue explaining your proposed improvement and how it would make the project better. Once it has been accepted, so she/he is authorized to submit the PR, which will be tested. Once all changes are tested, this new version of Malwoverview is replicated to the master branch and a new Python package is generated. ## INSTALLATION This tool has been tested on REMnux, Ubuntu, Kali Linux, macOS and Windows. Malwoverview can be installed by executing the following command: * pip3.11 install git+https://github.com/alexandreborges/malwoverview or... * python -m pip install -U malwoverview If you want to install the Malwoverview on macOS, you have to execute the following commands: * /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" * brew install libmagic * pip3 install urllib3==1.26.6 * pip3 install -U malwoverview * Add Python binary directory to the PATH variable by editing .bash_profile file in your home directory. Example: export PATH=$PATH:/Users/alexandreborges/Library/Python/3.9/bin * Execute: . ./.bash_profile If you are installing Malwoverview on Windows, make sure that the following conditions are true AFTER having installed Malwoverview: * python-magic is NOT installed. (pip show python-magic) * python-magic-bin IS installed. (pip show python-magic-bin) #### Note: It is recommended to save the .malwapi.conf before any update! #### Optional Features Some features require optional dependencies. Install them as needed: * YARA scanning: pip install malwoverview[yara] * Signature checking: pip install malwoverview[signature] * PDF report export: pip install malwoverview[pdf] * TUI dashboard: pip install malwoverview[tui] * All optional: pip install malwoverview[all] ## REQUIRED APIs It is possible to start using Malwoverview does without inserting all APIs. However, to use all options of Malwoverview, you must insert the respective API of the following services: VirusTotal, Hybrid Analysis, URLHaus, Malshare, Polyswarm, Alien Vault, Malpedia, Triage, IPInfo, Malware Bazaar, ThreatFox, VulnCheck, Shodan, AbuseIPDB, GreyNoise and URLScan.io into the .malwapi.conf configuration file, which must be present (or created) in the home directory (/home/[username] or /root on Linux, and C:\Users\[username] on Windows. Alternatively, users can create a custom configuration file and indicate it by using the -c option. To highlight: if the .malwapi.conf file does not exist in your home directory, so you must create it! * A special note about the Alien Vault: it is necessary to subscribe to pulses on Alien Vault website before using -n 1 option. * A special note about Malshare and Shodan: both services require their API key to be sent in the URL itself, and neither documents a header or a request body alternative (the Malshare hashlookup endpoint is a POST, but the key still travels in the query string). Malwoverview replaces these two keys with [REDACTED] in every error message it prints, so they do not end up in the output you paste into a bug report, but the key is still recorded in the access logs of those services and in any proxy that terminates TLS between you and them. Treat both keys as exposed to the service operator and rotate them as you would any other credential. The .malwapi.conf configuration file has the following format: [VIRUSTOTAL] VTAPI = [HYBRID-ANALYSIS] HAAPI = [MALSHARE] MALSHAREAPI = [HAUSSUBMIT] HAUSSUBMITAPI = [POLYSWARM] POLYAPI = [ALIENVAULT] ALIENAPI = [MALPEDIA] MALPEDIAAPI = [TRIAGE] TRIAGEAPI = [IPINFO] IPINFOAPI = [BAZAAR] BAZAARAPI = [THREATFOX] THREATFOXAPI = [VULNCHECK] VULNCHECKAPI = [URLHAUS] URLHAUSAPI = [SHODAN] SHODANAPI = [ABUSEIPDB] ABUSEIPDBAPI = [GREYNOISE] GREYNOISEAPI = [URLSCANIO] URLSCANIOAPI = [LLM] PROVIDER = claude CLAUDE_API_KEY = CLAUDE_MODEL = claude-opus-4-8 GEMINI_API_KEY = OPENAI_API_KEY = OPENAI_MODEL = gpt-4o-mini OLLAMA_URL = http://localhost:11434 OLLAMA_MODEL = llama3.1 The APIs can be requested on the respective service websites: 01. Virus Total (community and paid API): https://www.virustotal.com/gui/join-us 02. Hybrid Analysis: https://www.hybrid-analysis.com/signup 03. Malshare: https://malshare.com/doc.php 04. URLHaus: https://urlhaus.abuse.ch/api/#account 05. Polyswarm: https://docs.polyswarm.io/consumers 06. Alien Vault: https://otx.alienvault.com/api 07. Malpedia: It doesn't offer open registration, but you can request an user account directly through Twitter (DM) or feedback e-email. The Malpedia Twitter handle is @malpedia. 08. Malware Bazaar: https://bazaar.abuse.ch/api/#auth\_key 09. ThreatFox: https://threatfox.abuse.ch/api/#auth\_key 10. Triage: https://tria.ge/signup. 11. IPInfo: https://ipinfo.io/ 12. VulnCheck: https://vulncheck.com/signin (Community/Free tier available) 13. Shodan: https://account.shodan.io/register 14. AbuseIPDB: https://www.abuseipdb.com/register 15. GreyNoise: https://viz.greynoise.io/signup 16. URLScan.io: https://urlscan.io/user/signup #### LLM Enrichment Providers (optional) Malwoverview supports LLM-powered threat enrichment via the --enrich flag. After any query, an AI-generated threat assessment is appended with risk level, malware family identification, MITRE ATT&CK mapping, and analyst recommendations. Three providers are supported. Configure one in the [LLM] section of .malwapi.conf: **18. Anthropic Claude (paid, best quality)** Best results for threat intelligence analysis. Accurately identifies malware families, maps precise MITRE ATT&CK techniques, and provides actionable recommendations based on real threat knowledge. Setup: a) Create an API account at https://console.anthropic.com/ (separate from claude.ai subscription) b) Go to Settings → Billing → Add credit ($5 minimum, pay-per-use) c) Go to Settings → API Keys → Create Key d) Copy the key (starts with sk-ant-api03-...) e) Configure .malwapi.conf: [LLM] PROVIDER = claude CLAUDE_API_KEY = sk-ant-api03-your-key-here CLAUDE_MODEL = claude-opus-4-8 CLAUDE_MODEL is optional and defaults to claude-opus-4-8. Common choices: - claude-opus-4-8 — Best quality (default) - claude-sonnet-4-6 — Strong balance of quality and cost - claude-haiku-4-5 — Fastest and cheapest Cost: ~$0.02-0.04 per enrichment call using the default Opus model (less with Sonnet or Haiku). $5 credit provides roughly 125-250 Opus enrichment calls. **19. Google Gemini (requires billing)** Good quality results. Requires a Google Cloud billing account. Setup: a) Go to https://aistudio.google.com/apikeys b) Sign in with Google account c) Click Create API Key → copy the key d) Enable billing: click the project link next to your key → Google Cloud Console → Billing → Link a billing account e) Configure .malwapi.conf: [LLM] PROVIDER = gemini GEMINI_API_KEY = your-gemini-key-here GEMINI_MODEL = gemini-2.0-flash Note: The free tier has a low rate limit (2-5 requests per minute). For higher limits, enable pay-per-use billing. **20. OpenAI (paid)** Good quality results using GPT models. Requires an OpenAI account with API credits. Setup: a) Create an account at https://platform.openai.com/signup b) Go to https://platform.openai.com/api-keys → Create new secret key c) Add billing at https://platform.openai.com/settings/organization/billing d) Configure .malwapi.conf: [LLM] PROVIDER = openai OPENAI_API_KEY = sk-your-key-here OPENAI_MODEL = gpt-4o-mini Available models: - gpt-4o-mini — Cheapest (~$0.002 per enrichment), good quality (default) - gpt-4o — Better quality (~$0.01 per enrichment) **21. Ollama (free, local, private)** Runs entirely on your machine. No API key needed, no data leaves your system. Good for environments where sending threat data to cloud APIs is not permitted. Quality depends on the model chosen. Setup: a) Download and install Ollama from https://ollama.com/download (available for Windows, Linux, and macOS) b) Open a terminal and pull a model: ollama pull qwen2.5:14b Recommended models: - qwen2.5:14b — Best quality at reasonable size (9 GB, needs 16 GB RAM) - llama3.1:8b — Good quality, smaller (5 GB, needs 8 GB RAM) - llama3.1:70b — Excellent quality, large (40 GB, needs 48 GB RAM) c) Ollama starts automatically and serves on http://localhost:11434 d) Configure .malwapi.conf: [LLM] PROVIDER = ollama OLLAMA_URL = http://localhost:11434 OLLAMA_MODEL = qwen2.5:14b Performance: GPU with 12+ GB VRAM provides fast responses (5-10s). CPU-only is slower (30-60s) but functional. Larger models (14b, 70b) require more VRAM and may timeout on CPU if insufficient memory is available. The llama3.1:8b model is recommended for machines with limited GPU memory (6 GB or less). Expected response times: - Claude API: 3-8 seconds - Gemini API: 3-8 seconds - Ollama (GPU with sufficient VRAM): 5-15 seconds - Ollama (CPU-only, 8b model): 30-60 seconds - Ollama (CPU-only, 14b+ model): 60-300 seconds Usage examples: # CLI: append --enrich to any query malwoverview -v 8 -V --enrich malwoverview -ip 1 -IP 8.8.8.8 --enrich malwoverview --correlate-hash --enrich # Interactive REPL: toggle enrichment on/off or switch provider malwoverview --interactive malwoverview> set enrich on # use provider from config malwoverview> set enrich claude # switch to Claude malwoverview> set enrich ollama # switch to Ollama malwoverview> set enrich openai # switch to OpenAI malwoverview> set enrich off # disable enrichment malwoverview> vt hash # malware analysis + enrichment malwoverview> nist cve CVE-2024-3400 # CVE lookup + enrichment malwoverview> vulncheck cve CVE-2024-3400 # VulnCheck + enrichment # TUI: click the Enrich button to cycle through providers # Enrich (OFF) → claude → gemini → openai → ollama → OFF # Green button = provider active and configured # Yellow button = provider selected but API key missing # Default button = enrichment disabled malwoverview --tui ---------------------------------------------------- Note about API requests to the MALPEDIA: ---------------------------------------------------- The service and acceptance are based on the community vetting. Thus, it's recommended that you submit an API request from your business e-mail address and NOT from a public/free one (Gmail, Outlook and so on). Additionally, it would be great if you provided more information about yourself (LinkedIn account, X/Twitter, Mastodon, BlueSky, etc.) as this would facilitate verification of your identity, professional profile, and legitimacy, speeding up the approval of your request. ---------------------------------------------------- Note about Triage: ---------------------------------------------------- Every Triage operation is based on the Triage ID of each artifact, so you need touse the "-x 1 -X \:\" to search for the correct ID of the artifact then use this ID information with the remaining Triage options (-x [2-7]) to get more threat hunting information from Triage endpoint. ---------------------------------------------------- Note about URLHaus, Malware Bazaar and Threat Fox: ---------------------------------------------------- Starting in the second half of 2025, an Auth-Key (API) will be required to use the URLHaus,Malware Bazaar and Threat Fox services. ---------------------------------------------------- Note about background color of the terminal: ---------------------------------------------------- Malwoverview was written to produce output for a dark terminal background. However, there is the -o 0 option that changes and adapts the output colors for a light background. ----------------------------------------------------- To check the installation, execute: malwoverview --help Further information is available on: (PYPI.org repository) https://pypi.org/project/malwoverview/ (Github) https://github.com/alexandreborges/malwoverview If you want to perform the manual installation (it is not usually necessary), so few steps should be executed, as shown in the next sub-section. ## MANUAL INSTALLATION (REMnux and Ubuntu) 1. Python version 3.11 or later (Only Python 3.x !!! It does NOT work using Python 2.7) $ apt-get install python3.11 (for example) 2. Python-magic. To install python-magic package you can execute the following command: $ pip3.11 install python-magic Or you can compile it from the github repository: $ git clone https://github.com/ahupp/python-magic $ cd python-magic/ $ python3.11 setup.py build $ python3.11 setup.py install As there are serious issues related to existing two versions of python-magic package, the recommendation is to install it from Github (second procedure above) and copy the magic.py file to the SAME directory of malwoverview tool. 3. Install all needed Python packages: $ pip3.11 install -r requirements.txt OR $ pip3.11 install -U pefile $ pip3.11 install -U colorama $ pip3.11 install -U simplejson $ pip3.11 install -U python-magic $ pip3.11 install -U requests $ pip3.11 install -U validators $ pip3.11 install -U geocoder $ pip3.11 install -U polyswarm-api $ pip3.11 install -U pathlib $ pip3.11 install -U configparser 4. To check an Android mobile you need to install the "adb" tool: $ sudo apt get install adb PS: before trying Android's options, check: * If the adb tool is listed in the PATH environment variable. * If the system has authorized access to the device by using "adb devices -l" ## HELP usage: python malwoverview.py -c -d -o <0|1> -v <1-20> -V -a <1-13> -A -l <1-8> -L -j <1-8> -J -p <1-8> -P -y <1-5> -Y -n <1-5> -N -m <1-9> -M -b <1-15> -B -x <1-9> -X -ip <1-8> -IP -O --nist <1-5> --NIST -vc <1-8> -VC -s <1-2> -S -ab <1> -AB -gn <1> -GN -wh <1-2> -WH -ct <1-2> -CT -u <1-5> -U --correlate-hash --extract-iocs --yara --yara-target --peinfo --entropy-threshold --sigcheck --no-signature --sig-verify-mode --output-format text|json|csv --proxy --quiet --verbose --no-cache --cache-ttl --cache-stats --prune-cache --clear-cache --no-resolve --defang --no-ioc-filter --report html|pdf --interactive --tui --attack-map Malwoverview is a first response tool for threat hunting written by Alexandre Borges. MALWARE OPTIONS: Malware analysis and intelligence query options -h, --help + show this help message and exit -c CONFIG FILE, --config CONFIG FILE + Use a custom config file to specify API's. -d DIRECTORY, --directory DIRECTORY + Specifies the directory containing malware samples to be checked against VIRUS TOTAL. + Use the option -D to decide whether you are being using a public VT API or a Premium VT API. -o BACKGROUND, --background BACKGROUND + Adapts the output colors to a light background color terminal. + The default is dark background color terminal. -v VIRUSTOTAL, --virustotal_option VIRUSTOTAL + -v 1: given a file using -V option, it queries the VIRUS TOTAL database (API v.3) to get the report for the given file through -V option. + v 2: it shows an antivirus report for a given file using -V option (API v.3); + v 3: equal to -v2, but the binary's IAT and EAT are also shown (API v.3); + v 4: it extracts the overlay; + v 5: submits an URL to VT scanning; + v 6: submits an IP address to Virus Total; + v 7: this options gets a report on the provided domain from Virus Total; + v 8: verifies a given hash against Virus Total; + v 9: submits a sample to VT (up to 32 MB). Use forward slash to specify the target file on Windows systems. Demands passing sample file with -V option; + -v 10: verifies hashes from a provided file through option -V. This option uses public VT API v.3; + -v 11: verifies hashes from a provided file through option -V. This option uses Premium API v.3; + -v 12: it shows behaviour information of a sample given a hash through option -V. This option uses VT API v.3; -v 13: it submits LARGE files (above 32 MB) to VT using API v.3; + -v 14: submits a Retrohunt job using the YARA rules file or rules directory given with -V (VT scans the samples it received over the past months against the rules); + -v 15: lists your Retrohunt jobs, optionally filtered by a status passed through -V (starting, running, aborting, aborted or finished); + -v 16: shows the status and progress of the Retrohunt job whose id is given with -V; + -v 17: lists the files matched by the Retrohunt job whose id is given with -V; + -v 18: creates a Livehunt ruleset from the YARA rules file or rules directory given with -V (VT then matches every new submission against it); + -v 19: lists your Livehunt rulesets; + -v 20: lists your Livehunt notifications. Options 14 to 20 need a VT key with premium (enterprise) privileges; -V VIRUSTOTAL_ARG, --virustotal_arg VIRUSTOTAL_ARG + Provides argument for -v option. If "-v 1" to "-v 4" then -V must be a file path; If "-v 5" then -V must be a URL; If "-v 6" then -V must be an IP address; If "-v 7" then -V must be a domain; If "-v 8" then -V must be a hash (MD5/SHA1/SHA256); If "-v 9" or "-v 13" then -V must be a file path to submit; If "-v 10" or "-v 11" then -V must be a file containing hashes (one per line); If "-v 12" then -V must be a hash for behavior analysis; If "-v 14" or "-v 18" then -V must be a YARA rules file or a directory of rules; If "-v 15" then -V may be a job status; If "-v 16" or "-v 17" then -V must be a Retrohunt job id. -a HYBRID_ANALYSIS, --hybrid_option HYBRID_ANALYSIS + This parameter fetches reports from HYBRID ANALYSIS, download samples and submits samples to be analyzed. + The possible values are: + 1: gets a report for a given hash or sample from a Windows 7 32-bit environment; + 2: gets a report for a given hash or sample from a Windows 7 32-bit environment (HWP Support); + 3: gets a report for given hash or sample from a Windows 64-bit environment; + 4: gets a report for a given hash or sample from an Android environment; + 5: gets a report for a given hash or sample from a Linux 64-bit environment; + 6: submits a sample to Windows 7 32-bit environment; + 7. submits a sample to Windows 7 32-bit environment with HWP support environment; + 8. submits a sample to Windows 7 64-bit environment; + 9. submits a sample to an Android environment; + 10. submits a sample to a Linux 64-bit environment; + 11. downloads the sample for a given hash (the stored sample is the same regardless of the sandbox environment, so a single option replaces the former options 11 to 15); + 12. batch hash check from a file (one hash per line); + 13. directory scan - computes SHA256 for each file and checks against Hybrid Analysis. -A SUBMIT_HA, --ha_arg SUBMIT_HA + Provides argument for -a option from HYBRID ANALYSIS. If "-a 1" to "-a 5" then -A must be a hash or a file path (auto-detected); If "-a 6" to "-a 10" then -A must be a file path to submit; If "-a 11" then -A must be a hash to download; If "-a 12" then -A must be a file containing hashes (one per line); If "-a 13" then -A must be a directory path to scan. -D VT_PUBLIC_PREMIUM, --vtpubpremium VT_PUBLIC_PREMIUM + This option must be used with -d option. + Possible values: + <0> it uses the Premium VT API v3 (default); + <1> it uses the Public VT API v3. -l MALSHARE_HASHES, --malsharelist MALSHARE_HASHES + This option performs download a sample and shows hashes of a specific type from the last 24 hours from MALSHARE repository. + Possible values are: + 1: Download a sample; + 2: PE32 (default) ; + 3: ELF ; + 4: Java; + 5: PDF ; + 6: List the file types available in the last 24 hours (and how many samples of each); + 7: List of hashes from past 24 hours; + 8: List hashes of the file type given with -L (use -l 6 to discover the valid file types). -L MALSHARE_HASH_SEARCH, --malshare_hash MALSHARE_HASH_SEARCH + Provides a hash as argument for downloading a sample from MALSHARE repository (-l 1) or, when used with -l 8, the file type whose hashes must be listed. -j HAUS_OPTION, --haus_option HAUS_OPTION + This option fetches information from URLHaus depending of the value passed as argument: + 1: performs download of the given sample; + 2: queries information about a provided hash ; + 3: searches information about a given URL; + 4: searches a malicious URL by a given tag (case sensitive); + 5: searches for payloads given a tag; + 6: retrives a list of downloadable links to recent payloads; + 7: retrives a list of recent malicious URLs; + 8: batch hash check from a file (one hash per line). -J HAUS_ARG, --haus_arg HAUS_ARG + Provides argument for -j option from URLHaus. If "-j 1" then -J must be a SHA256 hash to download the sample; If "-j 2" then -J must be a hash (MD5/SHA1/SHA256) to search; If "-j 3" then -J must be a URL to check; If "-j 4" then -J must be a tag (case sensitive); If "-j 5" then -J must be a signature name. -p POLY_OPTION, --poly_option POLY_OPTION + (Only for Linux) This option is related to POLYSWARM operations: + 1. searches information related to a given hash provided using -P option; + 2. submits a sample provided by -P option to be analyzed by Polyswarm engine ; + 3. Downloads a sample from Polyswarm by providing the hash throught option -P. Attention: Polyswarm enforces a maximum of 20 samples per month; + 4. searches for similar samples given a sample file thought option -P; + 5. searches for samples related to a provided IP address through option -P; + 6. searches for samples related to a given domain provided by option -P; + 7. searches for samples related to a provided URL throught option -P; + 8. searches for samples related to a provided malware family given by option -P. -P POLYSWARM_ARG, --poly_arg POLYSWARM_ARG + (Only for Linux) Provides an argument for -p option from POLYSWARM. -y ANDROID_OPTION, --android_option ANDROID_OPTION + This ANDROID option has multiple possible values: + <1>: Check all third-party APK packages from the USB-connected Android device against Hybrid Analysis using multithreads. Notes: the Android device does not need to be rooted and the system does need to have the adb tool in the PATH environment variable; + <2>: Check all third-party APK packages from the USB-connected Android device against VirusTotal using Public API (slower because of 60 seconds delay for each 4 hashes). Notes: the Android device does not need to be rooted and the system does need to have adb tool in the PATH environment variable; + <3>: Check all third-party APK packages from the USB-connected Android device against VirusTotal using multithreads (only for Private Virus API). Notes: the Android device does not need to be rooted and the system needs to have adb tool in the PATH environment variable; + <4> Sends an third-party APK from your USB-connected Android device to Hybrid Analysis; + 5. Sends an third-party APK from your USB-connected Android device to Virus-Total. -Y ANDROID_ARG, --android_arg ANDROID_ARG + This option provides the argument for -y from ANDROID. -n ALIENVAULT, --alienvault ALIENVAULT + Checks multiple information from ALIENVAULT. The possible values are: + 1: Get the subscribed pulses; + 2: Get information about an IP address; + 3: Get information about a domain; + 4: Get information about a hash; + 5: Get information about a URL. -N ALIENVAULT_ARGS, --alienvaultargs ALIENVAULT_ARGS + Provides argument for -n option from ALIENVAULT. If "-n 1" then -N must be the number of subscribed pulses to retrieve; If "-n 2" then -N must be an IP address; If "-n 3" then -N must be a domain; If "-n 4" then -N must be a hash (MD5/SHA256); If "-n 5" then -N must be a URL. -m MALPEDIA, --malpedia MALPEDIA + This option is related to MALPEDIA and presents different meanings depending on the chosen value. Thus: + 1: List meta information for all families; + 2: List all actors ID; + 3: List all available payloads organized by family from Malpedia; + 4: Get meta information from an specific actor, so it is necessary to use the -M option. Additionally, try to confirm the correct actor ID by executing malwoverview with option -m 3; + 5: List all families IDs; + 6: Get meta-information from an specific family, so it is necessary to use the -M option. Additionally, try to confirm the correct family ID by executing malwoverview with option -m 5; + 7: Get a malware sample from malpedia (zip format -- password: infected). It is necessary to specify the requested hash by using -M option; + 8: Get a zip file containing Yara rules for a specific family (get the possible families using -m 5), which must be specified by using -M option; + 9: Get a zip file containing the complete Malpedia Yara ruleset for a TLP level, which must be given with -M as one of tlp_white, tlp_green, tlp_amber or auto (the short forms white, green and amber are also accepted). Combine it with --yara to scan with the downloaded rules. -M MALPEDIAARG, --malpediarg MALPEDIAARG + Provides argument for -m option from MALPEDIA. If "-m 4" then -M must be an actor name (confirm with -m 2); If "-m 6" then -M must be a family name (confirm with -m 5); If "-m 7" then -M must be a hash to download the sample; If "-m 8" then -M must be a family name to get YARA rules. -b BAZAAR, --bazaar BAZAAR + Checks multiple information from MALWARE BAZAAR and THREATFOX. The possible values are: + 1: (Bazaar) Query information about a malware hash sample; + 2: (Bazaar) Get information and a list of malware samples associated and according to a specific tag; + 3: (Bazaar) Get a list of malware samples according to a given imphash; + 4: (Bazaar) Query latest malware samples; + 5: (Bazaar) Download a malware sample from Malware Bazaar by providing a SHA256 hash. The downloaded sample is zipped using the following password: infected; + 6: (ThreatFox) Get current IOC dataset from last x days given by option -B (maximum of 7 days); + 7: (ThreatFox) Search for the specified IOC on ThreatFox given by option -B; + 8: (ThreatFox) Search IOCs according to the specified tag given by option -B; + 9: (ThreatFox) Search IOCs according to the specified malware family provided by option -B; + 10. (ThreatFox) List all available malware families. + 11: (Bazaar) Batch hash check from a file (one hash per line) against Malware Bazaar; + 12: (Bazaar) Directory scan — computes SHA256 for each file in a directory and checks against Malware Bazaar; + 13: (Bazaar) Search samples matching the YARA rule name given by option -B. Rule names are listed at the end of a hash report (-b 1), and are also the rule names inside the YARAify set downloaded with -b 14 and extracted with -b 15; + 14: (YARAify) Download the YARAify rule set (abuse.ch), which is the rule set behind Malware Bazaar; + 15: (YARAify) Extract the downloaded YARAify rule set into a rules directory that can be given to --yara. -B BAZAAR_ARG, --bazaararg BAZAAR_ARG + Provides argument to -b MALWARE BAZAAR and THREAT FOX option: + "-b 1" indicates that the -B's argument must be a hash and a report about the sample will be retrieved; + "-b 2" indicates that -B's argument must be a malware tag and last samples matching this tag will be shown; + "-b 3" means that the argument given by -M must be a imphash and last samples matching this impshash will be shown; + "-b 4" means that the argument given by -M must be "100 or time", where "100" lists last "100 samples" and "time" lists last samples added to Malware Bazaar in the last 60 minutes; + "-b 5" means that the sample will be downloaded and -B's argument must be a SHA256 hash of the sample that you want to download from Malware Bazaar; + "-b 6" indicates that a list of IOCs will be retrieved and the -B's value is the number of DAYS to filter such IOCs. The maximum time is 7 (days); + "-b 7" indicates that the -B's argument is the IOC you want to search for; + "-b 8" indicates that the -B's argument is the IOC's TAG that you want search for; + "-b 9" indicates that the -B argument is the malware family that you want to search for IOCs; -x TRIAGE, --triage TRIAGE + Provides information from TRIAGE according to the specified value: + 1: this option gets sample's general information by providing an argument with -X option in the following possible formats: - sha256: - sha1: - md5: - family: - score: - tag: - url: - wallet: - ip:; + 2: Get a sumary report for a given Triage ID (got from option -x 1); + 3: Submit a sample for analysis; + 4: Submit a sample through a URL for analysis; + 5: Download sample specified by the Triage ID; + 6: Download pcapng file from sample associated to given Triage ID; + 7: Get a dynamic report for the given Triage ID (got from option -x 1); + 8: Batch hash check from a file (one hash per line) against Triage; + 9: Directory scan — computes SHA256 for each file in a directory and checks against Triage. -X TRIAGE_ARG, --triagearg TRIAGE_ARG + Provides argument for -x option from TRIAGE. If "-x 1" then -X must be a search query (e.g., sha256:, family:, tag:, ip:); If "-x 2" then -X must be a Triage sample ID (obtained from -x 1); If "-x 3" then -X must be a file path to submit; If "-x 4" then -X must be a URL to submit; If "-x 5" or "-x 6" then -X must be a Triage sample ID to download; If "-x 7" then -X must be a Triage sample ID for dynamic report; If "-x 8" then -X must be a file containing hashes (one per line); If "-x 9" then -X must be a directory path to scan. -O OUTPUTDIR, --output-dir OUTPUTDIR + Set output directory for all sample downloads. -ip IP, --ip IP + Get IP information from various sources. The possible values are: + 1: Get details for an IP address provided with -IP from IPInfo; + 2: Removed in 8.1.0 (BGPView shut down); + 3: Get details for an IP address provided with -IP from all available intel services (VirusTotal/Alienvault); + 4: Get details for an IP address from Shodan; + 5: Get details for an IP address from AbuseIPDB; + 6: Get details for an IP address from GreyNoise; + 7: Get details for an IP address from all services (comprehensive); + 8: Batch check IP addresses from a file (one per line) against VirusTotal and show a summary table (IP Address, Country, AS Owner, Detection). Use -D to choose between Public (-D 1) and Premium (-D 0, default) VT API. -IP IPARG, --iparg IPARG + Provides an argument for the -ip option. For -ip 1 through 7 it must be a valid IP address (IPv4 or IPv6); for -ip 8 it must be a file containing IP addresses (one per line). -s SHODAN, --shodan SHODAN + SHODAN options: + 1: IP lookup; + 2: Search query. -S SHODAN_ARG, --shodanarg SHODAN_ARG + Provides argument for -s option from SHODAN. If "-s 1" then -S must be an IP address; If "-s 2" then -S must be a search query (e.g., "apache", "port:22 country:BR"). -ab ABUSEIPDB, --abuseipdb ABUSEIPDB + ABUSEIPDB options: + 1: Check IP reputation. -AB ABUSEIPDB_ARG, --abuseipdbarg ABUSEIPDB_ARG + Provides an IP address for -ab option from ABUSEIPDB. -gn GREYNOISE, --greynoise GREYNOISE + GREYNOISE options: + 1: Quick IP check (community API). -GN GREYNOISE_ARG, --greynoisearg GREYNOISE_ARG + Provides an IP address for -gn option from GREYNOISE. -wh WHOIS, --whois WHOIS + WHOIS options: + 1: Domain whois lookup; + 2: IP whois/RDAP lookup. -WH WHOIS_ARG, --whoisarg WHOIS_ARG + Provides argument for -wh option from WHOIS. If "-wh 1" then -WH must be a domain name; If "-wh 2" then -WH must be an IP address. -ct CRTSH, --crtsh CRTSH + Queries the Certificate Transparency logs through crt.sh, which needs no API key. Possible values: + 1: lists the distinct DNS names seen in the certificates issued for the domain given with -CT, which is a cheap way of enumerating subdomains. Names belonging to other domains, which appear because a certificate can cover several tenants, are counted and reported separately; + 2: lists the certificates themselves (identifier, issuer, common name and validity dates, newest first). -CT CRTSH_ARG, --crtsharg CRTSH_ARG + Provides the domain name queried by the -ct option. -u URLSCANIO, --urlscanio URLSCANIO + URLSCAN.IO options: + 1: Submit a URL for scanning; + 2: Get scan result by UUID; + 3: Search scans using Elasticsearch query syntax (e.g., "page.server:nginx", "task.tags:phishing"); + 4: Search scans by domain; + 5: Search scans by IP. -U URLSCANIO_ARG, --urlscanioarg URLSCANIO_ARG + Provides argument for -u option from URLSCAN.IO. If "-u 1" then -U must be a URL to submit for scanning; If "-u 2" then -U must be a UUID (obtained from -u 1); If "-u 3" then -U must be an Elasticsearch query (e.g., "page.server:nginx", "task.tags:phishing"); If "-u 4" then -U must be a domain; If "-u 5" then -U must be an IP address. --correlate-hash HASH + Cross-service hash correlation: queries a hash across VirusTotal, Hybrid Analysis, Triage, and AlienVault producing a consolidated report. --extract-iocs SOURCE + Extract IOCs (hashes, IPs, URLs, domains, emails, CVEs) from a file (.txt, .pdf, .eml) or URL (http/https). PDF extraction requires: pip install malwoverview[pdf] --yara RULES_FILE + YARA rules file to use for scanning. Must be used with --yara-target. Requires: pip install malwoverview[yara] --yara-target TARGET + File or directory to scan with YARA rules. --peinfo TARGET + Local PE triage of a file or directory (no API key): file type, size, overlay, overlay size and entropy. Directories are scanned recursively. Entropy is the highest PE section entropy, or the whole-file Shannon entropy for non-PE files. --entropy-threshold VALUE + Entropy value at which --peinfo highlights a file as packed or encrypted. Default: 7.0 --sigcheck TARGET + Check the Authenticode signature of a file or directory (no API key): status, signer, issuer, certificate dates, digest algorithm, certificate thumbprint and serial number. The status is one of VALID, TAMPERED, UNTRUSTED, EXPIRED, MALFORMED, INVALID, NONE (no embedded signature), PRESENT (a signature is there but was not verified) or N/A (not a PE file). Only embedded signatures are read: a file reported as NONE can still be signed through a Windows catalog. Full verification requires: pip install malwoverview[signature] VALID means the file still matches the certificate it was signed with. It is not a verdict on the file: signing certificates are stolen, abused and issued by mistake, and malware has carried valid Microsoft signatures. An embedded signature is stored in the overlay, so a signed file always reports one and that overlay is not an appended payload. Certificate revocation is not checked. No network request is made, so a file signed with a certificate that was revoked afterwards still reports VALID. A signature stays VALID after its certificate expires when it carries a countersignature, because the countersignature proves the file was signed while the certificate was still valid. This is how Authenticode is meant to work, and the report says so when it happens: an expiry date in the past next to VALID is not a contradiction. A file can carry more than one embedded signature, usually SHA-1 for compatibility plus SHA-256, and the signers frequently differ. The Signer column shows one of them and marks the rest as (+N); running --sigcheck on a single file lists every signature with its own digest algorithm, certificate, thumbprint and serial number. --no-signature + Skip signature verification in --peinfo and --sigcheck, reporting only whether a signature is present. Useful on large directories. --sig-verify-mode MODE + Which embedded signature decides the status of a multi-signed file: any, first, all or best. Default: best best follows the signature made with the strongest digest algorithm, which is the one Windows honours. first follows file order, matching sigcheck.exe. all requires every signature to verify, and any accepts the file when a single one does. The choice matters: across 517 multi-signed drivers, 37 change status depending on this setting, and any reports VALID on 21 files that first rejects. --attack-map + Enable MITRE ATT&CK technique mapping for behavior reports. GENERAL OPTIONS: Output format, proxy, cache, and verbosity options --output-format text|json|csv + Output format: text (default, colored terminal), json, or csv. --proxy URL + HTTP/HTTPS/SOCKS5 proxy URL (e.g., socks5://127.0.0.1:9050). --quiet + Suppress banner and cosmetic output. --verbose + Show debug information (request URLs, timing, etc.). --no-cache + Disable result caching. --cache-ttl SECONDS + Cache time-to-live in seconds (default: 3600). --cache-stats + Show the local result cache location, how many entries it holds, how many of them are expired under the current --cache-ttl, and its size on disk. Then exit. --prune-cache + Delete only the expired entries from the local result cache (according to --cache-ttl) and exit. --clear-cache + Delete every entry from the local result cache and exit. --no-resolve + Do not resolve or geolocate the host names found in the results. Listing a feed (for example the URLHaus payloads and tag listings) normally makes your host look up every URL it shows, which tells the operator of that infrastructure that it is being investigated. With this option the location column shows "Not Resolved" instead. --defang + Print the IOCs listed by --extract-iocs in defanged form (hxxp://example[.]com), so they can be copied into a report or a ticket without becoming clickable. It applies to that listing only, and changes only the output: the queries are still made with the real values. --no-ioc-filter + Turn off the noise filtering that --extract-iocs applies by default. Normally an HTML page has its