malwagon
Submit a file to the Malwagon malware analysis sandbox from the command line, wait for the detonation to finish, and print the verdict.
$ malwagon suspicious.exe
uploading suspicious.exe (412.0 KB) to malwagon.com
scan 48213 queued
waiting for the sandbox, usually 90 to 300 seconds
queued 0s elapsed
running 12s elapsed
analyzing 2m 18s elapsed
MALICIOUS score 88/100
sha256 354fd5f5e4afc2280a19c8541fd4abe38bf8fb73efbeb3c2b0a4f2b1d9e0c7a1
report https://malwagon.com/s/48213
Install
pip install malwagon
Works on Linux, macOS and Windows, on Python 3.8 and newer. It has no dependencies - the standard library makes the request.
An API key
Every scan needs one. Mint it in the console under Settings -> API tokens, give it the submit permission, then store it once:
$ malwagon login
Malwagon API key for malwagon.com:
key accepted and saved to ~/.config/malwagon/config.json
Or keep it in the environment instead, which is what CI usually wants:
export MALWAGON_API_KEY=mwg_...
There is deliberately no --api-key flag. A key on the command line is
visible to every process on the machine and is written verbatim into your shell
history.
Usage
malwagon FILE [options]
--json |
print one JSON object and nothing else |
--no-wait |
submit and exit with the scan id |
--private |
keep the report private (needs a plan that includes it) |
--internet |
detonate with internet access (paid plans only) |
--os KEY |
force a sandbox image |
--timeout-run N |
how long to let the sample run |
--quiet |
drop the progress lines, keep the result |
malwagon --help lists all of them.
The sandbox is chosen from the file, not from a flag. A Windows binary
detonates on Windows, an ELF or a Python package on the Linux sandbox, a driver
reaches the kernel analyzer. Pass --os only when you want to override that.
Exit codes
| code | meaning |
|---|---|
| 0 | clean |
| 1 | malicious |
| 2 | error |
| 3 | suspicious |
So a pipeline can gate on it:
malwagon build/output.exe --quiet || echo "do not ship this"
Machine-readable output
$ malwagon sample.dll --json
{
"limitations": [],
"report_url": "https://malwagon.com/s/48213",
"scan_id": 48213,
"score": 88,
"sha256": "354fd5f5e4afc2280a19c8541fd4abe38bf8fb73efbeb3c2b0a4f2b1d9e0c7a1",
"size": 421888,
"status": "completed",
"verdict": "malicious",
"verdict_raw": null
}
Progress goes to stderr and the result to stdout, so | jq works while you
still see the wait.
Plans
A Community key works and runs a network isolated scan: no internet egress from the sandbox, and no threat intelligence or AI layer on the report. The tool says so under the verdict when a layer did not run, rather than leaving an empty section to be read as "the sample did nothing". A paid plan adds egress, reputation lookups and the AI narrative.
What this client will not do
- It will not send your key over plain HTTP, or to a host other than the one the key was stored for.
- It has no
--insecure. TLS is verified, always.--ca-bundleexists for a private deployment. - It does not follow redirects, because that is how a bearer token walks onto somebody else's host.
- It refuses a symlink, a device, a pipe and anything that looks like a private key or a credential file, unless you insist.
- It treats everything the server sends as untrusted text: terminal escapes, overwrite characters and bidirectional overrides are removed before anything is printed, and the verdict is looked up in a fixed table rather than printed as the server spelled it.
Links
- Platform: https://malwagon.com
- API reference: https://malwagon.com/docs/api
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file malwagon-0.1.0.tar.gz.
File metadata
- Download URL: malwagon-0.1.0.tar.gz
- Upload date:
- Size: 19.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7813b85fbcb742a0b3483e37ac02de645f4ca26c817004839ab72d223a6920ab
|
|
| MD5 |
8bf8d89b0b95b4bb970b3e9f0789d85c
|
|
| BLAKE2b-256 |
1ea9353a13e0ef9a3ccb8e18c98c59514749405ced68f40bb3749a88c34ab2cc
|
File details
Details for the file malwagon-0.1.0-py3-none-any.whl.
File metadata
- Download URL: malwagon-0.1.0-py3-none-any.whl
- Upload date:
- Size: 23.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
twine/7.0.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f495af8fb0368465bdb979bdfb5e3f74e9689bda8854c9945e34f0dc16b0fd4d
|
|
| MD5 |
5f8f4f8a85f2c43aa2e5cbb8787b7d8f
|
|
| BLAKE2b-256 |
3c1d6f3e5b6b747b1a5bb2aee140a1faf14dd3dfba8485729ea373e546c17c8a
|