Skip to main content

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-bundle exists 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

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

malwagon-0.1.0.tar.gz (19.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

malwagon-0.1.0-py3-none-any.whl (23.6 kB view details)

Uploaded Python 3

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

Hashes for malwagon-0.1.0.tar.gz
Algorithm Hash digest
SHA256 7813b85fbcb742a0b3483e37ac02de645f4ca26c817004839ab72d223a6920ab
MD5 8bf8d89b0b95b4bb970b3e9f0789d85c
BLAKE2b-256 1ea9353a13e0ef9a3ccb8e18c98c59514749405ced68f40bb3749a88c34ab2cc

See more details on using hashes here.

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

Hashes for malwagon-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f495af8fb0368465bdb979bdfb5e3f74e9689bda8854c9945e34f0dc16b0fd4d
MD5 5f8f4f8a85f2c43aa2e5cbb8787b7d8f
BLAKE2b-256 3c1d6f3e5b6b747b1a5bb2aee140a1faf14dd3dfba8485729ea373e546c17c8a

See more details on using hashes here.

Release history Release notifications | RSS feed

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page